参考:

环境准备:

前提:网络必须互通,并且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;

mysql 4台机器做主主 搭建mysql主从_数据库

配置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得知主从同步一开始了

mysql 4台机器做主主 搭建mysql主从_mysql_02

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.测试

在主库上执行增、删、改操作,查看从库是否更新;在从库上执行增、删、改操作查看主库是否更新。