docker配置MySQL主从复制踩坑

一、MySQL5.7与MySQL8.0配置文件位置的区别

mysql5.7的配置在 /etc/mysql/my.cnf
mysql8.0以上的配置位置在 /etc/mysql/conf.d/my.cnf

docker挂载配置文件的数据卷时,如果配置文件挂载位置出现错误,MySQL将无法正常启动。

二、my.cnf配置文件

在同一个局域网下配置主从复制,需要配置全局唯一id

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=124

三、bin log日志

在MySQL8.0以后,默认开启日志,所以不需要在配置文件中加开启日志。

四、show master status命令

-- 此语句的作用是:刷新所有的表,然后阻塞所有写语句,以便binary log坐标不会发生变动
> FLUSH TABLES WITH READ LOCK;
-- 此语句是查看主库状态,可以看到binary log的当前坐标
> SHOW MASTER STATUS;

执行完以后,可以得到上面的一个表格

| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 |      658 |              | mysql            |                   |
+-----------------------+----------+--------------+------------------+----------------

可以得到上面的一个表格

File:这个可以在my.cnf文件中指定

记住file,position(在从机配置中需要使用)

五、从机配置

  1. 需要先获取主库容器的ip,在docker容器宿主机上运行如下命令获取容器IP:
  2. docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql_master

     3.配置从库数据源

-- 设置数据源
> CHANGE REPLICATION SOURCE TO SOURCE_HOST='主容器IP地址', SOURCE_USER='用于远程访问主库的用户名', SOURCE_PASSWORD='密码', SOURCE_LOG_FILE='主库show master status 命令中的File', SOURCE_LOG_POS=主库show master status 命令中的position;
-- 启动,从mysql8.0.22,用下面的语句代替START SLAVE;
> START REPLICA;
-- 查看状态
> SHOW REPLICA STATUS\G;

     4.如果主库运行了FLUSH TABLES WITH READ LOCK,需要释放锁:

> UNLOCK TABLES;


版权声明:本文为qq_60209490原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。