MySQL5.7 多主一从

MySQL5.7 多主一从
双木老林使用场景
- 读写分离<独立出一个专门用于查的库>
- 数据汇总<也就是数据统计那一块的东东>
基础环境
- CentOS 7
1
cat /etc/os-release
- Docker ( Docker version 18.06.1-ce )
1
docker --version
- 数据库版本 ( MySQL 5.7 )
- 主库1: 端口 3311
- 主库2: 端口 3312
- 从库1: 端口 3411
安装数据库
Docker方式 安装
如果要将 配置文件 和 数据库文档存储文件 从宿主机挂载到容器内,需要以下操作:
- 先把容器跑一个,把样板给搞到宿主机。
1 | docker run --rm --name temp -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 |
- 由于每台 mysql 容器的 server-uuid 必须不同才能组成主备,所以得修改一下
1 | vi /home/docker/mysql/3311/data/auto.cnf |
主库 1: 端口为 3311,容器名为 mysql3311
- 在 /home/docker/mysql/3311/conf/mysql.conf.d/mysqld.cnf -- [mysqld] 增加如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16##########################
## log bin
##########################
server-id = 3311 # 必须唯一
log_bin = mysql-bin # 开启及设置二进制日志文件名称
binlog_format = MIXED
sync_binlog = 1
expire_logs_days = 7 # 二进制日志文件自动删除(也就是过期)天数。不设置则默认 0,意味着不会删除
## 需要同步的数据库
binlog-do_db = test3311
## 不需要同步的数据库
binlog-ignore_db = mysql
binlog-ignore_db = information_schema
binlog-ignore_db = performation_schema
binlog-ignore_db = sys - 新建容器
1
docker run --name mysql3311 -p 3311:3306 -v /home/docker/mysql/3311/conf:/etc/mysql -v /home/docker/mysql/3311/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- 在 /home/docker/mysql/3311/conf/mysql.conf.d/mysqld.cnf -- [mysqld] 增加如下内容
主库 2: 端口为 3312,容器名为 mysql3312
- 在 /home/docker/mysql/3312/conf/mysql.conf.d/mysqld.cnf -- [mysqld] 增加如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16##########################
## log bin
##########################
server-id = 3312 # 必须唯一
log_bin = mysql-bin # 开启及设置二进制日志文件名称
binlog_format = MIXED
sync_binlog = 1
expire_logs_days = 7 # 二进制日志文件自动删除(也就是过期)天数。不设置则默认 0,意味着不会删除
## 需要同步的数据库
binlog-do_db = test3312
## 不需要同步的数据库
binlog-ignore_db = mysql
binlog-ignore_db = information_schema
binlog-ignore_db = performation_schema
binlog-ignore_db = sys - 新建容器
1
docker run --name mysql3312 -p 3312:3306 -v /home/docker/mysql/3312/conf:/etc/mysql -v /home/docker/mysql/3312/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- 在 /home/docker/mysql/3312/conf/mysql.conf.d/mysqld.cnf -- [mysqld] 增加如下内容
从库 1 的安装:注:端口为 3411,容器名为 mysql3411,做为从库 1
- 在 /home/docker/mysql/3411/conf/mysql.conf.d/mysqld.cnf -- [mysqld] 增加如下内容
1
2
3
4
5
6##########################
## log bin
##########################
server-id = 3411 # 必须唯一
master_info_repository = table
relay_log_info_repository = table - 新建容器
1
docker run --name mysql3411 -p 3411:3306 -v /home/docker/mysql/3411/conf:/etc/mysql -v /home/docker/mysql/3411/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
- 在 /home/docker/mysql/3411/conf/mysql.conf.d/mysqld.cnf -- [mysqld] 增加如下内容
传统方式 安装 <网上百度一下,这里就不写这个了>
配置走一波(本章使用 Navicat)
- 连接 3311,执行命令 结果: 如果执行
1
2
3GRANT REPLICATION SLAVE on *.* to 'slave'@'%' IDENTIFIED BY '123456';
SHOW VARIABLES LIKE 'log_bin';
SHOW MASTER STATUS;SHOW VARIABLES LIKE 'log_bin';回复的 Value 为 ON 则成功。
需要的信息:抄下show master status结果中的 File 和 Position。 - 连接 3312,执行命令 结果: 如果执行
1
2
3GRANT REPLICATION SLAVE on *.* to 'slave'@'%' IDENTIFIED BY '123456';
SHOW VARIABLES LIKE 'log_bin';
SHOW MASTER STATUS;SHOW VARIABLES LIKE 'log_bin';回复的 Value 为 ON 则成功。
需要的信息:抄下show master status结果中的 File 和 Position。 - 连接 3411,执行命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST = '192.168.1.122', -- 连接主库的IP
MASTER_PORT = 3311, -- 连接主库的端口
MASTER_USER = 'slave', -- 登陆用户
MASTER_PASSWORD = '123456', -- 登陆密码
MASTER_LOG_FILE = 'mysql-bin.000001', -- 对应 SHOW MASTER STATUS 中的 File
MASTER_LOG_POS = 820 -- 对应 SHOW MASTER STATUS 中的 Position
for channel '3311'; -- 通道名,自己定义,需要唯一
CHANGE MASTER TO
MASTER_HOST = '192.168.1.122', -- 连接主库的IP
MASTER_PORT = 3312, -- 连接主库的端口
MASTER_USER = 'slave', -- 登陆用户
MASTER_PASSWORD = '123456', -- 登陆密码
MASTER_LOG_FILE = 'mysql-bin.000001', -- 对应 SHOW MASTER STATUS 中的 File
MASTER_LOG_POS = 660 -- 对应 SHOW MASTER STATUS 中的 Position
for channel '3312'; -- 通道名,自己定义,需要唯一
START SLAVE; - 查看从库状态
执行SHOW SLAVE STATUS;如果 Slave_IO_Running 和 Slave_SQL_Running 为 Yes 则成功
评论
匿名评论隐私政策












