复制概述

mysql内建的复制功能是构建大规模、高性能应用的基础。复制解决的基本问题是让一台服务器的数据与其他的服务器同步,以主备的方式构建数据系统。

常见用途

  • 数据分布:在不同的地理位置分布数据,进行备份。
  • 负载均衡:将读操作分布到多个服务器上(使用dns轮询或lvs)
  • 备份:是传统备份的补充,不能完全替代备份
  • 故障切换:避免单点失效
  • 升级测试:使用一个更高版本的mysql作为备库作为主库的升级测试

工作原理

  1. 在主库上把更改记录到二进制日志(Bin Log)
  2. 备库上将主库的日志复制到自己的中继日志(Relay Log)上。
  3. 备库读取中继日志的事件,写入数据

配置复制样例

1) 配置主库和备库

vi /etc/my.cnf
log_bin = mysql-bin #启动二进制日志
server_id = 128 #服务器id,一般取ip的最后一段

2)重启mysql

service mysql restart

3)主库上创建复制账号

mysql>GRANT REPLICATION SLAVE ON *.* to 'replication'@'%' identified by '123456';

4) 主库上查询master状态

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000015 |      107 |              |                  |
+------------------+----------+--------------+------------------+

注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

5)备库配置slave

mysql> CHANGE MASTER TO-> MASTER_HOST='192.168.75.128',-> MASTER_USER='replication',-> MASTER_PASSWORD='123456',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='mysql-bin.000015',-> MASTER_LOG_POS=107,-> MASTER_CONNECT_RETRY=10;//启动复制功能
mysql>  start slave;

6) 查看备服务器复制功能状态

mysql> show slave status\G
************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.75.128Master_User: replicationMaster_Port: 3306Connect_Retry: 10Master_Log_File: Read_Master_Log_Pos: 4Relay_Log_File: t1-relay-bin.000015Relay_Log_Pos: 4Relay_Master_Log_File: Slave_IO_Running: Yes  //此状态必须YESSlave_SQL_Running: Yes  //此状态必须YES.............

备服务器中途复制

前面的设置是主备服务器都刚创建,并且知道当前主库的起始日志,实际工作中的场景大多是已经运行了一段时间的主库,然后用一台新安装的备库与之同步。下面是备服务器中途复制的常用方法:

  • 冷备份:关闭主库,把数据复制到备库。重启主库后在备库执行 CHANGE MASTER TO指向主库新的日志文件
  • 使用mysqldump:如果只包含InnoDB表,可以使用mysqldump传输复制数据,再指定二进制日志坐标 $ mysqldump --single-transaction --all-databases --master-data=1 --host=server1 | mysql --host=server2
  • 使用Percona Xtabackup开源的热备份工具

复制的工作模式

  • 基于语句的复制:备库记录和执行主库运行过的SQL
  • 基于行的复制:备库复制主库每一行数据(推荐)

常用的主备架构

  • 一主多备:在少量写大量读时,该配置十分有效,可以将读操作分摊多个备库上,直到主备之间的带宽成为瓶颈。
  • 双主复制:包含两台服务器,每一个都配置成对方的主库和备库。使用场景是两个不同的应用服务器都需要连接一个可写的数据库。该配置主要有2个问题,两服务器同时修改一行数据和AUTO_INCREMENT问题。
  • 双主复制的被动模式:双主复制的变体,主要区别是一台服务器是只读的被动服务器。由于是有一台只读服务器,所以没有上面的问题,而且该模式下服务器的配置是一样的,所以故障转移和故障恢复很容易解决。

复制的管理和维护

1)测量备库延迟

SHOW SLAVE STATUS输出的secondsbehindmaster理论上显示了备库的延时。

2)确定主备是都一致

  • mysql内置工具CHECKSUM TABLE,当复制正在进行时,该方法不可行。
  • pt-talble-checksum 比较好的开源工具。

3)备库从新同步备库数据

备库忽略了一些数据或人为的修改备库的数据时就需要从新同步备库,方法有: - 关闭备库,重新从主库复制一份数据,简单但数据量大时不推荐 - 使用mysqldump转储受影响的数据,当主库数据没有发生改变时,该方法很好,但只同步一百万行数据中的一小部分时效率不高。 - 开源工具pt-table-sync,比较主备之间不同的数据从而进行同步,效率很高

4)数据损坏解决方案

  • 主库意外关闭:备库从主库一个新的日志开始复制数据,再用pt-talle-checksum重新同步主备。
  • 备库意外关闭:正常情况备库重启会去mastter.info寻找上次复制的位置,如果该文件损坏或文件本身数据是错误的,备库可能会重新执行一些二进制日志事件,造成如惟一索引这样的错误,解决方案使用开源工具pt-slave-restart

转载于:https://www.cnblogs.com/huifukejian/p/4781923.html

mysql主从复制浅析(一)相关推荐

  1. 浅析mysql主从复制

    MySQL主从复制理解 mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B:主从复制就是B跟着A学,A做什么,B就做什么.那么B怎么同步A的动作呢?现在A有一个日志功 ...

  2. 基于GTID模式MySQL主从复制

    基于GTID模式MySQL主从复制 GTID复制原理: 基于GTID的复制是MySQL 5.6后新增的复制方式 GTID (global transaction identifier) 即全局事务ID ...

  3. mysql 主从复制 性能_zabbix监控mysql各项性能,主从复制

    ###################################################### 监控mysql(默认监控模板不能用,再agentd.conf开启自定义key,自己编写脚本 ...

  4. mysql主从复制(master-slave)_mysql主从复制------Master-Slave搭建及注意事项

    前言 关于mysql主从复制的原理实际上是很通俗易懂的,可是,在实际的搭建这个结构的时候,仍是会遇到不一样的状况的.因而下面介绍的是搭建Master-Slave的操做及注意事项,本文不含数据库的调优参 ...

  5. 【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?

    今天,一名读者反馈说:自己出去面试,被面试官一顿虐啊!为什么呢?因为这名读者面试的是某大厂的研发工程师,偏技术型的.所以,在面试过程中,面试官比较偏向于问技术型的问题.不过,技术终归还是要服务于业务的 ...

  6. mysql主从复制 跳过表_mysql主从复制-从库跳过异常日志点

    mysql主从复制-从库跳过异常日志点 来源:互联网 作者:佚名 时间:2015-03-08 08:39 mysql主从复制--从库跳过错误日志点 (本文转载,特此声明) 在MYSQL进行Replic ...

  7. mysql 主从复制

    mysql 主从 1 更改主数据库配置文件 cat > /etc/my.cnf <<EOF [mysqld] server-id=1 log-bin EOF 2 重启mysql /e ...

  8. mysql主从复制监控shell脚本

    ########本脚本应用在生产环境中,是运用mysql主从的基础上######## vi mysqlm-s.sh #!/bin/bash ip=`ifconfig eth0|sed -n 2p|aw ...

  9. mysql主从复制实战

    一,mysql主从复制的原理 mysql支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新. ...

  10. 老男孩教育每日一题-2017年4月28日- MySQL主从复制常见故障及解决方法?

    MySQL主从复制常见故障及解决方法? 1.1.1故障1:从库数据与主库冲突 show slave status; 报错:且show slave status\G Slave_I/O_Running: ...

最新文章

  1. ios 构建版本一直在处理中_iOS关于审核提交构建版本不显示问题集锦
  2. win32 api setwindowlong 第2个参数_第 6 篇:分页接口
  3. BZOJ1857 Scoi2010 传送带 【三分】
  4. 1.两个VLAN通过两个交换机与路由器的通信
  5. POJ 3041 Asteroids 二分图匹配
  6. [uoj24]缩紧优化
  7. 工作总结19:文档参考
  8. u盘病毒之tel.xls.exe
  9. mysql 归类函数_mysql常用的函数归类
  10. Queue和BlockingQueue的使用以及使用BlockingQueue实现生产者-消费者
  11. java进账和转账需要锁吗,Spring与Java中的锁
  12. R计算两列数据的相关系数_【R语言】相关性分析、相关系数的显著性检验及可视化...
  13. 网络编程释疑之:TCP半开连接的处理(好)
  14. 华为2019秋招笔试题2
  15. 华为交换机关闭网口_华为交换机关闭端口号
  16. 【经验篇】记如何排查Linux服务器CPU使用率过高的问题
  17. 美国MAK Technoligies介绍
  18. 消防水监测系统解决方案
  19. 如何删除word空白页技巧汇总
  20. matlab实现牛顿下山法(下山过程)

热门文章

  1. CMDB数据库设计-四种方案任你选
  2. 大有可为,忍不住再说下 !
  3. 程序员常用的3大Web安全漏洞防御解决方案:XSS、CSRF及SQL注入(图文详解)
  4. mysql基础之查询缓存、存储引擎
  5. linux服务之NTP及chrony时间同步
  6. Java中单例设计模式总结
  7. gitserver提交代码的总结
  8. SQL Server2012数据库的备份和还原
  9. OpenCV Show Image cvShowImage() 使用方法
  10. Jquery 1.4.2 animate的BUG