我们的mysql主从同步复制实验,需要以下几个步骤:

1、 配置主库master同步复制时的选项

2、 在主库master上创建同步复制时的用户并授权

3、 主库master锁表

4、 记录主库master的binlog以及pos位置节点

5、 导出数据库

6、 配置slave端同步复制时所需要的选项

7、 在从库slave上创建数据库并导入备份

8、 设置从库slave与主库master同步

9、 在从库slave上开启同步

10、 解锁主库表

11、 查看从库slave的relay-log以及master.info


实验环境:

主库master与从库slave环境:centos7.1 64bit MySQL5.5   ps:最好操作系统环境和MySQL保持一致。

主库master与从库slave的IP分别如下:

master IP:192.168.10.182 slave IP:192.168.10.193

 

开始配置,具体操作如下:

一、配置主库master同步复制时的选项

mysql的主从配置,我们只需要修改my.cnf文件即可。如下:

vi /etc/my.cnf:

server-id=182

log-bin=mysql-bin

binlog_format=mixed

max_binlog_size=1024M

expire_logs_days=7

binlog-do-db=xx_bpmx_cs

binlog-ignore-db=mysql

 

其中log-bin=mysql-bin表示启用mysql二进制日志,该项必须要启用,否则mysql主从不会生效。

max_binlog_size=500M表示每个binlog文件最大大小,当此文件大小等于500M时,会自动生成一个新的日志文件。注意:一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。

server-id=182表示mysql服务器ID,该ID必须在该主从中是唯一的,默认是1,该ID可以自行自定义,但必须为数字。

binlog-do-db=xx_bpmx_cs 表示需要同步的数据库名字,如果是多个数据库,就以此格式再写一行即可。

binlog-ignore-db=mysql表示不需要同步的数据库名字,如果是多个数据库,就以此格式再写一行即可。

 

注意:如果binlog-do-db和binlog-ignore-db不加的话,那么默认是同步复制整个mysql数据库。

 

二、在主库master上创建同步复制时的用户并授权

登录master端,创建数据库用户repl,并授权为replication slave权限。如下:

grant replication slave on *.* to repl@192.168.10.193 identified by 'dfb2017';

 

注意:replication slave权限:只有拥有此权限的用户才可以查看从服务器slave以及从主服务器master读取二进制日志的权限。

授权完毕后,我们需要在slave测试 repl 用户是否可以连接master。

 

三、 主库master锁表

先锁住主库master的表,防止数据再写入,导致主从数据库不一致。使用如下命令锁表:

 

flush tables with read lock;

这样主库master只能被读取,而不能被写入数据。

注意:目前这个锁表的终端不要退出,否则这个锁就失效了。

 

四、记录主库master的binlog文件名以及pos位置节点

为什么要记录此时主库master的binlog文件名以及pos位置节点?

因为当我们把主库的数据库迁移或导入到从库slave后,我们就会让从库slave从这个binlog文件的该pos位置节点与主库master同步。

查看主库master的binlog文件名及pos位置节点,如下:

show master status\G;

 

五、导出xx_bpmx_cs数据库

在从库slave与主库master第一次同步数据时,有三种方法。

 

第一种方法就是在主库锁表后,使用tar把master库直接打包,然后使用scp或者rsync把该打包文件弄到从库slave上。这种情况一般适用于网站或者业务在初始化,抑或在数据库大于100G时建议使用。

 

第二种方法就是在主库锁表后,我们直接使用mysqldump命令导出数据库,然后在从库上进行恢复。这个方法比较常见,所以我们一般是使用这个方法。

 

注意以上两种方法,我们都需要进行在主库master锁表后进行操作。

第三种方法,其实我们不需要做其他工作。只需开启同步复制即可。但是这个有一个前提就是,主mysql的binlog必须齐全,这个齐全就是要包括该数据创建时的binlog也要存在。并且同步时,还必须要从最初始的binlog开始。所以,这种方法,我们一般不使用。

这里我们使用第二种方式:

mysqldump -h 192.168.10.182 -uroot -p --no-create-db -c --hex-blob --quick --default-character-set=GBK  xx_bpmx_cs >/usr/local/src/xx_bpmx_cs20181116.sql

 

六、配置从库slave同步复制时所需要的选项

mysql的主从配置,我们只需要修改my.cnf文件即可。如下:

vi /etc/my.cnf:

server-id=193

log-bin=mysql-bin

binlog_format=mixed

max_binlog_size=1024M

expire_logs_days=7

 

七、在从库slave上创建数据库xx_bpmx_cs并导入备份

我们在第五步已经把xx_bpmx_cs的备份文件通过scp命令复制到从库,现在我们需要在从库slave上,然后把备份的数据导入进去。

 

八、设置从库slave与主库master同步

在第七步中我们已经恢复xx_bpmx_cs数据库的数据,我们来开始设置从库slave与主库master同步,使用如下命令:

stop slave;

 

Change master to master_host='192.168.10.182',master_user='repl',master_password='dfb2017',master_log_file='mysql-bin.000009',master_log_pos=107, master_connect_retry=100;

 

其中:master_host表示是主库的IP

master_user表示主库master上允许同步的用户

maser_password表示同步用户的密码

master_log_file表示从哪个binlog文件开始同步

master_log_pos表示从该binlog文件的那个pos节点位置开始同步

master_connect_retry表示从库slave与主库master同步周期,默认是60s。

注意:master_log_file和master_log_pos,就是我们在第四步记录的binlog文件名和pos位置节点。

 

九、在从库slave上开启同步

以上配置完毕后,我们现在来开启主从同步。开启主从同步,我们需要在从库上开启。开启主从同步非常简单,只需一条命令即可,如下:

start slave;

 

十、解锁主库master表

从库slave的xx_bpmx_cs数据库创建并导入备份,开启同步后,我们现在来解锁主库master表,使用如下命令:

unlock tables;

 

十一 、查看从库slave的relay-log以及master.info

show slave status\G;

我们查看同步是否主要是查看Slave_IO_Running与Slave_SQL_Running选项。如果正常同步,这两选必须同时为YES。

如果Slave_IO_Running为NO,说明可能是从库与主库的网络不通。

如果Slave_SQL_Running为NO,说明很可能是从库与主库的数据不一致。

我们可以看到目前Slave_IO_Running和Slave_SQL_Running都为YES。说明现在主从同步是正常的。

我们也可以看到从库slave与主库master刚开始同步时的binlog文件名以及开始同步时的pos位置节点。