docker容器下mysql主从配置

知道的太多所以痛苦



文章目录

  • docker容器下mysql主从配置
  • 前言
  • 一、安装好docker容器
  • 二、docker配置mysql主从
  • 1.拉取mysql5.7
  • 2.运行mysql镜像
  • 3.配置my.cnf文件
  • 4.重启mysql主从数据库
  • 5.从数据库开启同步
  • 总结



linux下安装docker

二、docker配置mysql主从

1.拉取mysql5.7

代码如下(示例):

docker pull mysql:5.7

2.运行mysql镜像

mysql主容器:

docker run -p 3306:3306 --name mysql-master  -v /mydata/mysql-master/conf:/etc/mysql/conf.d -v /mydata/mysql-master/logs:/logs -v /mydata/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

mysql从容器:

docker run -p 3307:3306 --name mysql-slave  -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -v /mydata/mysql-slave/logs:/logs -v /mydata/mysql-slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

3.配置my.cnf文件

在/mydata/mysql-master/conf下创建my.cnf文件:

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=103
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 指定需要同步的数据库名称  #binlog-do-db=
## 开启二进制日志功能  
#记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故 障时数据的无损失恢复。
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
#statement 记录所有的写操作到bin-log文件 缺点:sql语句执行set time=now() 会出现主从不一致  
#row 记录每行的变换  缺点:数据量大的时候,记录数据多
#mixed是statement和row的混合  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
 
#通用查询日志
#记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令, 对我们复原操作的实际场
#景、发现问题,甚至是对数据库操作的审计都有很大的帮助。
general_log=ON  
general_log_file=/var/lib/mysql/mysql-general.log 
 
#慢查询日志
#记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。
slow_query_log=ON 
slow_query_log_file=/var/lib/mysql/mysql-slow.log 
long_query_time=3 
#设置慢查询的阈值为3秒,超出此设定值的SQL即被记录到慢查询日志
log_output=FILE
max_allowed_packet=200M
 
#错误日志
#记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的 状态,从而对服务器进行维护。
log-error=/var/lib/mysql/mysql-error.log

在/mydata/mysql-slave/conf下创建my.cnf文件:

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

4.重启mysql主从数据库

docker双机mysql主从互备 docker mysql 主从配置_容器

此时可以在主数据库中查看同步状态

+-------------------+----------+--------------+------------------+-------------------+
| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 |      154 |              |      mysql       |                   |
+-------------------+----------+--------------+------------------+-------------------+

5.从数据库开启同步

使用上一步的position ,进行关联主数据库

change master to master_host='192.168.52.129', master_user='root', master_password='root', master_port=3306, master_log_file='mall-mysql-bin.000001', master_log_pos=154, master_connect_retry=30;

开启同步

start slave
查看slave状态

docker双机mysql主从互备 docker mysql 主从配置_容器_02

如果发现Slave_SQL_Running: No,这地方必须是两个yes才可以同步。

执行以下即可:

STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; 
START SLAVE;

总结

以上即是docker下进行mysql主从复制的配置。