Centos6 安装mysql5.6 实现主从复制/主主复制环境虚拟机下载

本博主配置好的Centos6 安装mysql5.6 实现主从复制/主主复制环境虚拟机下载,链接:https://pan.baidu.com/s/1YYS13pSxidzNwjlC-PiGng
提取码:npea 下载好,用Vmware Workstaion打开,即可以正常使用

Mysql复制概念
Mysql内建的复制功能是构建大型高性能应用程序的基础, 将Mysql数据分布到多个系统上,这种分布机制是通过将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

Mysql支持哪些复制
–  基于语句的复制: 在主服务器执行SQL语句,在从服务器执行同样语句。MySQL默认采用基于语句的复制,效率较高。一旦发现没法精确复制时, 会自动选基于行的复制。
–  基于行的复制: 把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
–  混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

Mysql复制解决的问题
–  数据分布 (Data distribution )
–  负载平衡(load balancing)
–  据备份(Backups) ,保证数据安全
–  高可用性和容错行(High availability and failover)
–  实现读写分离,缓解数据库压力

Mysql主从复制原理
master服务器将数据的改变都记录到二进制binlog日志中,只要master上的数据发生改变,则将其改变写入二进制日志;salve服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求master二进制事件,同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/O Thread和SQL Thread将进入睡眠状态,等待下一次被唤醒。

需要理解:
–  从库会生成两个线程,一个I/O线程,一个SQL线程;
–  I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
–  主库会生成一个log dump线程,用来给从库I/O线程传binlog;
–  SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

这里注意几点:
–  master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog);
–  slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了;
–  mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务;
–  mysql复制最好确保master和slave服务器上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本);
–  master和slave两节点间时间需同步;

Mysql复制流程图

如上图所示:
–  Mysql复制过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的  语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务;
–  第二部分就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程(I/O线程)。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志;
–  SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与  I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小;
–  此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制, 即复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

Mysql复制方案
主从复制: 主库授权从库远程连接,读取binlog日志并更新到本地数据库的过程;主库写数据后,从库会自动同步过来(从库跟着主库变);
主主复制: 主从相互授权连接,读取对方binlog日志并更新到本地数据库的过程;只要对方数据改变,自己就跟着改变;

本博主配置好的Centos6 安装mysql5.6 实现主从复制/主主复制环境虚拟机下载,链接:https://pan.baidu.com/s/1YYS13pSxidzNwjlC-PiGng
提取码:npea 下载好,用Vmware Workstaion打开,即可以正常使用

Mysql主从复制优点
在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)
在从主服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)
当主服务器出现问题时,可以切换到从服务器。(提升性能)

Mysql主从复制工作流程关键细节
1) MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器上已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器定位到从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

2) MySQL使用3个线程来执行复制功能,其中两个线程(Sql线程和IO线程)在从服务器,另外一个线程(IO线程)在主服务器。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以即为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,由从服务器创建,用于读取中继日志并执行日志中包含的更新。在从服务器上,读取和执行更新语句被分成两个独立的任务。当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内容,即使SQL线程执行更新的远远滞后。

mysql 主从复制注意事项小结 

Mysql主从数据完成同步的过程
1) 在Slave 服务器上执行sart slave命令开启主从复制开关,开始进行主从复制。
2) 此时,Slave服务器的IO线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从执行binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容

本博主配置好的Centos6 安装mysql5.6 实现主从复制/主主复制环境虚拟机下载,链接:https://pan.baidu.com/s/1YYS13pSxidzNwjlC-PiGng
提取码:npea 下载好,用Vmware Workstaion打开,即可以正常使用
3) Master服务器接收到来自Slave服务器的IO线程的请求后,其上负责复制的IO线程会根据Slave服务器的IO线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给Slave端的IO线程。返回的信息中除了binlog日志内容外,还有在Master服务器端记录的IO线程。返回的信息中除了binlog中的下一个指定更新位置。
4) 当Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件(Mysql-relay-bin.xxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新binlog日志时能告诉Master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容
5) Slave服务器端的SQL线程会实时检测本地Relay Log 中IO线程新增的日志内容,然后及时把Relay LOG 文件中的内容解析成sql语句,并在自身Slave服务器上按解析SQL语句的位置顺序执行应用这样sql语句,并在relay-log.info中记录当前应用中继日志的文件名和位置点.

主从复制条件
–  开启Binlog功能
–  主库要建立账号
–  从库要配置master.info (CHANGE MASTER to…相当于配置密码文件和Master的相关信息)
–  start slave 开启复制功能

主从复制时需要理解
–  3个线程,主库IO,从库IO和SQL及作用
–  master.info(从库)作用
–  relay-log 作用
–  异步复制
–  binlog作用 (如果需要级联需要开启Binlog)

主从复制时注意事项
–  主从复制是异步逻辑的SQL语句级的复制
–  复制时,主库有一个I/O线程,从库有两个线程,I/O和SQL线程
–  实现主从复制的必要条件是主库要开启记录binlog功能
–  作为复制的所有Mysql节点的server-id都不能相同
–  binlog文件只记录对数据库有更改的SQL语句(来自主库内容的变更),不记录任何查询(select,show)语句。

主主复制实现过程记录

根据上面的主从环境部署,master和slave已经实现同步,即在master上写入新数据,自动同步到slave。而从库只能读不能写,一旦从库有写入数据,就会造成主从数据不一致!
下面就说下Mysql主主复制环境,在slave上更新数据时,master也能自动同步过来。
—————————————————————————
温馨提示:
在做主主同步前,提醒下需要特别注意的一个问题:
主主复制和主从复制有一些区别,因为多主中都可以对服务器有写权限,所以设计到自增长重复问题,例如:
出现的问题(多主自增长ID重复)
1)首先在A和B两个库上创建test表结构;
2)停掉A,在B上对数据表test(存在自增长属性的ID字段)执行插入操作,返回插入ID为1;
3)然后停掉B,在A上对数据表test(存在自增长属性的ID字段)执行插入操作,返回的插入ID也是1;
4)然后 同时启动A,B,就会出现主键ID重复

解决方法:
只要保证两台服务器上的数据库里插入的自增长数据不同就可以了
如:A插入奇数ID,B插入偶数ID,当然如果服务器多的话,还可以自定义算法,只要不同就可以了
在下面例子中,在两台主主服务器上加入参数,以实现奇偶插入!
记住:在做主主同步时需要设置自增长的两个相关配置,如下:
auto_increment_offset 表示自增长字段从那个数开始,取值范围是1 .. 65535。这个就是序号。如果有n台mysql机器,则从第一台开始分为设1,2…n
auto_increment_increment 表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535。如果有n台mysql机器,这个值就设置为n。

在主主同步配置时,需要将两台服务器的:
auto_increment_increment 增长量都配置为2
auto_increment_offset 分别配置为1和2。这是序号,第一台从1开始,第二台就是2,以此类推!这样效果就是:master的数据id是1,3,5,7…, slave的数据id是2,4,6,8….
这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。(针对的是有自增长属性的字段)

本博主配置好的Centos6 安装mysql5.6 实现主从复制/主主复制环境虚拟机下载,链接:https://pan.baidu.com/s/1YYS13pSxidzNwjlC-PiGng
提取码:npea 下载好,用Vmware Workstaion打开,即可以正常使用

以下文章点击率最高

Loading…

发表评论