参考:
环境准备:
前提:网络必须互通,并且3306端口外要对外开放,不然后面同步个P
基于Mysql5.7版本
master:192.168.3.94
slave:192.168.1.123
主从环境搭建
配置Master
step1.修改配置: vim /etc/my.inf
# 一个主从/主主 模式下 server-id必须不同
server-id=1
# Binary Logging.
#开启bin-log,并指定文件目录和文件名前缀
log-bin=mysql-bin
#数据库白名单列表,二进制日志记录的数据库(多数据库用逗号隔开或重复设置多行),即需要同步的库.不在内的不同步。不添加这行表示同步所有
binlog-do-db=test
#不同步mysql系统数据库。如果是多个不同步库,就以此格式另写几行;也可以在一行,中间逗号隔开。
binlog-ignore-db=mysql
#确保binlog日志写入后与硬盘同步
sync-binlog=1
#跳过现有的采用checksum的事件,mysql5.6.5以后的版本中binlog_checksum=crc32,而低版本都是binlog_checksum=none
binlog_checksum=crc32
#bin-log日志文件格式,设置为MIXED可以防止主键重复。
binlog_format = mixed
step2.重启mysql
systemctl restart mysqld或者service mysqld restart
step3.同步权限配置
grant replication slave,replication client on *.* to slave@'192.168.1.123' identified by "slave123";
flush privileges;
通过上述命令给slave机器192.168.1.123创建一个账号用于slave使用该账号连接master获取binlog
step4.查看权限配置
show grants for slave@'192.168.1.123';
step5.查看主服务master状态(注意File与Position项,从服务器需要这两项参数)
show master status;
配置Slave
step1.vim /etc/my.cnf
server-id=2 #设置从服务器id,必须于主服务器不同
log-bin=mysql-bin #启动MySQ二进制日志系统
replicate-do-db=test #需要同步的数据库名。如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。
replicate-ignore-db=mysql #不同步mysql系统数据库
slave-skip-errors=all #跳过所有的错误错误,继续执行复制操作
step2.重启mysql
systemctl restart mysqld或者service mysqld restart
step3.配置主从同步
stop slave; #执行同步前,要先关闭slave
change master to master_host='192.168.3.94',master_user='slave',master_password='slave123',master_log_file='mysql-bin.000003',master_log_pos=154;
这里的master_user、master_password使我们在配置Master步骤step3设置的;,master_log_file,master_log_pos由step5的sql得到
step4.开启同步
start slave;
show slave status;#根据Slave_IO_Running,和Slave_SQL_Running字段为yes得知主从同步一开始了
step5.验证
通过navicat在192.168.3.94的test库中删除、修改、添加数据可以在从库中立马看到变动。说明成功
主主环境搭建
主主环境要考虑到主键重复的问题:这个在文章已经提到过了
配置Master
step1.修改my.cnf:vim /etc/my.inf
# 一个主从/主主 模式下 server-id必须不同
server-id=1
#开启bin-log,并指定文件目录和文件名前缀
log-bin=mysql-bin
#不同步mysql系统数据库。如果是多个不同步库,就以此格式另写几行;也可以在一行,中间逗号隔开。
binlog-ignore-db=mysql,information_schema,sys,performance_schema
#确保binlog日志写入后与硬盘同步
sync-binlog=1
#跳过现有的采用checksum的事件,mysql5.6.5以后的版本中binlog_checksum=crc32,而低版本都是binlog_checksum=none
binlog_checksum=crc32
#bin-log日志文件格式,设置为MIXED可以防止主键重复。
binlog_format = mixed
#每次自增长主键的增长量
auto-increment-increment = 2
#自增长的起始数字
auto-increment-offset = 1
slave-skip-errors=all
不同于主从环境的master配置大概就是添加了用于解决主键重复问题的auto-increment*的配置;并且通过忽略不同的库配置同步的数据库。
step2.重启mysql
systemctl restart mysqld或者service mysqld restart
step3.查看状态
show master status;
配置Slave
step1.修改slave的配置为
server-id=2
log-bin=mysql-bin
binlog-ignore-db=mysql,information_schema,sys,performance_schema
slave-skip-errors=all
sync_binlog=1
binlog_checksum=crc32
binlog_format=mixed
auto-increment-increment=2
auto-increment-offset=2
step2.重启mysql
systemctl restart mysqld或者service mysqld restart
step3.数据库同步授权
grant replication slave ,replication client on *.* to slave@'192.168.3.94' identified by "1qaz@WSX";
flush privileges;
step4.查看状态
show master status;
执行主主同步
1.先在slave数据库上做同步master的设置。(确保slave上要同步的数据,提前在master上存在。最好双方数据保持一致)
stop slave;
change master to master_host='192.168.3.94',master_user='slave',master_password='slave123',master_log_file='mysql-bin.000024',master_log_pos=4021;
start slave;
show slave status;
2.再在master数据库上做同步slave的设置。(确保slave上要同步的数据,提前在master上存在。最好双方数据保持一致)
stop slave;
change master to master_host='192.168.1.123',master_user='slave',master_password='1qaz@WSX',master_log_file='mysql-bin.000003',master_log_pos=707;
start slave;
show slave status;
3.测试
在主库上执行增、删、改操作,查看从库是否更新;在从库上执行增、删、改操作查看主库是否更新。