1.1 主从复制基础概念
在了解主从复制之前必须要了解的就是数据库的二进制日志(binlog),主从复制架构大多基于二进制日志进行,二进制日志相关信息参考:http://www.cnblogs.com/clsn/p/8087678.html#_label6
1.1.1 二进制日志管理说明
二进制日志在哪?如何设置位置和命名?
在my.cnf文件中使用 log-bin = 指定;命名规则为 mysql-bin.000000 (后为6位数字)
二进制日志位置
mysql> show variables like '%log_bin%' ; +---------------------------------+-----------------------------------------+ | Variable_name | Value | +---------------------------------+-----------------------------------------+ | log_bin | ON | | log_bin_basename | /application/mysql/data/mysql-bin | | log_bin_index | /application/mysql/data/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+-----------------------------------------+ 6 rows in set (0.06 sec)
日志命名
mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 2979 | | mysql-bin.000002 | 120 | +------------------+-----------+ 2 rows in set (0.00 sec)
二进制日志记录什么?
二进制日志中记录的是一个个完成的事件
二进制日志格式是怎样的?
推荐使用row格式
查看当前使用的日志 格式。
mysql> show variables like '%format%'; +--------------------------+-------------------+ | Variable_name | Value | +--------------------------+-------------------+ | binlog_format | ROW | | date_format | %Y-%m-%d | | datetime_format | %Y-%m-%d %H:%i:%s | | default_week_format | 0 | | innodb_file_format | Antelope | | innodb_file_format_check | ON | | innodb_file_format_max | Antelope | | time_format | %H:%i:%s | +--------------------------+-------------------+ 8 rows in set (0.00 sec)
二进制日志如何滚动?
每次重启都会刷新日志,也可以通过命令进行刷新 reset master;
二进制日志用来干嘛?
备份恢复
起始点的备份恢复
二进制日志的操作命令?
查看都有哪些二进制日志
mysql> show binary logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 2979 | | mysql-bin.000002 | 167 | | mysql-bin.000003 | 120 | +------------------+-----------+ 3 rows in set (0.00 sec)
查看当前使用的二进制日志文件
mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000003 | 120 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
binlog相关详情参照:http://www.cnblogs.com/clsn/p/8087678.html#_label6
1.1.2 mysql传统备份方式和缺陷
1、二进制日志备份
2、mysqldump
a)必须有数据库服务器完成逻辑工作,需要更多地cpu周期
b)逻辑备份还原速度慢:需要MySQL加载和解释语句、转化存储格式、重建引擎
3、xtrabackup
a)文件大
b)不总是可以跨平台、操作系统和MySQL版本
1.1.3 MySQL主从复制能为我们做什么
高可用、辅助备份、分担负载
1.2 MySQL主从复制介绍
1.2.1 复制技术
作用
1.保证数据安全(异机实时备份)
2.保证服务持续运行(宕机接管)
主从复制实现基本原理
1.自带功能,复制是 MySQL 的一项功能,允许服务器将更改从一个实例复制到另一个实例。
2.主服务器将所有数据和结构更改记录到二进制日志中。
3.从属服务器从主服务器请求该二进制日志并在本地应用其内容。即通过把主库的binlog传送到从库,从新解析应用到从库。
1.2.2 复制架构
mysql复制的应用常见场景:
应用场景1:从服务器作为主服务器的实时数据备份
应用场景2:主从服务器实现读写分离,从服务器实现负载均衡
应用场景3:把多个从服务器根据业务重要性进行拆分访问
1.2.2.1 主–从复制
传统的 MySQL 复制提供了一种简单的主–从复制方法。 有一个主,以及一个或多个从。 主节点执行和提交事务,然后将它们(异步地)发送到从节点,以重新执行(在基于语句的复制中)或应用(在基于行的复制中)。 这是一个 shared-nothing 的系统,默认情况下所有 server 成员都有一个完整的数据副本。
(图)MySQL 异步复制
还有一个半同步复制,它在协议中添加了一个同步步骤。 这意味着主节点在提交时需要等待从节点确认它已经接收到事务。只有这样,主节点才能继续提交操作。
(图)MySQL 异步复制
在上面的两个图片中,可以看到传统异步 MySQL 复制协议(以及半同步)的图形展示。 蓝色箭头表示在不同 server 之间或者 server 与 client 应用之间的信息交互。
1.2.3 MySQL主从复制原理介绍
复制过程:
1、开启binlog日志,通过把主库的binlog传送到从库,从新解析应用到从库。
2、复制需要3个线程(dump、io、sql)完成,5.6从库多个sql。
3、复制是异步的过程。主从复制是异步的逻辑的SQL语句级的复制。
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。