Docker部署MySql主从复制


前言

一台Linux服务器(已安装Docker)


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用Docker安装两个MySql,主数据库 和 从数据库

主数据库
端口号:3307
将数据库配置文件和数据库挂载到了/app/mysql_master目录

	docker run -p 3307:3306 --name mysql_master --restart=always --privileged=true \
	-v /app/mysql_master/log:/var/log/mysql \
	-v /app/mysql_master/data:/var/lib/mysql \
	-v /app/mysql_master/conf:/etc/mysql/conf.d \
	-v /etc/localtime:/etc/localtime:ro \
	-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.33

从数据库
端口号:3308
将数据库配置文件和数据库挂载到了/app/mysql_slave目录

	docker run -p 3308:3306 --name mysql_slave --restart=always --privileged=true \
	-v /app/mysql_slave/log:/var/log/mysql \
	-v /app/mysql_slave/data:/var/lib/mysql \
	-v /app/mysql_slave/conf:/etc/mysql/conf.d \
	-v /etc/localtime:/etc/localtime:ro \
	-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.33

执行成功。
在这里插入图片描述

在这里插入图片描述

二、修改配置文件,修改完配置文件后重启两个容器

需要主从复制的数据库 test,可以在配置文件中修改

主库配置文件my.conf,需要在/app/mysql_master/conf创建my.cnf文件

[mysqld]
character-set-server=UTF8MB4
#上面安装时候配置的文件路径(不要复制)

# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 服务器唯一id,默认为1,值范围为12^321. ;主数据库和从数据库的server-id不能重复
server-id=1
# ###可选配置
# 需要主从复制的数据库 ,如多个则重复配置
replicate-do-db=test
# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) ,如多个则重复配置
binlog-ignore-db=mysql
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_format=row
# 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。
binlog_expire_logs_seconds=2592000
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件
relay_log=replicas-mysql-relay-bin
# log_replica_updates表示slave是否将复制事件写进自己的二进制日志,默认值ON开启;8.0.26版本之前使用log_slave_updates
log_slave_updates=ON
# 防止改变数据(只读操作,除了特殊的线程)
read_only=ON

从库配置文件my.conf,需要在/app/mysql_slave/conf创建my.cnf文件

[mysqld]
character-set-server=UTF8MB4
#上面安装时候配置的文件路径(不要复制)

# 设置同步的binary log二进制日志文件名前缀,默认是binlog
log-bin=mysql-bin
# 服务器唯一id,默认为1,值范围为12^321. ;主数据库和从数据库的server-id不能重复
server-id=2
# ###可选配置
# 需要主从复制的数据库 ,如多个则重复配置
replicate-do-db=test
# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) ,如多个则重复配置
binlog-ignore-db=mysql
# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
# 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_format=row
# 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天;8.0.3版本之前使用expire_logs_days,单位天数,默认值为0,表示不自动删除。
binlog_expire_logs_seconds=2592000
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断,默认OFF关闭,可选值有OFF、all、ddl_exist_errors以及错误码列表。8.0.26版本之前使用slave_skip_errors
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# relay_log配置中继日志,默认采用 主机名-relay-bin 的方式保存日志文件
relay_log=replicas-mysql-relay-bin
# log_replica_updates表示slave是否将复制事件写进自己的二进制日志,默认值ON开启;8.0.26版本之前使用log_slave_updates
log_slave_updates=ON
# 防止改变数据(只读操作,除了特殊的线程)
read_only=ON

三、配置主数据库和从数据库(Navicat执行)

主数据库配置

主服务器:
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';  # 在master上创建授权用户

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';# 为slave用户授权

FLUSH PRIVILEGES;	# 刷新权限
SHOW MASTER STATUS;	# 查看主服务的状态
# 记录下 FilePosition , 后面会用到

记录下 File 和 Position , 后面会用到

在这里插入图片描述

从数据库配置

从服务器:
CHANGE MASTER TO MASTER_HOST='39.107.156.36', MASTER_PORT=3307, MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='刚刚记录的File',MASTER_LOG_POS= 刚刚记录的Position;	# 在从库上设置要同步的主库信息

# CHANGE MASTER TO MASTER_HOST='39.107.156.36', MASTER_PORT=3307, MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=821;

start slave;           	# 开启同步设置
show slave status; 

在这里插入图片描述

说明

MASTER_HOST/SOURCE_HOST:主数据库的主机ip
MASTER_PORT/SOURCE_PORT:主数据库的端口,不设置则默认是3306
MASTER_USER/SOURCE_USER:主数据库被授予同步复制权限的用户名
MASTER_PASSWORD/SOURCE_PASSWORD:对应的用户密码
MASTER_LOG_FILE/SOURCE_LOG_FILE:在主数据库执行命令show master status 查询到的二进制日志文件名称
MASTER_LOG_POS/SOURCE_LOG_POS:在主数据库执行命令show master status 查询到的位置 Position的值

总结

完活!!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值