docker mysql主从

Docker 部署Mysql 主从复制

Mysql(9.2) 主从复制

1. 创建主数据库容器

docker run -p 3308:3306 --privileged=true -v D:\docker_data\mysql_master\mysql_files:/var/log/mysql_files -v D:\docker_data\mysql_master\log:/var/log/mysql -v D:\docker_data\mysql_master\data:/var/lib/mysql -v D:\docker_data\mysql_master\cnf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  --name mysql_master -d mysql 
# 查看容器是否创建成功
docker ps 

2. 配置主数据库my.cnf

在映射路径下创建my.cnf文件并编辑

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=1 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。
## binlog_expire_logs_seconds=2592000  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

3. 重启docker

docker restart mysql_master

4. 授权

进入主数据库容器中

docker exec -it mysql_master mysql -uroot -p123456

查看my.cnf文件是否生效

SHOW VARIABLES LIKE 'server_id';
-- 创建复制账户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
-- 查看状态 记录下 File 和 Position 值
SHOW BINARY LOG STATUS\G

5 创建从数据库容器

docker run -p 3309:3306 --privileged=true -v D:\docker_data\mysql_slave\mysql_files:/var/log/mysql_files -v D:\docker_data\mysql_slave\log:/var/log/mysql -v D:\docker_data\mysql_slave\data:/var/lib/mysql -v D:\docker_data\mysql_slave\cnf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  --name mysql_slave -d mysql 

6. 配置从数据库my.cnf

在映射路径下创建my.cnf文件并编辑

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=2
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。
## binlog_expire_logs_seconds=2592000  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1

7. 重启docker

docker restart mysql_slave

8. 启动复制

进入从数据库容器中

docker exec -it mysql_slave mysql -uroot -p123456

查看my.cnf文件是否生效

SHOW VARIABLES LIKE 'server_id';

– 配置主库连接(使用 SOURCE 替代 MASTER)

CHANGE REPLICATION SOURCE TO
    # 宿主机id
    SOURCE_HOST='192.168.82.44', 
    SOURCE_PORT=3308,
    SOURCE_USER='slave',
    SOURCE_PASSWORD='123456',
    SOURCE_LOG_FILE='mall-mysql-bin.000001',
    SOURCE_LOG_POS=158,
    # 拷贝主数据库的公钥(在/var/lib/mysql目录下)到从数据库
    SOURCE_PUBLIC_KEY_PATH='/var/log/mysql_files/public_key.pem';

-- 启动复制(新命令)
START REPLICA;

-- 查看复制状态(新命令)
SHOW REPLICA STATUS\G

下面两个值都是Yes,说明主从已经配置成功

Replica_IO_Running Yes
Replica_SQL_Running Yes

9. 主库添加数据测试

注💡:

如果my.cnf配置不生效,可能是my.cnf的权限过高
修改my.cnf的权限, 然后重启容器

# 查看权限
ls -l /etc/mysql/conf.d/my.cnf
# 修改权限
chmod 644 /etc/mysql/conf.d/my.cnf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值