您现在的位置是:首页 >技术教程 >windows docker 创建mysql主从 容器创建mysql主从网站首页技术教程

windows docker 创建mysql主从 容器创建mysql主从

qq_33919114 2024-06-15 06:31:11
简介windows docker 创建mysql主从 容器创建mysql主从

1. docker命令新建mysql-master,只是简单测试,没有设置映射,只是验证主从连接,需要可自行添加

docker run --restart=always --name mysql-master --privileged=true -d -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

2. 进入master容器命令,复制配置文件

#1. 进入容器
docker exec -it mysql-master /bin/bash
#2. 查看mysql在哪里,复制出来,改好在复制进去
ls
cd /etc
ls

 3. 由容器内复制到宿主机命令:

docker cp mysql-master:/etc/my.cnf D:/docker-data

4. 使用notepad++ 配置下mysql-master 的my.cnf配置文件

#binlog文件名
log-bin=mysql-bin
#忽略库
binlog-ignore-db=mysql
#同步库,不要先创建
binlog-do-db=syncdb
#binlog格式
binlog_format=STATEMENT

#需要备份的数据库名 ,需要另起一行添加,用,分割不能识别多个库 

binlog-do-db=test

#例 binlog-do-db=test2

#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步  

log_bin_trust_function_creators=TRUE


# binlog日志保留的天数,清除超过10天的日志
# 防止日志文件过大,导致磁盘空间不足
expire-logs-days=10

5. windows 进入在配置文件的文件夹下,输入下面的复制命令,将原始配置文件覆盖。切记,先cd 到windows的配置文件夹下再输入命令:

docker cp my.cnf mysql-master:/etc/

#复制进入后,进入容器
docker exec -it mysql-master /bin/bash
# 
cd /etc
# 查看是否覆盖成功
cat my.cnf
# 成功退出
exit
# 重启mysql-master
docker restart mysql-master

 6. 在master中创建用户并授权

    创建一个“slave”的用户(密码:root)用来同步
    先进入master内部

docker exec -it mysql-master bash
#登录mysql
mysql -uroot -proot
#创建用户
create user 'slave'@'%' identified by 'root';
#授权
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
#mysql8需要执行额外的操作
alter user 'slave'@'%' identified with mysql_native_password by 'root';
flush privileges;

以上命令,我使用navicat 控制台输入的,一样的效果,也可以登录mysql 执行

 查看状态: 成功如下  position记得查看数字,下面命令配置会用到

#show master status;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     1142 | syncdb       | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

master配置完毕,现在设置mysql-slave

1. 创建slave服务 并设置端口为3307

docker run --restart=always --name mysql-slave --privileged=true -d -p 3307:3306  -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0

2. 同理配置my.cnf,改好配置后,复制进容器,覆盖容器的配置文件 并重启

[mysqld]
server_id=102
#中继日志名
relay_log=mysql-relay

3.重启slave

docker restart mysql-slave

4. 另外还需要验证服务之间的网络连接是否畅通,进入mysql-slave容器

# 登陆
docker exec -it mysql-slave bash

#1. 连接mysql 
mysql -uroot -p123456 -h 172.17.0.2

 连接成功示例, 如果不成功则检查网络是否配置错误,docker网络配置服务器防火墙配置阿里控制台端口配置等 再仔细检查:

 5. 继续配置mysql-slave ,navicat 登陆mysql-slave输入配置命令:

# 这个也需要看看是否需要修改 比如master_log_pos=1142 ,master_password=root密码 
change master to master_host='172.17.0.2',master_user='slave',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=1142;

6.启动slave, 在mysql-slave输入命令:

#mysql下
start slave;

7. 查看状态:

#mysql下
show slave status;

8. 测试是否成功,在master新建数据库syncdb 并建表,

从库也看到了数据

 

错误:

 

如果出现同库不能同步情况,可以试试重置,并开启:

reset slave;

start slave;

这个没用过,重置主从连接:

stop slave;
reset master;

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。