mysql 主从复制介绍,MySQL 数据库主从复制原理和配置过程介绍 | IT工程师的生活足迹...

复制功能可将来自一台MySQL数据库服务器(主服务器)的数据复制到一台或多台MySQL数据库服务器(从服务器)。

默认情况下复制是异步的; SLAVE不需要永久连接以接收来自Master的更新。根据配置,您可以复制数据库中的所有数据库,选定数据库或甚至选定的表。

一、细节说明

1.1、设定复制的数据

每个SLAVE都会收到MASTER二进制日志的全部内容的副本。

SLAVE可以决定执行二进制日志中的哪些语句。如特定的数据库或者选定的数据表。您无法配置MASTER仅记录特定事件的二进制日志。

1.2、管理复制的线程

每个SLAVE都保存二进制日志坐标的记录:文件名称和它从MASTER读取并处理的文件内的位置。

这意味着可以将多个SLAVE连接到MASTER并执行相同二进制日志的不同部分。

由于SLAVE控制此过程,因此各个SLAVE与MASTER连接或断开连接,都不会影响MASTER的运行。

另外,由于每个SLAVE都记录二进制日志中的当前位置,因此SLAVE可能会断开连接,重新连接并恢复处理。

1.3、复制机制要求

主站和每个从站必须配置一个唯一的ID(使用该server-id选项)。

另外,每个从站都必须配置有关主站名称,日志文件名以及该文件中的位置的信息。

这些细节可以使用从机上的CHANGE MASTER TO语句在MySQL会话中进行控制。

二、主从复制服务概述

有一些通用任务对所有设置都是通用的:

主从复制配置过程中需要做的工作

1、Master 启动二进制日志记录并配置唯一服务标识;需要重启服务。

2、Slave 服务配置唯一服务标识;需要重启服务。

3、为Slave 服务创建独立的用户,用于连接Master时做认证。

4、Master创建数据快照和Slave启动复制过程之前,要确认Master二进制日志的记录位置Pos。

5、如果Master服务已经记录了数据,需要对数据创建快照并复制到Slave服务中。不同的存储引擎创建快照方式不同。

6、在Slave服务设置连接Master的参数:user\password\logfile\logpos

三、Master 服务端配置

3.1、Master 配置文件

主服务器配置为使用基于二进制日志文件位置的复制,您必须启用二进制日志记录并建立唯一的服务器ID。

[mysqld]

log-bin=mysql-bin

server-id=1

如果你省略server-id(或明确地将其设置为其默认值0),Master 服务将拒绝来自Slave服务的任何连接。

3.2、设定Binary log记录的库

binlog-do-db= 记录的库(多个库,用逗号分开)

binlog-ignore-db=mysql,performance_schema,infomation_schema 忽略的数据库

3.3、创建复制用户

每个Slave都使用MySQL用户名和密码连接到Master,因此Master上必须有一个用户帐户,以便Slav可以使用该帐户进行连接。

任何帐户都可以用于此操作,只要它已被授予 REPLICATION SLAVE特权即可。您可以选择为每个Slave创建一个不同的帐户,或者使每个Slave使用相同的帐户连接到Master。

CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';

3.4、Master 二进制日志位置

获取二进制日志的位置前,需要对Master 服务的表加共享锁(读锁)。

MySQL> FLUSH TABLES WITH READ LOCK;

需要确保对数据表添加共享锁的客户端保持运行状态,以便共享锁持续生效。如果此客户端退出,则锁定被释放。

显示的日志文件名称和位置值

SHOW MASTER STATUS

mysqldump --master-data

3.5、Master 创建数据快照

MyISAM 存储引擎的表,可以直接备份同步至Slave库。

InnoDB 存储引擎的表,需要使用逻辑备份功能mysqldump。

在获取到Master库的数据快照后,记得要释放之前设置的共享锁。

四、Slave 服务端配置

4.1、Slave 配置文件

每个Slave都必须具有唯一的服务器标识。

如果您要设置多个Slave,则每个Slave的server-id必须与主站和其他Slave不同。

如果您省略server-id(或将其明确设置为默认值0),则从站拒绝连接到主站。

在Slave服务上是否启动二进制日志,更加情况而定。

4.2、设定复制的库或者表

replication-do-db=设定复制的库(多个库,用逗号分开)

replicate-ignore-db=设定要忽略的数据库

replicate-do-table=设定要复制的表

replicate-wild-do-table 复制的表,可以使用通配符

replicate-wild-ignore-table 忽略的表,可以使用通配符

4.3、连接Master服务

要设置Slave与Master进行通信以进行复制,请使用必要的连接信息配置Slave.

CHANGE MASTER TO MASTER_HOST='master_host_name',MASTER_USER='replication_user_name',MASTER_PASSWORD='replication_password',MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS=recorded_log_position;

复制不能使用Unix套接字文件。您必须能够使用TCP / IP连接到主MySQL服务器。

4.4、启动复制线程

将Master数据快照导入到Slave库后,并配置好Master服务连接。就可以开启复制线程了。

MySQL> START SLAVE;

五、基于全局事务标识符GTID复制

全局事务标识符(GTID)是创建的唯一标识符,并与源(主)服务器上提交的每个事务相关联。此标识符不仅是其源自的服务器唯一的,而且在给定的复制设置中的所有服务器上都是唯一的。所有交易和所有GTID之间都有一对一的映射关系。

后续在补充更新

六、主从复制任务管理

6.1、检测复制状态

show slave status;

6.2、Slave暂停复制过程

Slave 服务中的复制过程包括两个线程:I/O线程和SQL线程。

I/O线程:从Master二进制日志读取时间并将它们写入中继日志。

SQL线程:从中继日志中读取事件并执行它们。

MYSQL > STOP SLAVE I0_THREAD;

MYSQL > START SLAVE IO_THREAD;

暂停I/O线程,使SQL线程执行完中继日志中的事件。

MYSQL > STOP SLAVE SQL_THREAD;

MYSQL > START SLAVE SQL_THREAD;

I/O线程继续读取事件并写入中继日志;SQL线程不读取和执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值