MySQL配置主从服务器(多主多从)

x33g5p2x  于2021-09-24 转载在 Mysql  
字(2.9k)|赞(0)|评价(0)|浏览(485)

当前环境
Centos 7.6
Mysql 5.7

Centos 7.6 安装MySQL 5.7 请参考:https://blog.csdn.net/MadLifeBin/article/details/118970216
MySQL配置一主多从服务器 请参看:https://blog.csdn.net/MadLifeBin/article/details/119067776

思路

master-01IP地址:192.168.1.13
slave-01IP地址:192.168.1.14
master-02IP地址:192.168.1.11
slave-02IP地址:192.168.1.12

主机配置

修改conf

vim /etc/my.cnf

在 [mysqld] 后面换行追加配置,保存并退出

# 这里注意四台机器的server-id要唯一
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
# Master-Master结构必须的  
log-slave-updates  
slave-skip-errors = all  
sync_binlog = 1  
read_only = 0

重启

systemctl restart  mysqld.service

# 查看状态
systemctl status mysqld.service

检验

mysql -u root -p
SHOW MASTER STATUS;

从机配置

修改conf

vim /etc/my.cnf

在 [mysqld] 后面换行追加配置,保存并退出

server-id=2
# 这里不同的slave可以指定不同的log名
relay-log=slave-01-relay-bin
# 这里不同的slave可以指定不同的log-index名
relay-log-index=slave-01-relay-bin.index
# Master-Master结构必须的  
log-slave-updates  
slave-skip-errors = all  
sync_binlog = 1  
read_only = 0

重启

systemctl restart  mysqld.service
# 查看状态
systemctl status mysqld.service

配置主主、主从关联

主主关联配置

分别登录两台主机mysql控制台,分别创建用户,授权并刷新。这里为了方便创建相同的帐密

mysql -u root -p

CREATE USER 'repl'@'%' IDENTIFIED BY 'Mysql57*';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'Mysql57*';
flush privileges;

分别在两台master上登录mysql控制台,并执行
这里需要细心 master_host 地址,不是当前执行MySQL命令机器的IP地址,而是另一台master机器的IP地址。
相当于01、02互为对方的master
master_log_file、master_log_pos的值
需要在对应的master机器上登录MySQL控制台,执行SHOW MASTER STATUS;
可参考前面步骤 主机配置 >> 检验

mysql -u root -p
# 这里需要细心 master_host 地址,不是当前执行MySQL命令机器的IP地址,而是另一台master机器的IP地址。
# 相当于01、02互为对方的master
# master_log_file、master_log_pos的值
# 需要在对应的master机器上登录MySQL控制台,执行SHOW MASTER STATUS; 
# 可参考前面步骤 主机配置 >> 检验 
change master to master_host='192.168.1.13',master_port=3306,master_user='repl',master_password='Mysql57*',master_log_file='master-bin.000001',master_log_pos=154;
start slave;
#停止主从同步
#stop slave;
# \G 表示换行查看
show slave status \G;

主从配置

这里也需要细心 master_host 地址,不是当前执行MySQL命令机器的IP地址,而是对应master机器的IP地址
master_log_file、master_log_pos的值
需要在对应的master机器上登录MySQL控制台,执行SHOW MASTER STATUS;
可参考前面步骤 主机配置 >> 检验

mysql -u root -p

# 这里也需要细心 master_host 地址,不是当前执行MySQL命令机器的IP地址,而是对应master机器的IP地址
# 如在slave-01机上的MySQL控制台执行,则这里的master_host为master-01机器的IP地址。
# master_log_file、master_log_pos的值
# 需要在对应的master机器上登录MySQL控制台,执行SHOW MASTER STATUS; 
# 可参考前面步骤 主机配置 >> 检验 
change master to master_host='192.168.1.8',master_port=3306,master_user='repl',master_password='Mysql57*',master_log_file='master-bin.000001',master_log_pos=0;

start slave;
#停止主从同步
#stop slave;
# \G 表示换行查看
show slave status \G;

若查看主从状态提示The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.请参考常见问题

测试数据同步(略)

常见问题

从机查看主从同步状态show slave status \G; 时报错

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

原因

这里笔者使用了 VMware 软件创建了1个虚拟机安装 Centos7.6 + MySQL5.7,然后使用该虚拟机克隆生成了另外两个虚拟机当从从库机器,导致3台虚拟机上的MySQL启动之后会生成相同的 UUID。

解决方案

找到MySQL的UUID,修改一个字符,重启服务,然后登陆MySQL控制台,开启主从

find / -name 'auto.cnf'
vim /var/lib/mysql/auto.cnf
systemctl restart  mysqld.service
mysql -u root -p
start slave;
# \G 表示换行查看
show slave status \G;

相关文章