MySQL搭建主从架构

发布时间 2023-09-08 22:35:35作者: strongmore

下载 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......)