mysql docker 主从复制实例

思路

  • 创建主服务器 mysql_master,获取ip地址,编辑mysql配置文件
  • 创建从服务器 mysal_slave,获取ip地址,编辑mysql配置文件
  • 主服务器的 mysql 中创建 slave 用户用于主从复制
  • 查看主服务器二进制日志文件的状态信息。记录Position参数
  • 改变mysql_slavemaster
  • 启动mysql_slaveslave
  • 查看slave状态,主从复制成功

配置docker环境

创建主服务器

1
2
3
4
5
6
7
docker run \
--name mysql_master \
-v /Users/panyian/code/docker/mysql_copy/master:/etc/mysql/conf.d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:latest

创建从服务器

1
2
3
4
5
6
7
docker run \
--name mysql_slave \
-v /Users/panyian/code/docker/mysql_copy/slave:/etc/mysql/conf.d \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-d \
mysql:latest

命令详解, –name 设置名称,-v设置路径挂载,-p 端口映射,-e 环境变量设置,-d后台运行

修改MySQL配置

1
主服务器`mysql`配置文件``/Users/panyian/code/docker/mysql_copy/master/custom.cnf`

[mysqld]

设置server_id,一般设置为IP,同一局域网内注意要唯一

server_id=100

复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)

log-bin=edu-mysql-bin

为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

1
2

从服务器`mysql`配置文件`/Users/panyian/code/docker/mysql_copy/slave/custom.cnf`

[mysqld]

设置server_id,一般设置为IP,注意要唯一

server_id=101

复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db=mysql

开启二进制日志功能,以备Slave作为其它Slave的Master时使用

log-bin=edu-mysql-slave1-bin

为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size=1M

主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format=mixed

二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days=7

跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors=1062

relay_log配置中继日志

relay_log=edu-mysql-relay-bin

log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates=1

防止改变数据(除了特殊的线程)

read_only=1