docker部署的mysql数据库搭建主从数据库

前提条件
主数据库和从数据库均是以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 停止主从备份