一.概述
复制默认是异步的,因此Slave不需要与Master建议持久连接。
MySQL服务器之间的复制是建立在二进制日志机制上。MySQL实例操作作为Master,写、读、更新为二进制日志的事件。二进制日志中的信息,以不同的数据库更改记录对应的数据格式来存储。Slave设置成读取Master上的二进制日志,在Slave本地数据库上执行二进制日志中的事件。
一旦二进制日志开启,所有的都会记录在二进制文件中。每个Slave接收完整的二进制日志的拷贝版本。Slave的职责是决定二进制日志中应该被执行的语句。你不能配置Master去执行一个特定的事件。
复制的优势:
1.横向拓展:
从多个站之间分配负载以提高性能。这种环境下,所有的写和更新操作必须发生在Master上,读操作可以发生在多个Slave上。
2.数据安全:
3.分析学:
4.远程数据分发:
二.如何配置一个复制?
ps:用香港的两台服务器做实例.
1.主机配置
开启二进制日志和创建一个唯一的Master ID。Master和多个Slave必须一个唯一ID(使用server-id项)。另外,Slave必须配置Master的主机名、日志文件名以及文件中的位置。修改my.cnf文件:
2.从机配置
创建一个server ID.
3.创建"复制"用户
在mysql数据库的user表中,创建一条复制所属的账号密码。每一个slave连接master,通过MySQL的用户名和密码连接,给它赋予replication slave权限。你可以为每一个从机创建不同的账号,也可以所有的从机共用一个账号。尽管你不必特地为了复制创建一个账号,你应该意识到复制账号密码在主机信息库文件或表中以明文的形式存储。因此,你可能想创建一个独立账号,它只拥有复制进程的权限,尽一切可能减少对其他账号的危害。
4.获取复制主二进制日志坐标
为了配置Slave机在正确的点开启Replication进程,你需要记录Master在它的二进制日志中的当前坐标。
如果在开启Relication进程之前,你的主机上存在你想同步到slave机上的数据,你必须在主机上停止处理语句,然后在准许主机继续执行语句之前,获取当前的二进制日志坐标并转存数据。如果你不停止执行语句,那么转存的数据和你使用的主机状态信息将不匹配,并且以你slave机上的数据库不一致或者破坏结束。
为了获取主机二进制日志坐标,步骤如下:
(1).通过命令行客户端,在主机上开启一个会话,刷新所有的表,而且阻塞写锁。
FLUSH TABLES WITH READ LOCK;
(2).在主机上不同的会话,执行SHOW MASTER STATUS;来确认二进制日志的文件名和位置.
如果主机运行之前没有开启二进制日志,二进制日志的文件名和位置在SHOW MASTER STATUS执行后是空值。
5.使用mysqldump创建数据快照
6.创建一个数据快照使用原生文件
7.通过新主从来创建复制
在新主从里创建复制的步骤:
(1).配置MySQL主机.
(2).启动一个MySQL主机.
(3).启动一个用户.
(4).获取主机状态信息,或者是
(5).
10.在Slave上配置Master配置.
三.复制的格式
1.基于行复制和基于语句复制的区别
2.使用基于行的日志和复制.
3.选择安全或不安全的二进制日志.
四. 全局事务标识符复制
使用GTID时,当它在源主机上提交并被Slave机应用时,每一个事务能够被标识和追踪。
1.GTID概念
(1).冷启动:第一次启动系统,或者系统停下来了。
附加:平滑启动,。
2.使用GTID配置复制.
最简单的GTID复制拓扑结构(一台Master和一台Slave)的关键启动步骤:
(1).如果复制已经在运行了,通过设置他们只读来同步两台服务器。
(2).停下两台服务器.
(3).重启两台服务器,启用GTIDs、二进制日志和从站更新日志,禁用对基于GTID的复制不安全的语句。另外,服务器应该以只读的模式启动,slave SQL和I/O线程应该避免在slave上启动。
(4).指导slave,使用Master作为复制的数据源和自动记录位置。
(5).获取一个新的备份。包含非GTIDs的二进制日志不能在GTIDs开启的服务器上使用,所以这个点之前获取的备份是不能应用在你的新配置里面。
(6).开启slave,再次关闭他们的只读模式,为了可以接收到更新。
Master-Slave复制之间使用的协议:
(1).使用MySQL的"classic"基于文件的复制协议,需要顶级MySQL用户账号权限。
问题列表
(1).如何同步Master and Slave?
SET @@GLOBAL.read_only = ON;
3.使用GTIDs实现故障转移和横向拓展.
常用的4种技术:
(1).简单复制
(2).拷贝数据和事务到slave.
(3).注入空事务.
(4).使用gtid_purged排除事务.
4.复制约束(使用GTID).
5.禁用GTID事务.
五.事务和二进制日志的选项和变量
1.
2.
六.公共的复制管理任务
1.检查复制的状态.
SHOW SLAVE STATUS;
2.在从机上暂停复制.