一、概述
复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。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复制机制是一种强大的技术,它允许不同计算机上的MySQL服务器之间保持数据的同步。本文将深入探讨MySQL复制的设置步骤,基于提供的文件内容,我们将重点讲解如何构建一个“主-从”...
Mysql复制的经典书籍,详细介绍复制原理,复制的各种场景,各种问题的解决。覆盖绝大多数生产场景
MySQL复制系统主要可以实现以下几点策略: 1. 在线数据备份。企业可以专门部署一台slave服务器用于备份。当需要进行数据备份时,可以临时停止该slave上的数据复制进程,然后使用mysqldump工具或者直接拷贝数据文件...
MySQL复制和调优是数据库管理中的重要环节,它涉及到数据安全性、系统扩展性和高可用性。本文将深入探讨MySQL复制的原理、实现步骤以及调优方法。 首先,MySQL复制的基本原理是通过主从架构实现数据的实时同步。...
PRM作为Pacemaker的代理,可以识别MySQL复制链路的状态,当检测到主库故障时,它会自动触发从库晋升为主库,从而实现快速的故障恢复。此外,PRM还能协助在主从切换过程中保持数据的一致性。 **4. 文件复制与基于...
MySQL 复制流程深入理解 MySQL 复制流程深入理解是一个复杂的过程,它涉及到多个线程、日志、索引、事务等概念。为了深入理解 MySQL 复制流程,我们需要从多个方面进行分析。 首先,MySQL 复制流程可以分为三个...
在使用YII2开发应用时,配置MySQL复制和读写分离能够帮助我们更好地利用资源,实现负载均衡。 在进行MySQL复制和读写分离之前,需要了解MySQL的复制原理和基本组件。MySQL的复制过程大致包括以下几个步骤:主服务器...
### 企业级架构MySQL复制技术详解 #### 一、MySQL复制技术概述 ##### 1. 业务背景 在现代互联网应用中,随着用户数量的急剧增加以及数据访问频率的提高,传统的单点数据库架构难以满足高并发、低延迟的数据访问...
用go 写的mysql复制库 它是一个纯 Go 语言库,用于处理 MySQL 网络协议和复制。该库提供了多个功能,包括 MySQL 复制、增量数据导出、客户端、模拟服务器、故障转移、数据库驱动等。以下是对其中一些关键部分的简要...
MySQL复制架构是数据库高可用性、负载均衡和数据冗余的一种常见实现方式。在这个架构中,数据在主服务器上写入后,会通过日志复制技术自动或手动地同步到一个或多个从服务器上。这样的设计使得系统可以承受单点故障...
python-mysql-复制在 PyMYSQL 之上构建的 MySQL 复制协议的纯 Python 实现。这允许您接收诸如插入、更新、删除等事件及其数据和原始 SQL 查询。使用案例MySQL 到 NoSQL 数据库的复制MySQL 到搜索引擎的复制当数据库...
### MySQL复制功能详解 #### 一、MySQL复制概述 MySQL作为一种流行的关系型数据库管理系统(RDBMS),被广泛应用于Web应用程序的后端数据存储。它的特点包括开放源代码、跨平台支持、高性能、可靠性、易用性以及良好...
Ripple是一款强大的开源项目,它作为一个MySQL复制中间件服务器,被设计用于扩展和增强MySQL的复制功能。Ripple的核心目标是提供一个灵活、可扩展且高性能的解决方案,以便在分布式环境中管理和同步MySQL数据。这个...
MySQL复制技术是数据库高可用性和负载均衡的重要组成部分,特别是在大规模互联网应用中不可或缺。本文将深入探讨MySQL复制的原理、存在的问题、以及针对这些问题的优化方案,特别是阿里巴巴的AliMySQL特性和一个名为...
本篇文章将深入探讨MySQL复制表结构时遇到的问题及解决方案。 首先,我们要明确复制表结构并不涉及表中的数据,只是复制了列名、数据类型、主键、外键等元数据。通常,开发者可能会尝试使用`SELECT * INTO`语句来...
### 意想不到的MySQL复制延迟原因分析 在IT运维工作中,MySQL数据库的高可用性和数据一致性至关重要。本文将深入探讨一个案例中的MySQL复制延迟问题,该案例涉及MySQL 5.7.18版本,出现了严重的复制延迟现象,具体...
MySQL的复制技术是一种核心...总的来说,MySQL复制技术是数据库管理中不可或缺的一部分,它为复杂的分布式系统提供了稳定性和灵活性。理解和掌握复制技术的原理和实践,对于设计和维护高可用性的MySQL集群至关重要。