前提条件
主数据库和从数据库均是以docker部署,且数据库版本相同,且将数据存储已映射到磁盘,如下图:
操作步骤
1. stop主服务器mysql容器,并下载主服务器下/home/mysql/data文件夹(映射出来的存储文件),目的是迁移历史数据到从库。
2. 将下载下的data文件夹中的auto.cnf中uuid,与之前的不一致即可。
3. stop从服务器mysql容器,将刚从主数据库下载的data文件夹,所有东西上传至从服务器,完成历史数据备份,上传完毕,在重启从服务mysql容器。
4. 通过Navicat链接,检查是否从服务器中已存在历史数据,若存在则备份完成。
5.修改主服务器mysql的配置文件my.cnf,在[mysqld]下添加如下配置:
6.在中重启主服务器mysql容器
7.修改从服务器mysql的配置文件my.cnf,在[mysqld]下添加如下配置:
8.重启从服务器mysql容器。
9.打开Navicat在主服务器执行以下sql,并记录FILE和Position的值,下一步需要用到
SHOW MASTER STATUS;
10.在从服务器mysql下执行如下sql,与主服务器建立链接,并开启主从复制
**建立链接**
change master to master_host='192.168.0.168', master_user='root', master_password='hengpin206', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=24428196, master_connect_retry=30;
**开启复制**
start slave
11.在从服务器执行以下sql检查是否成功,若下方红框内均为YES,则部署成功。
SHOW SLAVE STATUS
12.测试,主表新增,修改,删除数据,看是否同步到从表。
13.常见问题
(1) uuid 一致,修改auto.cnf 中 的UUID.
(2)service_id一致,修改my.cnf中的service_id.
(3) 报错 Slave failed to initialize relay log info structure from the repository。执行 RESET slave 重新建立链接,开启同步。
(4)其他sql语句:
show variables like ‘server_id’; 查看service_id
show variables like ‘%server_uuid%’ 查看UUID
stop slave 停止主从备份