Mysql集群存储,主从复制和读写分离

部署环境

系统 地址 版本
  MASTER   CentOS 6.7 192.168.1.1 Mysql 5.1.73
  SLAVE CentOS 6,7 192.168.1.2 Mysql 5.1.73

MASTER主服务器配置

1. 安装并登陆 mysql ,如果登录时有“ERROR 1045 (28000):”报错请点击这里解决

[root@zhzy ~]$ yum install mysqld
[root@zhzy ~]$ mysql -u root -p

2. 创建需要同步的数据库,这里我创建了zhzy 数据库

mysql> create database zhzy;

3. 推出数据库修改 /etc/my.cnf 以支持主从复制

[root@zhzy ~]$ vim /etc/my.cnf
[mysqld]  ##在此字段下添加
server-id=1
log-bin=zhzy-bin
log-slave-updates=1
binlog-do-db=zhzy
  • server-id=1                   ##服务器ID,从服务器(SLAVE)必须比主服务器(MASTER)高
  • log-bin=zhzy-bin        ##开启二进制日志,保存的文件名称为 zhzy-bin
  • log-slave-updates=1   ##使从服务器(SLAVE)跟新上述文件
  • binlog-do-db=zhzy     ##要同步的数据库,这里我同步zhzy

修改过配置文件后一定重启才能生效: service mysqld restart

5. 在master上为slave添加同步帐号

mysql> grant replication slave on *.* to 'user'@'192.168.1.2' identified by '123456';
mysql> flush  privileges;

6. 查看MASTER日志

mysql> show master status;
+----------------+----------+--------------+------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------+----------+--------------+------------------+
| zhzy-bin.000001|      509 | zhzy         |                  |
+----------------+----------+--------------+------------------+
1 row in set (0.00 sec)

SLAVE从服务器配置

1. 修改配置文件

server-id=2
log-bin= zhzy-bin
relay-log= mysql-relay-bin
read-only=1
log-slave-updates=1
replicate-do-db=zhzy
  • server-id=2                    ##需要大于master
  • log-bin= zhzy-bin         ##二进制文件,需要和上述同名
  • replicate-do-db=zhzy  ##想要同步那个库

修改过配置文件后一定重启才能生效: service mysqld restart

2. 在slave测试连接

[root@zhzy ~]$ mysql -uuser -h192.168.1.1 -p123456
mysql> show grants for user@192.168.1.2;
+-----------------------------------------------------------------------------------+
|Grants for repl@192.168.1.2                                                        |
+-----------------------------------------------------------------------------------+
|GRANT REPLICATION SLAVE ON *.* TO 'user'@'192.168.1.2' IDENTIFIED BY PASSWORD '**' |
+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)

看到这样的信息证明连接成功

3. 配置从服务器(SLAVE)复制

CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='user',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='zhzy-bin.000001',
MASTER_LOG_POS=509,
  • MASTER_HOST=’192.168.1.1′,                      ##master的地址
  • MASTER_USER=’user’,                                  ##登录用户名
  • MASTER_PASSWORD=’123456′,                 ##登录密码
  • MASTER_LOG_FILE=’zhzy-bin.000001′, ##从master的 “show master status;” 看到这个文件名
  • MASTER_LOG_POS=509,                             ##从master的 “show master status;” 看到这个值
mysql> start slave;

开启slave

4. 查看slave是否正常

mysql> show slave status \G
******************* 1.row *********************
Slave_IO_Running: YES
Slave_SQL_Running: YES

只要保证红色部分是YES就证明同步已经建立了

!!! 因为同步的是master的zhzy库,但是slave并没有zhzy库,所以无法同步,我踩的大坑!!!

所以只要在slave创建zhzy库就行,然后在master的zhzy中新建表,这时候slave的zhzy库里才能同步到这些表

5. 保证slave同步不会出错(日志文件zhzy-bin的变化会导致其无法同步)

mysql> stop slave;
mysql> set global sql_slave_skip_counter =1;
mysql> start slave;
mysql> show slave status \G

测试主从复制效果

1. 在master的zhzy库中新建表

mysql> use zhzy;
Database changed
mysql> create table test(id int,name char(10));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test values(1,'aaa');

2. 进入slave的库中查看是否同步表

mysql> use zhzy;
Database changed
mysql> show tables;
+----------------+
| Tables_in_zhzy |
+----------------+
| test           |
+----------------+
1 row in set (0.00 sec)

到这里就能看到同步的效果了

Leave a comment

电子邮件地址不会被公开。 必填项已用*标注