使用docker搭建mysql主从复制

Tips:生产环境不建议用docker搭建MYSQL主从

1、创建master和slave容器

1.1、master主节点

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

1.2、slave从节点

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

2、修改master主配置和slave从配置

vim /mydata/master/conf/my.cnf
vim /mydata/slave/conf/my.cnf

2.1、mysql基本配置,(master和slave使用相同的基本配置)

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

2.2、继续修改master配置文件

# 保持唯一
server_id=1
# 给log起个名字,可以随意,有意义就行
log-bin=mysql-bin
# 关闭只读模式,对于只读模式的解释看下文
read-only=0

# 配置需要同步的库,可以配置多个
binlog-do-db=test-copy1
binlog-do-db=test-copy2

# 配置需要忽略的库(也就是不需要同步),也可以配置多个
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog-ignore-db=test-copy3

2.3、配置slave配置文件

# 保持唯一
server_id=2
# 开启只读模式,对于只读模式的解释看下文
read-only=1


## 以下配置文件只在从节点的数据需要同步到其他的节点时使用
# 给log起个名字,可以随意,有意义就行
log-bin=mysql-bin

# 配置需要同步的库,可以配置多个
binlog-do-db=test-copy1
binlog-do-db=test-copy2

# 配置需要忽略的库(也就是不需要同步),也可以配置多个
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

3、配置主从复制

3.1、打开master命令交互窗口,创建BACKUP用户并授权,密码为123456,分配给slave来同步数据。

GRANT REPLICATION SLAVE ON *.* TO 'BACKUP'@'%' IDENTIFIED BY '123456';

3.2、再查询一下主master库的状态,后面需要使用

show master status;

结果

File Position Binlog_Do_Db Binlog_Ignore_Db Executed_Gtid_Set
mysql-bin.000001 154 test-copy1,test-copy2 information_schema,mysql,performance_schema,sys,test-copy3

3.3、修改slave配置,需要使用到从master查询道德File和Position,需要替换掉下文的配置

CHANGE MASTER TO MASTER_HOST='192.168.0.112',MASTER_PORT=3306,MASTER_USER='BACKUP',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;

字段解释:

  • MASTER_HOST:主master节点ip
  • MASTER_PORT:端口
  • MASTER_USER:用于读取主节点binlog的账号
  • MASTER_PASSWORD:密码
  • MASTER_LOG_FILE:需要读取的文件名称
  • MASTER_LOG_POS:从什么开始读取

3.4、继续操作slave,输入命令开启slave同步

# 开启主从同步
start slave; 

3.5、查询slave状态

show slave status;

需要确保Slave_IO_State为Waiting for master to send event , Slave_IO_Running和Slave_SQL_Running两个字段均为Yes即可

4、测试

在master主节点分别创建test-copy1,test-copy2,test-copy3,通过配置文件可以得知,test-copy1和test-copy2会被同步到slave节点,而test-copy3不会。

5、说明

对于只读模式开启和关闭的解释

如需设置为只读状态,将该read_only参数设置为1或TRUE状态,但设置 read_only=1 状态有两个需要注意的地方:

  1. read_only=1只读模式,不会影响slave同步复制的功能,所以在MySQL slave库中设定了read_only=1后,通过 “show slave status\G” 命令查看salve状态,可以看到salve仍然会读取master上的日志,并且在slave库中应用日志,保证主从数据库同步一致;
  2. read_only=1只读模式,限定的是普通用户进行数据修改的操作,但不会限定具有super权限的用户的数据修改操作 (但是如果设置了"super_read_only=on", 则就会限定具有super权限的用户的数据修改操作了);在MySQL中设置read_only=1后,普通的应用用户进行insert、update、delete等会产生数据变化的DML操作时,都会报出数据库处于只读模式不能发生数据变化的错误,但具有super权限的用户,例如在本地或远程通过root用户登录到数据库,还是可以进行数据变化的DML操作;(也就是说"real_only"只会禁止普通用户权限的mysql写操作,不能限制super权限用户的写操作; 如果要想连super权限用户的写操作也禁止,就使用"flush tables with read lock;",这样设置也会阻止主从同步复制!)

原文:https://www.cnblogs.com/kevingrace/p/10095332.html


联系我

邮箱:[email protected]

微信(需要base64解码):UG9uZGVyMDk=

你可能感兴趣的:(其他,mysql,docker,数据库)