docker部署mysql主从复制篇

2024-01-07 19:06:04

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

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

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

/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 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

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

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

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

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

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

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;

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

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

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

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

报错日志:

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_id

从service_id?

设置完重启测试,

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

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

文章来源:https://blog.csdn.net/wudongfang666/article/details/135407018
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。