MySQL 5.7.30 主主同步

一、首先装好两台MySQL,然后在/etc/my.cnf中增加配置。

在MySQL服务器1中,添加如下配置:

server-id=1      #服务器的标识
log-bin=mysql-bin
binlog-ignore-db=mysql,information_schema
auto-increment-increment=2
auto-increment-offset=1      #奇数id
slave-skip-errors=all
log_bin_trust_function_creators=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在MySQL服务器2中,添加如下设置:

server-id=2      #服务器的标识
log-bin=mysql-bin
binlog-ignore-db=mysql,information_schema
auto-increment-increment=2
auto-increment-offset=2      #偶数id
slave-skip-errors=all
log_bin_trust_function_creators=1
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在这里两台MySQL的配置文件,需要对auto_increment_offset字段,设定不同值。因为如果mysql中有自增长字段,不设定这个参数会起冲突,会报duplicate....的报错。
auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
做主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2,这样可以避免两台服务器同时做更新时,自增长字段的值之间发生冲突。

配置好两台mysql的my.cnf配置文件后,service mysqld restart 重启mysql服务。

二、最后我们在MySQL命令行中设定账号和同步的日志节点。

在Mysql服务器1中,

mysql -u root -p
#设置用于数据同步的账号,默认不适用root账号。
grant replication slave on *.* to '数据同步账号'@'%' identified by '密码';
#输入如下命令,记录下file和position的值
show master status

在MySQL服务器2中,做如上同样的操作,然后将服务器1的file和position值设定到服务器2中,服务器2的file和position值输入到服务器1中。

在MySQL服务器1中,输如下命令:

stop slave;
change master to master_host='服务器2的IP',master_port=服务器2的的端口号,master_user='服务器2的数据同步账号',master_password='服务器2的密码',master_log_file='服务器2的file值',master_log_pos=服务器2的position值 ;
start slave;

在MySQL服务器2中,输如下命令:

stop slave;
change master to master_host='服务器1的IP',master_port=服务器1的的端口号,master_user='服务器1的数据同步账号',master_password='服务器1的密码',master_log_file='服务器1的file值',master_log_pos=服务器1的position值 ;
start slave;

范例如下图:


image.png
image.png

配置完后,分别在两台服务器上输show slave status ;
如果出现如下两个字段都是on的状态,则主主备份搭建完成。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes


在实际测试配置中,由于MySQL服务器2是克隆的MySQL服务器1的,所以start slave 后,show slave status 出现了Slave_IO_Running: No ,然后有如下报错信息。告知是因为两个MySQL服务器的UUID相重复了。

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

只需要,将basedir,即/use/local/mysql/data中的auto.cnf文件删掉后,重启mysql,就会出现新的auto.cnf文件,里面有新的UUID


image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。