MySQL传统主从复制(第一弹)

0、引言html

MySQL主从复制的原理及搭建,故障分析mysql

 

1、MySQL主从同步的架构及原理sql

原理:安全

1)Slave链接到master,主从数据一致,开启同步,开始同步数据微信

2) 用户在主上写入数据,日志储存到binlog,master上IO thread读取主库binlog,而后把信息传递给从库上的IO thread网络

3)从库上的IO thread再把部分信息存储在master.info(存储链接位置信息)和relay log里(存储binlog信息)架构

4)从库上的SQL thread监测到relay log有更新,把更新的信息恢复到从库,而后把位置点信息记录下来函数

 

 

2、MySQL实现主从同步的几种方式及使用价值工具

 

一、MySQL主从复制的几种实现方式性能

l  基于binlog+position的传统复制

l  基于事务的GTID复制

l  多源复制

l  Group replication(5.7新特性)

l  半同步

 

二、MySQL主从复制的使用价值

l  利用从库作高可用

l  利用从库作读写分离

l  利用从库作升级

 

 

3、MySQL基于binlog三种模式下的复制

 

一、基于statement格式的复制

优势:binlog文件小,节省磁盘IO,只记录执行的SQL,方便阅读统计

缺点:对MySQL特殊函数不能复制,可能会致使主从不一致

 

二、基于row格式的复制

优势:详细记录每一行的修改信息(上下文信息),不会出现某些特定状况下函数、触发器、存储过程不执行的状况,方便flashback

缺点:binlog文件会更大,不能直接看到用户执行的SQL语句

 

三、基于mixed格式的复制

汇合使用row格式和statement格式,对于DDL记录会statement格式,对于table里的行操做记录为row格式。可是bug较多,不建议使用

 

 

4、MySQL的主从配置

 

一、创建用于同步的帐号(权限replication slave)

二、确保server-id全局惟一,并开启log-bin

三、备份主库,恢复到从库,确保主从数据一致

四、查看主库位置信息并配置链接,开启主从

 

Tips:

一、若是库表较多,可使用percona-tools工具集进行主从校验

二、也能够看slave status输出,了解同步情况

>show slave status\G;关注下面几个信息

Slave_IO_Running:从库I/O线程是否工做

Slave_SQL_Running:从库SQL线程是否工做

Seconds_Behind_Master:同步延迟时间,单位秒

Master_Log_File:主库上的I/O线程目前读到的binlog

Read_Master_Log_Pos:主库上的I/O线程目前读到的binlog的点

Relay_Master_Log_File:从库SQL线程目前执行到的主库binlog

Exec_Master_Log_Pos:从库SQL线程目前执行到的主库binlog的点

Relay_Log_File:从库SQL线程目前执行的relay log

Relay_Log_Pos:从库SQL线程目前执行的relay log的点

 

 

5、MySQL主从复制怎么保证数据一致性

 

在MySQL中,一次事务提交后,须要写undo、写redo、写binlog,写数据文件等等。在这个过程当中,可能在某个步骤发生crash,就有可能致使主从数据的不一致。那么如何保证复制数据一致性呢?

一、在master上修改配置,设置双一,保证每次提交后,日志落盘

innodb_flush_log_at_trx_commit = 1

sync_binlog = 1

 

二、在slave上修改配置,前两个选项是确保slave上和复制相关的元数据表也采用innoDB引擎,受到innoDB事务安全的保护,后一个选项是开启relay log自动修复机制,尽量避免数据丢失

master_info_repository = "TABLE"

relay_log_info_repository = "TABLE"

relay_log_recovery = 1

 

经过以上两个方式基本能够保证主从环境里数据一致性,若是仍是出现主从数据不一致,可经过pt-table-checksum 和 pt-table-sync 工具来进行数据的校验和修复。

 

 

6、MySQL主从复制常见问题及处理

MySQL同步中断常见是由两个方面引发:

I/O中断 :网络问题、主机宕机、受权改变

SQL中断:执行的SQL出错

 

一、主从复制过程当中,修改用于复制帐号的密码,致使主从不一样步

原来主从正常运行,后来修改用于复制帐号的密码,修改完后从新执行

change master to master_host='xxx.xxx.xxx.xxx', master_user='replication user', master_password='passwd', master_port=xxxx, master_log_file='mysql-binlog.000xxx', master_log_pos=xxx;

悲剧了,若是指定MASTER_HOST与MASTER_PORT参数,slave会认为master与以前的不是同一个(即使MASTER_HOST 与 MASTER_PORT所带的参数与以前相同),以前指定的master的binlog文件名及位置将再也不适用。

所以,更新密码后,只须要

change master to master_user='replication user', master_password='new passwd';

 

二、同步延时

seconds_behind_master>0

可能的缘由:

l  主库在大量导入数据

l  从库硬件跟不上,致使性能降低

l  从库读负载较大

l  RAID卡充放电

 

三、常见的error code及意义

1062错误:

主键冲突,通常能够跳过此类错误或者在配置文件中设置slave-skip-errors=1062

 

1032错误:

找不到这条记录,能够在从库手动插入数据。或者跳过这个错误,要视状况而定。

 

1050错误:

从库上表存在了,直接删除这个表便可

 

 

参考文档:

FAQ系列 | 如何保证主从复制数据一致性

http://imysql.com/2015/11/20/mysql-faq-how-make-sure-replicate-data-consistant.shtml

 

为了方便你们交流,本人开通了微信公众号,和QQ群291519319。喜欢技术的一块儿来交流吧

相关文章
相关标签/搜索