MySQL主从复制

  

MySQL主从复制
主从复制类型:
异步方式:一般的MySQL复制,主服务器只负责发送二进制日志,不检查从是否完成
半同步方式:在一堆从中,主只保证其中一个返回同步完成即可,如果超时,自动降级为异步
级联方式:主复制给其中一个从,这个从再复制给后面的一堆从,用于减轻主的负担
架构:
普通一主多从:
 MySQL主从复制”> <br/>带负载均衡的读写分离:<br/> <img src=

  

 MySQL主从复制

  

主从步骤:

  
      <李>主上面为每个奴隶开启一个线程转储李   <李>从上的IO线程和主上的线程转储连接,并发送二进制日志,在从上保存为真的日志   <李>从上的SQL线程从继电器日志中逐条读取并在本地执行
    主从配置:
    主上配置:李   <李>开启binlog李   <李>设置服务器id   <李>创建同步用户,并授予客户复制奴隶和复制权限
    从上配置:李   <李>开启中继日志   <李>设置与主不同的服务器id   <李>修改主MASTER_HOST=", MASTER_PORT=MASTER_USER=", MASTER_PASSWORD=? MASTER_LOG_FILE=" MASTER_LOG_POS=,   <李>开始奴隶io_thread;开始奴隶sql_thread;李   <李>配置skip-slave-start=1
    半同步配置:李   <李>安装主/从雷米插件:安装插件李   <李>启用主/从雷米插件   <李>设置超时时间即可,超出此时长后自动降级为异步方式
    同步过滤配置:
    主上可选配置(不推荐,因为会导致二进制事件丢失):   <李> binlog-do-db:二进制日志记录此库操作李   <李> binlog-ingire-db:二进制日志忽略此库操作
    从上可选(推荐,但会导致不必要的性能消耗):   <李> replicate-do-db:同步此db李   <李> replicate-ingire-db:忽略此db李   <李> replicate-do-table:同步此表   <李> replicate-ingire-table:忽略此表   <李> replicate-wild-do-table=结核%:支持正则,同步结核病开头的表   <李> replicate-wild-ingire-table=tb_:主持正则,忽略以结核开头后跟一个字符的表   
  

基于GTID及多线程复制:
1,基于GTID是一种安全复制方式,MySQL5.6版本后支持全局事务ID,在复制是根据全局事务ID进行复制,在复制时从会反馈自己的复制状态以及记录复制了哪些语句,其他从也知道另外从的复制位置等,在主从切换时更安全。
2,多线程复制是基于多个库的,每个库一个单线程,多个库可以使用多个线程。

  

一、什么是GTID(全局事务标识符):
MySQL-5.6.2开始支持,MySQL-5.6.10后完善,GTID分成两部分,一部分是服务的UUid, UUid保存在mysql数据目录的auto.cnf文件中,
这是一个非常重要的文件,不能删除,这一部分是不会变的。另外一部分就是事务身份证了,随着事务的增加,值一次递增,如下图
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +文件
| | |位置Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| binlog。000029 | 23556 | | | 724年afcc2 - 29 - d6 - 11 - e4 - 9902 - 000 - c290c0121:1 - 362 |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
GTID: 724 afcc2 - 29 - d6 - 11 - e4 - 9902 - 000 - c290c0121:1 - 362
UUID: 724 afcc2 - 29 - d6 - 11 - e4 - 9902 - 000 - c290c0121
transactionId: 1 - 362
在整个复制架构中GTID是不变化的,即使在多个连环主从中也不会变。
例如:ServerA——→ServerB上——在ServerC
GTID从在ServerA, ServerB, ServerC中都是一样的。

  

二,GTID的工作原理:
1,主人更新数据时,会在事务前产生GTID,一同记录到binlog日志中。
2,奴隶端的i/o线程将变更的binlog,写入到本地的中继日志中。

MySQL主从复制