环境准备: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博客