[聚合文章] MySQL Replication 主从复制全方位解决方案

MySQL 2017-12-24 19 阅读

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语句级的复制。

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。