一、主从复制配置
1.环境准备
一台机器master,ip为10.0.0.147。
一台机器slave1,ip为10.0.0.148。
两台机器已安装MySQL,开启了二进制
2.大致的配置过程如下:
1 主节点
1) 二进制日志
2) server_id=
3) 创建用户,replication slave 权限
4) 全备份 --master-data=1
2 从节点
1) server_id=
2) source /data/full.sql
3) CHANGE MASTER TO
MASTER_HOST='10.0.0.8',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=30489887,
MASTER_CONNECT_RETRY=5;
4) start slave;
3.详细配置过程如下:
3.1主节点配置:
(1)启用二进制日志,并为当前节点设置一个全局唯一的ID号
[root@master ~]# vim /etc/my.cnf
[mysqld]
server-id=147
log-bin=/data/logbin/mysql-bin #修改二进制日志保存到指定路径
[root@master ~]# mkdir /data/logbin #确保路径存在
[root@master ~]# chown mysql.mysql /data/logbin 修改所有者和所属组
[root@master ~]# systemctl restart mysqld
[root@master ~]# ls /data/logbin
mysql-bin.000001 mysql-bin.index
(2)创建有复制权限的用户账号
mysql> create user repluser@'10.0.0.%' identified by '123456';
mysql> grant replication slave on *.* to repluser@'10.0.0.%';
(3)完全备份
[root@master ~]# mysqldump -uroot -p123456 -A -F --single-transaction --source-data > /backup/full-`date +%F`.sql
[root@master /]# scp /backup/full-2023-08-03.sql 10.0.0.148:/backup #将完全备份传到slave1机器上
3.2从节点配置:
(1)启用二进制日志,并为当前节点设置一个全局唯一的ID号
[root@slave1 ~]# vim /etc/my.cnf
[mysqld]
server-id=148
read-only #修改为只读,默认为1
systemctl restart mysqld
(2)配置从节点,从完全备份的位置之后开始复制
[root@slave1 ~]# vim /backup/full-2023-08-03.sql
CHANGE MASTER TO
MASTER_HOST='10.0.0.147',
MASTER_USER='repluser',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=157,
MASTER_CONNECT_RETRY=5;
(3)进行备份还原
mysql> set sql_log_bin=0; #因为下一步还原会产生大量的二进制日志,所以先关闭二进制日志
mysql> source /backup/full-2023-08-03.sql
mysql> set sql_log_bin=1; #重新开启二进制日志
3.3测试
master机器上提前设置好的数据库
[root@master /]# insert teachers (name,age,gender) values('zang',30,'M');
此时发现slave1机器上并未同步,查看线程还未运行
mysql> show slave status\G;
在slave1机器同时启动I/O线程和SQL线程
mysql> start slave;
然后再次查看发现线程均已运行,查看数据也发现已经同步,完成主从复制的配置
4.遇到的问题
在配置slave1机器同时启动I/O线程和SQL线程后,I/O线程未启动
mysql> start slave;
发现由于slave1机器是由master机器克隆后再配置的,所以slave1机器的UID和master机器的一样,所以对slave1机器的UID进行修改。
修改完后重新启动I/O线程和SQL线程后即可完成主从同步
二、半同步复制配置
1.环境准备
三台配置已经配置好主从复制的机器,主从复制配置过程与前文一致
master机器IP为10.0.0.149
slave1机器IP为10.0.0.151
slave2机器IP为10.0.0.152
2.详细配置过程如下
2.1主节点配置
查看插件文件
[root@master ~]#rpm -ql mysql-server |grep semisync
主服务器永久安装插件并查看插件
mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql>SHOW PLUGINS;
修改主配置文件
[root@master ~]#vim /etc/my.cnf
[mysqld]
server-id=149
log-bin=/data/logbin/mysql-bin
rpl_semi_sync_master_enabled=ON #修改此行,需要先安装semisync_master.so插件后,再重 启,否则无法启动
rpl_semi_sync_master_timeout=3000 #设置3s内无法同步,也将返回成功信息给客户端
[root@master ~]#systemctl restart mysqld
2.2从节点配置
从服务器配置: (两台从节点都需要配置,这里以10.0.0.151为例)
mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';
修改主配置文件
[mysqld]
server-id=151
rpl_semi_sync_slave_enabled=ON #修改此行,需要先安装semisync_slave.so插件后,再重启,否则无法启动
[root@slave1 ~]#systemctl restart mysqld
3.查看配置结果
验证:把其中一台slave断掉,然后进行数据更新,发现主从复制依然很快。
把两台slave都断掉后进行数据更新,发现主机器会等待(配置等待了3秒)。
4.可能遇到的问题
如果已经实现主从复制,需要stop slave;start slave;
mysql> stop slave;
mysql> start slave;
mysql> SHOW GLOBAL STATUS LIKE '%semi%';