1、拉取mysql镜像
docker pull mysql
2、创建主节点docker容器
docker run --name mysql-master -p 3306:3306 -v /root/docker/mysql/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql
创建从节点docker容器
docker run --name mysql-slave -p 3307:3306 -v /root/docker/mysql/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql
这里通过挂载目录的方式使mysql的配置文件生效。然后,分别在两个节点导入数据库user_db。
3、在/root/docker/mysql/master下创建主节点的配置文件mysql.cnf
[mysqld]
log-bin=mysql-bin # 启用二进制日志
server-id=1 # 服务器唯一ID,可以任意设置,但必须唯一
binlog-ignore-db=mysql # 不要复制的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog-do-db=user_db # 要复制的数据库名
注意,mysql的配置文件开头要加上[mysqld],我就是一开始没加这个东西导致配置怎么改都不生效,浪费了很多时间。这里设置了复制数据库user_db。重启容器,使配置生效。
4、在/root/docker/mysql/slave下创建从节点的配置文件mysql.cnf
[mysqld]
server-id=2
relay-log=mysql-relay
重启容器,使配置生效。
5、使用客户端连接主节点,执行如下命令
show master status
change master to
master_host='192.168.182.128',master_port=3306, master_user='root',master_password='123456',
master_log_file='mysql-bin.000003',master_log_pos=157;
实现复制。其中,master_log_file和master_log_pos分别对应上图中的File和Position。
6、在从节点执行
start slave
开启复制。执行
show slave status