当主库(master)的数据发生变化的时候,会实时的同步到从库(slave)。
MySQL 主从复制是基于主服务器在二进制日志跟踪所有对数据库的更改。如果要进行复制,必须在主服务器上启用二进制日志。从服务器连接到主服务器并获取主服务器已经记录到日志的数据,从服务器接收从那时发生起的任何更新,并在主机上执行相同的更新。
从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
打开/etc/my.cnf配置文件,进行如下:
- [mysqld]
-
- # log-bin 打开二进制日志功能.
- # 在复制(replication)配置中,作为master主服务器必须打开此项;如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
- # [必须]启用二进制日志
- log-bin=/usr/local/bin/lnmp/logs/binlog
-
- # 此值在master和slave上都需要设置.
- # 在master-slave架构中,每台机器节点都需要有唯一的server-id,数值位于1到2^32-1之间;如果在双主复制结构中没有设置ID的话就会导致循环同步问题
- # 【必须】服务器唯一ID,默认是1
- server-id=1
-
- # 需要开启生成二进制日志记录相关配置,配置在需要被复制的服务器上,即:master
- # 指定对名称为test_db的数据库记录二进制日志
- binlog-do-db = mindoc_db
-
- # 指定不对名称为mysql的数据库记录二进制日志
- # binlog-ignore-db = mysql
-
- # 指定不对名称为information_schema的数据库记录二进制日志
- # binlog-ignore-db = information_schema
-
- # binlog日志格式,mysql默认采用,如果从服务器slave有别的slave要复制那么该slave也需要这一项
- binlog_format = mixed
-
- # 超过7天的binlog删除
- expire_logs_days = 7
重启主服务器,查看主库配置状态
show master status

获取主数据库此刻数据坐标,用于主从启动后,复制数据的起始位置,获取到这个值后,主数据库就不能再有数据的修改操作。
打开/etc/my.cnf配置文件,进行如下:
- [mysqld]
- # 必须配置,且要比主服务器大
- server-id=11
-
- # 从库服务器可以不配
- # log-bin=/usr/local/bin/lnmp/logs/binlo
-
- # replicate-do-db 需要做复制的数据库,如果复制多个数据库,重复设置这选项即可master上不需要此项,slave上需要
- # 复制名称为test_db的数据库
- replicate-do-db = mindoc_db
-
- # replicate-ignore-db 不需要复制的数据库,如果要忽略复制多个数据库,重复设置这个选项即可
- # replicate-ignore-db = mysql #不需要(忽略)复制名称为mysql的数据库
执行同步命令
在从库的客户端执行命令
- # 设置主服务器ip,同步账号密码,同步位置
- change master to master_host='主库IP' , master_port=3306, master_user='root',master_password='密码', master_log_file='binlog.000002',master_log_pos=9871;
说明:
在从数据库中设置复制数据的用户、坐标等信息,在执行此操作之前需保证主从数据库现时刻数据一致,因为是从设置的坐标处开始复制。
开启同步功能
start slave;
停止从库slave
stop slave;
查看从服务器状态
show slave status;
开始启动后,查看从Mysql复制状态,其中Slave_IO_Running、Slave_SQL_Running两项为YES时,表示同步正在进行。
此时主从库的数据完全一致,如果对主库进行增删改操作,从库会自动同步进行操作。