docker部署mysql主从复制篇

环境准备:docker服务安装,mysql镜像

配置文件方式:可以挂载目录,也可以写好配置文件,利用docker cp 到容器内,这里直接在启动镜像创建容器时候挂载目录方式
服务器上配置文件内容(下图标红路径):

新建目录和配置文件  ,配置文件内容参考

docker部署mysql主从复制篇_第1张图片

/root/master/conf/my.cnf复制如下内容---主库

[mysqld]
## 同一局域网内注意要唯一
server-id=1024#这里是复制其他人的,感觉应该是server_id,后边报错主从service_id重复可能就是这个原因,先不管
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password  #设置密码规则
#default_authentication_plugin=caching_sha2_password
max_connections=1000 #最大连接数设置 根据实际需要 自行调整

/root/slave/conf/my.cnf复制内容如下--从库

[mysqld]
## 设置server_id,注意要唯一
server-id=1022 
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
secure_file_priv=/var/lib/mysql
default_authentication_plugin=mysql_native_password  #设置密码规则
max_connections=1000 #最大连接数设置 根据实际需要 自行调整

docker部署mysql主从复制篇_第2张图片

创建容器,挂载配置文件

docker run --name master -p 3339:3306  \
 -v "$PWD/master/conf/my.cnf":/etc/mysql/my.cnf \
 -v "$PWD/master/data":/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

docker run --name slave -p 3340:3306 \
 -v "$PWD/slave/conf/my.cnf":/etc/mysql/my.cnf \
 -v "$PWD/slave/data":/var/lib/mysql \
 -e MYSQL_ROOT_PASSWORD=123456 -d mysql

利用navicat测试链接,用户root,密码123456

docker部署mysql主从复制篇_第3张图片

确保主从数据库都可正常访问即可,

1-在客户端命令行页面(主库)建用户,授权

CREATE USER 'slave'@'%' IDENTIFIED with mysql_native_password BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

2-查看主库的参数,稍后需要在从库里面配置,show master status;

docker部署mysql主从复制篇_第4张图片

3-主库容器IP地址

回到linux服务器,执行命令查看master容器的ip地址-

docker inspect --format={{.NetworkSettings.IPAddress}} master

三个参数:ip,file,position得值获取后,链接从库的命令行模式

 change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='binlog.000006', master_log_pos=1349, master_connect_retry=30;

配置好以后,启动  

start slave;

4-切换服务器从库容器内,查看状态信息

show slave status \G;

docker部署mysql主从复制篇_第5张图片

下面没有报错信息,切红色框内值是yes表示启动成功。如果有错误日志,根据日志修改(后面有介绍,然后stop slave,reset slave,start slave,停止,重置,启动,注意观察主库的三个参数是否有变化。从库change里的ip,file,pos要对应上。

测试方法:主库新建数据库或表,刷新从库看是否同步,如果同步表示mysql主从复制搭建完毕。

------------------------------------------------------------------------------------------------------------------------------

遇到的问题:主从数据库的service_id相同导致错误,修改从数据库的id值即可

报错日志:

docker部署mysql主从复制篇_第6张图片

Last_IO_Error: Fatal error: The replica I/O thread stops because source and replica have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on replica but this does not always make sense; please check the manual before using it).

解决办法:主service_iddocker部署mysql主从复制篇_第7张图片

从service_id docker部署mysql主从复制篇_第8张图片

设置完重启测试,docker部署mysql主从复制篇_第9张图片

测试:主数据创建数据库aaa,刷新从数据库,可以看到aaa数据库已同步

docker部署mysql主从复制篇_第10张图片

docker部署mysql主从复制篇_第11张图片

参考:基于docker的Mysql主从数据库配置_docker mysql 主从配置-CSDN博客

你可能感兴趣的:(docker,mysql,容器)