两个MYSQL容器机器 1 master 1 slave
docker启动mysql
docker run -d -v /home/user/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -e TZ=Asia/Shanghai --net staticnet --ip 172.28.0.102 mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
进入容器创建数据库
CREATE DATABASE IF NOT EXISTS TEST_CAT DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
master
## 开启binlog
docker exec 容器ID bash -c “echo ‘log-bin=/var/lib/mysql/mysql-bin’ >> /etc/mysql/mysql.conf.d/mysqld.cnf”
设置ID 同局域网的ID需要不一致
docker exec 容器ID bash -c “echo 'server-id=1234
’ >> /etc/mysql/mysql.conf.d/mysqld.cnf”
## 开启需要同步的数据库
docker exec 容器ID bash -c “echo ‘binlog-do-db=TEST_CAT’ >> /etc/mysql/mysql.conf.d/mysqld.cnf”
docker exec 容器ID bash -c “echo ‘log-bin=mysql-bin’ >> /etc/mysql/mysql.conf.d/mysqld.cnf”
查看binlog是否开启成功
show binary logs ;
重启master容器
查看主机状态 show master status;
## slave
启动另一个 mysql容器
开启slave 配置
docker exec 容器ID bash -c “echo ‘server-id=1112’ >> /etc/mysql/mysql.conf.d/mysqld.cnf”
docker exec 容器ID bash -c “echo ‘relay-log-index=slave-relay-bin.index’ >> /etc/mysql/mysql.conf.d/mysqld.cnf”
docker exec 容器ID bash -c “echo ‘relay-log=slave-relay-bin’ >> /etc/mysql/mysql.conf.d/mysqld.cnf”
进入容器设置主从关系 配置主机的地址端口信息,还有binlog文件和position
change master to master_host=‘172.28.0.102’,master_user=‘root’,master_password=‘123456’,master_log_file=‘mysql-bin.000002’,master_log_pos=154;
启动从机
start slave;
查看配置结果
show slave status
Slave_IO_Running: No 说明从机的IO线程没有启动,需要查看mysql的uuid值是否在集群中重复cat /var/lib/mysql/auto.cnf
发现 master 和 slave的uuid都是这个 则需要更改slave 的uuid值
容器中下载 vim命令
apt-get update
apt-get install vim
vim /var/lib/mysql/auto.cnf
如果没有连网的话 本地新建auto.cnf文件
使用 docker cp auto.cnf 容器ID: /var/lib/mysql/
进入容器 chmod 777 /var/lib/mysql/auto.cnf
重启容器 再次查看
show slave status \G;
从机配置完成
测试 连接主机TEST_CAT数据库 新建表 插入数据 查看从机是否存在