原理
1 2 3 4
| 两个日志,三个线程 master节点上会为每一个slave的节点开启一个dump线程,用来提供master本机的二进制日志 slave节点上的i/o线程会请求master节点dump线程传输的二进制事件,并将得到的内容写入replay日志中 slave节点的SQL线程实时检测replay log内容,有更新则解析成sql语句还原到slave数据库中,这样保证主从数据同步
|
master节点配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| vim /etc/my.cnf [mysqld] log_bin=/mysql/log/binlog
server-id=128
:wq mkdir -p /mysql/log && chown -R mysql.mysql /mysql
create user backuser@'172.18.0.%' identified by '123456'
grant replication slave on *.* to backuser@'172.18.0.%' 授权,因为是要复制所有库表信息,这里给*.*,更为详细的权限分配这里暂且就不提 systemctl restart mysqld.service
|
slave节点配置
1 2 3 4 5 6 7 8 9 10 11
| vim /etc/my.cnf [mysqld] server-id=43
log-bin=/mysql/log/binlog
read_only=1
:wq systemctl restart mysqld.service mkdir -p /mysql/log && chown -R mysql.mysql /mysql
|
执行一下sql语句,这里注意注释不要,如果懒的删除,可以复制到文件里,再mysql命令行界面source /you/path/file即可,也可以再bash下执行mysql -u user -p < /you/path/file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| mysql -uroot -p 'enter you password' CHANGE MASTER TO MASTER_HOST='172.18.0.127',
MASTER_USER='backuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.xxxxxx',
MASTER_LOG_POS=123;
启动服务并查看状态 start slave; show slave status;
删除配置 reset master all; reset slave all;
查看端口是否监听 ss -tun netstat -an | grep EST
|
总结:总体配置完成后,即可在master上进行写入操作,随后可查看slave是否同步,这里值得深思的是,如果mysql版本不同,请让低版本做master,高版本做slave,别问为什么,问就是百度。其次有一点要注意的是关于binlog的选择上,如果是binlog被清理过,那就需要执行mysqldump(ps不止这一种备份访问,看个人爱好)全量备份,还原到slave上,才能实现主从一致