准备工作
-
主从的MySQL版本需一致,搭建前需要从库无数据或主从数据一致
(主服务)同步数据到从库
systemctl stop mysqld
rm -f /usr/local/mysql/data/auto.cnf
rsync -av /usr/local/mysql/data root@[从库所在主机的IP地址]:/usr/local/mysql/
搭建主从架构-AB复制
-
(主服务)编辑配置文件vim /etc/my.cnf
-
(从服务)编辑配置文件vim /etc/my.cnf
-
(主服务)启动MySQL服务
systemctl start mysqld
-
(主服务)创建用于主从架构的MySQL账号
CREATE USER 'slave'@'%' IDENTIFIED WITH 'caching_sha2_password' BY '123456';
grant replication slave,replication client on *.* to 'slave'@'%';
-
(主服务)停止MySQL服务
systemctl stop mysqld
-
(主服务)删除auto.cnf文件
rm -f /usr/local/mysql/data/auto.cnf
-
(主服务)如果主从数据不一致,同步主库数据到从库
rsync -av /usr/local/mysql/data root@[从库主机IP地址]:/usr/local/mysql/
-
(主服务)启动MySQL服务
systemctl start mysqld
-
(从服务)如果data目录是从主库同步过来的,需要修改文件权限
chown -R mysql.mysql /usr/local/mysql
(从服务)启动MySQL服务
systemctl start mysqld
-
(主服务)加锁,如果接下来没有增删改查等操作,可以不加锁
flush tables with read lock;
-
(从服务)设定指向主服务的数据节点
change replication source to
source_host='[主服务的主机IP地址]',
source_port=3306,
source_user='slave',
source_password='123456',
source_log_file='binlog.000002',
source_log_pos=1207;
注:source_log_file和source_log_pos的值需要在主服务执行show master status;获取
-
(从服务)启动主从复制
start slave;
(从服务)查看主从状态
show slave status\G
确认主从是否正常
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
Seconds_Behind_Master:0
可能的报错:
mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from
the repository
尝试解决:在从库上删除relay-log.info,重新执行上一步
-
(主服务)解锁,如果没有加锁则跳过
unlock tables;
-
测试
在主服务中执行增删改,观察从服务是否同步