mysql5.7主从复制集群(binlog)

主从模式的优点:

  1. 负载均衡
    通常情况下,会使用 主服务器 对数据进行 更新、删除 和 新建 等操作,而将 查询 工作落到 从库 头上。
  2. 异地容灾备份
    可以将主服务器上的数据同步到 异地从服务器 上,极大地提高了 数据安全性。
  3. 高可用
    数据库的复制功能实现了 主服务器 与 从服务器间 的数据同步,一旦主服务器出了 故障,从服务器立即担当起主服务器的角色,保障系统持续稳定运作。
  4. 高扩展性
    主从复制 模式支持 2 种扩展方式:

scale-up
向上扩展或者 纵向扩展,主要是提供比现在服务器 性能更好 的服务器,比如 增加 CPU 和 内存 以及 磁盘阵列等,因为有多台服务器,所以可扩展性比单台更大。

scale-out
向外扩展或者 横向扩展,是指增加 服务器数量 的扩展,这样主要能分散各个服务器的压力。

主从模式的缺点

  1. 成本增加
    搭建主从肯定会增加成本,毕竟一台服务器和两台服务器的成本完全不同,另外由于主从必须要开启 二进制日志,所以也会造成额外的 性能消耗
  2. 数据延迟
    从库主库 复制数据肯定是会有一定的 数据延迟 的。所以当刚插入就出现查询的情况,可能查询不出来。当然如果是插入者自己查询,那么可以直接从 主库 中查询出来,当然这个也是需要用代码来控制的。
  3. 写入更慢
    主从复制 主要是针对 读远大于写 或者对 数据备份实时性 要求较高的系统中。因为 主服务器 在写中需要更多操作,而且 只有一台 可以写入的 主库,所以写入的压力并不能被分散。

主从复制的前提条件

  1. 主从服务器 操作系统版本位数 一致。
  2. 主数据库和从数据库的 版本 要一致。
  3. 主数据库和从数据库中的 数据 要一致。
  4. 主数据库 开启 二进制日志,主数据库和从数据库的 server_id 在局域网内必须 唯一

容器安装

基于日志binlog 的 主从配置

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
services:
mysql-master:
image: mysql:5.7.22
volumes:
- /etc/localtime:/etc/localtime
- /home/mysql/master-data:/var/lib/mysql
- /home/config/mysql/master/my.cnf:/etc/mysql/my.cnf
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: zentao
MYSQL_USER: zentao
MYSQL_PASSWORD: zentao123
depends_on:
- mysql-slave
deploy:
replicas: 1
restart_policy:
condition: on-failure
ports:
- "3306:3306"
networks:
- *default-network
mysql-slave:
image: mysql:5.7.22
volumes:
- /etc/localtime:/etc/localtime
- /home/mysql/slave-data:/var/lib/mysql
- /home/config/mysql/slave/my.cnf:/etc/mysql/my.cnf
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: zentao
MYSQL_USER: zentao
MYSQL_PASSWORD: zentao123
deploy:
replicas: 1
restart_policy:
condition: on-failure
ports:
- "3307:3306"
networks:
- *default-network

docker-compose up -d 后用工具连接主从数据库。

检查从库的起始状态

1
show master status;

记录 主数据库 binary-log文件名称数据同步起始位置

  • File: replicas-mysql-bin.000003
  • Position: 154

从数据库 上运行 主数据库 的相关配置 sql 进行主从关联

1
2
3
4
5
6
CHANGE MASTER TO
MASTER_HOST='mysql-master',
MASTER_USER='root',
MASTER_PASSWORD='root123',
MASTER_LOG_FILE='replicas-mysql-bin.000003',
MASTER_LOG_POS=154;

在从库命令行里面重新启动 slave 服务

1
2
stop slave
start slave

进一步检查 从数据库 的状态信息,两者已经进行 数据同步 关联。

创建目标表

主数据库 中创建一张测试数据表 course

1
2
3
4
5
6
7
8
9
SET FOREIGN_KEY_CHECKS=0; 
-- ---------------------------- -- Table structure for course -- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`lesson_period` double(5,0) DEFAULT NULL,
`score` double(10,0) DEFAULT NULL, PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

主数据库从数据库 的 数据处于 同步状态,那么恭喜你主从复制mysql集群搭建完成。

-------------本文结束-------------
0%