一、概述
复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。MySQL支持两种复制方式:基于行的复制和基于语句的复制。
基于语句的复制(也称为逻辑复制)早在MySQL3.23版本中就存在,而基于行的复制方式在5.1版本中才被加进来。
新版本的服务器可以作为老版本服务器的备库,但反过来是不可行的。
通过复制可以将读操作指向备库来获得更好的读扩展,但对于写操作,除非设计得当,否则并不适合通过复制来扩展写操作。在一主多备的架构中,写操作会被执行多次,这时候这个系统的性能取决于写入最慢的那部分。
复制比较常见的用途:
数据分布、负载均衡、备份、高可用性和故障切换、MySQL升级测试。
复制的三个步骤:
1、在主库上把数据更改记录到二进制日志(Binary Log)中。
2、备库将主库上的日志复制到自己的中继日志(Relay Log)中。
3、备库读取中继日志中的时间,将其重放到备库数据上。
MySQL的复制架构有一个弱点:在主库上并发运行的查询在备库只能串行化执行,因为只有一个SQL线程来重放中继日志中的事件。
二、配置复制
为MySQL服务器配置复制非常简单,分为以下几步:
- 在每台服务器上创建复制账号。(严格来讲不是必须每台,但推荐这么做)。
- 配置主库和备库。
- 通知备库连接到主库并从主库复制数据。
1、创建复制账号
给复制线程特殊权限
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'192.168.0.%' IDENTIFIED BY 'p4ssword';
我们在主库和备库创建该账号。
注意:
- 把账号限制在本地网络,因为这是一个特权账号。
- REPLICATION SLAVE是全局权限,不能限定某个数据库或表。过滤备份用其他方法,后面会介绍到。
- 实际上主库只需要REPLICATION SLAVE权限,并且不是每一端服务器都需要REPLICATION CLIENT权限,这么配置时方便出现问题时,主备互换角色。
2、配置主库和备库
主库:
在my.cnf文件中增加或修改如下内容:
log_bin=mysql-bin
server_id=10
实际值由你决定。
必须明确指定一个唯一的服务器ID。通常的做法是使用服务器IP地址的末8位。重启MySQL服务。
可以使用SHOW MASTER STATUS命令检查输出是否如下:
文件名和后面的数字可能有所不同。positon是当前日志文件的位置。
备库:
在my.cnf中增加类似的配置,并重启服务:
log-bin=mysql-bin
server_id=2
relay_log=/var/lib/mysql/mysql-relay-bin
log_slave_update=1
read_only=1
从技术上来说,有些选项并不总是必要的。但推荐这样配置。
read_only可以阻止没有特权的线程修改数据。
其他推荐配置:
主库:
sync_binlog=1 #证服务器崩溃时不会丢失事件。
innodb_flush_log_at_trx_commit=1 #保证每个commit都及时写入日志
innodb_support_xa=1 #MySQL5.0及以后版本的配置,支持跨存储引擎及二进制日志事务
log_bin="/var/lib/mysql/mysql-bin" #明确指定日志文件位置,对多台服务器的管理有帮助
备库:
relay_log="path/to/logs/relay-bin" #指定明确日志位置,可以避免多版本MySQL复制的bug
skip_slave_start #避免崩溃后自动启动日志,给修复赢取时间
如果使用MySQL5.5并且不介意额外的fsync()的性能开销,最好设置一下选项:
sync_master_info=1
sync_relay_log=1
sync_relay_log_info=1
3、启动复制
告诉备库连接到主库,这一步不要通过修改my.cnf来配置,而是使用CHANGE MASTER TO语句。
mysql> CHANGE MASTER TO MASTER_HOST='server1', -> MASTER_USER='repl', -> MASTER_PASSWORD='p4ssword', -> MASTER_LOG_FILE='mysql-bin.000001', -> MASTER_LOG_POS=0;MASTER_LOG_FILE和MASTER_LOG_POS是主服务器上SHOW MASTER STATUS命令看到的文件和位置。位置设置成0,即从日志头开始复制。
上面的命令是连接主备库,下面是开始复制的命令:
mysql> START SLAVE;
可以通过SHOW SLAVE STATUS;查看备库复制情况。
4、从已有数据的数据库复制
上面的步骤是主库和备库都是新库,在都没有数据是,先配置复制。如果从一个已有数据的服务器复制,先要将备库和主库的数据进行同步。
需要三个条件让主库和备库保持同步:
- 在某个时间点的主库的数据快照。
- 主库当前二进制日志文件,和获得数据快照时在该二进制日志文件中的偏移量,称为日志文件坐标。可以通过SHOW MASTER STATUS命令获取这些值。
- 从快照时间到现在的二进制日志
相关推荐
MySQL复制设置步骤
Mysql复制的经典书籍,详细介绍复制原理,复制的各种场景,各种问题的解决。覆盖绝大多数生产场景
用go 写的mysql复制库 它是一个纯 Go 语言库,用于处理 MySQL 网络协议和复制。该库提供了多个功能,包括 MySQL 复制、增量数据导出、客户端、模拟服务器、故障转移、数据库驱动等。以下是对其中一些关键部分的简要...
MySQL复制设置步骤
mysql复制环境搭建文档,内容比较详细,可与mysql数据库安装文档配合使用
企业级架构MySQL复制技术
MYSQL复制深入研究,replication。 文档为odt格式
Percona Replication Manager - 异步的MySQL复制管理器代理Pacemaker。支持文件和基于GTID复制。
MySQL复制流程深入理解
MySQL复制.pptx
Linux运维-运维课程d6-MySQL主从复制架构-03-MySQL复制原理.mp4
mysql复制 my.cnf master slaver 复制的详细配置和 操作手册,
Linux运维-运维课程d6-MySQL主从复制架构-04-MySQL复制架构体系.mp4
Ripple,一个可以作为MySQL复制中间件的服务器
主要介绍了Mysql复制表结构、表数据的方法,需要的朋友可以参考下
python-mysql-replication, 在PyMYSQL之上,MySQL复制协议构建的纯 python 实现 python-mysql-replication MySQL复制协议在PyMYSQL之上的纯 python 实现。 这允许你接收诸如插入。更新。delete 和它们的数据和原始...
kafka-mysql-connector, Kafka 连接框架的插件,它将数据从MySQL复制到 Kafka Kafka MySQL连接器我在这个连接器上停止开发。 这里有可以供选择: 基于 Kafka 连接的MySQL-> Kafka 解决方案,请查看优秀的Debezium ...
MySQL复制技术分析研究.pdf
Orchestrator 是 MySQL 复制拓扑管理和可视化工具,支持: 检测和审查复制集群 安全拓扑重构:转移服务于另外一台计算机的系统拓扑S 整洁的拓扑可视化 复制问题可视化 通过简单的拖拽修改拓扑 维护模式声明...