MySQL搭建主从架构
下载 docker 镜像
docker pull mysql
创建两个容器
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=pwd1 --name mysql-01 mysql
docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=pwd2 --name mysql-02 mysql
连接测试
可以使用阿里云的DMS或者DataGrip等客户端来连接
修改主从配置文件
将配置文件拷贝出来
docker cp mysql-01:/etc/mysql/my.cnf .
主机修改
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# 增加的内容 start
#主服务器唯一ID
server-id=1
##启用二进制日志
log-bin=mysql-bin
## 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
##设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=testdb
##设置logbin格式
binlog_format=STATEMENT
# 增加的内容 end
# Custom config should go here
!includedir /etc/mysql/conf.d/
从机修改
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# 增加的内容 start
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
# 增加的内容 end
# Custom config should go here
!includedir /etc/mysql/conf.d/
再次拷贝到容器中
docker cp my.cnf xxx:/etc/mysql/
重启两个容器
docker restart mysql-01
docker restart mysql-02
搭建主从复制
主机设置
主机给从机授权
docker exec -it mysql-01 /bin/bash
mysql -uroot -ppwd1
CREATE USER 'szz'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd1';
GRANT REPLICATION SLAVE ON *.* TO 'szz'@'%';
flush privileges;
查看主机状态
show master status;
主要信息
File: mysql-bin.000001
Position: 825
从机设置
docker exec -it mysql-02 /bin/bash
mysql -uroot -ppwd2
change master to master_host='ip', master_user='szz', master_password='pwd1', master_port=3310, master_log_file='mysql-bin.000001', master_log_pos=825, master_connect_retry=30;
从机开启复制
start slave;
show slave status \G;
Slave_IO_Running: YES
Slave_SQL_Running: YES
都为YES表示成功
验证
在主机创建testdb,且创建表及数据,都会同步到从机中
模拟异常情况:从机插入一条记录,主机再插入一条主键一样的记录,报错
解决方式:
stop slave;
set global sql_slave_skip_counter=1; # 跳过报错
start slave;
查看binlog是否开启
show variables like 'log_bin';
参考
Docker实践经验(四)docker 上部署 mysql8 主从复制
史上最详细Docker部署Mysql主从复制,带每一步骤图!!!
MySQL主从复制中的问题(Coordinator stopped beacause there were errors in the workers......)