1.运行已安装好的mysql
docker start mysql
2.进入容器
docker exec -it mysql bash
3.编辑MySQL配置文件
cd /etc/mysql/conf.d/mysql.cnf
4.添加一下配置
[mysqld]
#服务id,在一个主从复制集群中要唯一,值范围1-255
server-id = 1
#开启log-bin日志,非常重要,复制原理也是基于这一个,后面的值随便写我这里就写mysql-master-bin了
log-bin = mysql-master-bin
#从机复制时,忽略的数据库,也就是说这里配置的数据库不会被从机同步
binlog-ignore-db = mysql,information_schema,performance_schema,sys
#同步的数据库名称
binlog-do-db=db_test
5.然后去登录MySQL,修改root用户密码插件
mysql -uroot -p123456
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
FLUSH PRIVILEGES;
6.重启容器
docker restart mysql
7.重新进入容器 登录mysql客户端 ,查看主机状态
执行这个命令后出来的表,File和Position字段值,可以截个图钉在桌面上,后面会用
show master status;
8.退出容器查看ip地址
同样截图钉在桌面
docker inspect mysql-master | grep IPAddress
9.使用命令再次启动一个MySQL镜像, 镜像名称改一下,端口改一下就行了
使用原有的mysql版本就行,我用的是8.0.32
docker run --name mysql-slave -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.32
10.进入容器内部
docker exec -it mysql-slave bash
11. 编辑MySQL的配置文件,加上这个配置,server-id不重复即可
/etc/mysql/conf.d/mysql.cnf
[mysqld]
server-id = 2
12.重启mysql-slave
docker restart mysql-slave
13.在从机mysql-slave 中设置主机配置
change master to
master_host='<第八步查出的IP地址>',
master_user='root',
master_password='123456',
master_log_file='<第七步查出的file值>',
master_log_pos=<第七步查出的position值>;
change master to
master_host='172.17.0.2',
master_user='root',
master_password='123456',
master_log_file='mysql-master-bin.000006',
master_log_pos=157;
14.启动slave 命令
start slave;
15.查看slave状态
show slave status \G
如果SlaveIORunning 和 SlaveSQLRunning的值都是Yes,代表你配置成功了,可以使用连接工具连接主机,然后建一个数据库db_test,再建一个表,添加一点数据,再连接从机,查看数据是否同步过来了