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 状态有两个需要注意的地方:
- read_only=1只读模式,不会影响slave同步复制的功能,所以在MySQL slave库中设定了read_only=1后,通过 “show slave status\G” 命令查看salve状态,可以看到salve仍然会读取master上的日志,并且在slave库中应用日志,保证主从数据库同步一致;
- 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
联系我
邮箱:ponder09@outlook.com
微信(需要base64解码
):UG9uZGVyMDk=