MySQL数据库的实时备份知识点详解

 更新时间:2018年08月04日 17:12:31   作者:吴剑  
本篇文章给大家分享了关于MySQL数据库的实时备份知识点内容,有需要的朋友们可以参考下。

前言

数据库实时备份的需求很常见,MySQL本身提供了 Replication 机制,摘译官方介绍如下:

MySQL Replication 可以将一个主数据库中的数据同步到一个或多个从数据库中。并且这个同步过程默认以异步方式工作,不需要保持主从数据库的实时连接(即允许连接中断)。同时允许自定义配置需同步的数据库及数据表。

MySQL Replication 的优点及应用场景如下:

1、通过 MySQL Replication 实现负载均衡与读写分离(主数据库仅更新,从数据库仅读取),提升数据库性能。

2、通过 MySQL Replication 实现数据的实时备份,保证数据安全。

3、通过 MySQL Replication 实现数据的离线分析(主数据库生成数据,从数据库分析计算不影响主数据库性能)。

4、数据分发。

MySQL Replication完整的官方文档请参阅:https://dev.mysql.com/doc/refman/5.7/en/replication.html

工作原理

1111

1、Master中的所有数据库变更事件写入Binary Log文件

2、当在Slave中执行“SLAVE START”命令时,开启Slave I/O Thread,并连接Master

3、Master侦测到Slave I/O Thread的连接,开启Log Jump Thread进行响应

4、Master Binary Log经Master Log Jump Thread和Slave I/O Thread传输至Slave Relay Log

5、Slave SQL Thread将Relay Log还原至数据,同步完成

注:可使用“SHOW PROCESSLIST”命令在Master和Slave中查看对应线程的运行情况

配置Master

开启Binary Log并设置ServerID,ServerID必须唯一,取值范围1至232-1

[mysqld]
# 开启Binary Log
log-bin=mysql-bin
# 设置全局ID
server-id=1

# 指定需同步的数据库(因为数据库名称可能包含逗号,因此多个数据库必须重复配置多次而不能以逗号分隔)
binlog-do-db=database_name
# 指定禁止同步的数据库
binlog-ignore-db=database_name
# 指定Binary Log格式
binlog_format=MIXED

创建同步帐号

因为每个Slave均需要使用帐号密码连接至主数据库,所以在主数据库上必须提供帐号。建议使用一个独立帐号,仅授权数据同步权限。

CREATE USER 'repl'@'%.example.com' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.example.com';

获取Binary Log信息

Slave启动I/O Thread时需要传入Binary Log部分信息,因此需要获取一下Binary Log信息:

SHOW MASTER STATUS;

使用“SHOW MASTER STATUS”命令获取Binary Log信息,并记录File和Position字段值。

同步前保证Master与Slave的数据一致

在Slave启动I/O Thread前,需确保Master与Slave的数据一致,因此先对Master进行锁定(防止数据变更),手动同步并确保数据一致后再解锁。

FLUSH TABLES WITH READ LOCK;

手动数据同步相关操作略...

UNLOCK TABLES;

配置Slave

设置ServerID,可不必开启BinLog:

[mysqld]
# 设置全局ID
server-id=2

# 指定同步的数据库
replicate-do-db=database_name
# 指定禁止同步的数据库
replicate_ignore_db=database_name

设置Master信息,执行如下命令:

mysql> CHANGE MASTER TO
  ->   MASTER_HOST='master_host_name',
  ->   MASTER_PORT='master_host_port',
  ->   MASTER_USER='replication_user_name',
  ->   MASTER_PASSWORD='replication_password',
  ->   MASTER_LOG_FILE='recorded_log_file_name',
  ->   MASTER_LOG_POS=recorded_log_position;

启动I/O Thread

START SLAVE;

查看同步状态:

SHOW SLAVE STATUS;

Master的binlog_format 参数

binlog_format用于配置Binary Log的格式,支持如下三种类型:

Row

按数据行的变化进行记录,该模式与SQL语句、存储过程、函数、触发器等无关,它只关心每一行的数据是否发生变化,如变化则记录,因此Row模式是准确度最高的。但它的缺点是某些情况下会产生大量内容而导致效率下降,比如表结构发生变更时。

Statement

按SQL语句进行记录,很明显这个解决了Row模式的短板,但问题是准确度不够高,因为SQL语句可以非常复杂并且容易出现意外情况。

Mixed

Row与Statement混合模式,由MySQL自动决定什么时候使用Row,什么时候使用Statement,这也是默认模式。

replicate-do-db注意事项

当在Slave中使用replicate-do-db和replicate-ignore-db配置项时,需特别注意,跨数据库的SQL语句将不会被同步,如:

replicate-do-db=a
use b;
update a.some_table set some_field = 'some value';

解决方案是使用replicate_wild_do_table和replicate_wild_ignore_table,如:

replicate_wild_do_table=database_name.%
replicate_wild_ignore_table=database_name.%

相关文章

  • 细数MySQL中SQL语句的分类

    细数MySQL中SQL语句的分类

    下面小编就为大家带来一篇细数MySQL中SQL语句的分类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 一文搞懂MySQL持久化和回滚的原理

    一文搞懂MySQL持久化和回滚的原理

    本文主要介绍了MySQL持久化和回滚的原理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • mysql root密码的重设方法(亲测可用)

    mysql root密码的重设方法(亲测可用)

    这篇文章主要介绍了如何重设mysql root密码,需要的朋友可以参考下
    2014-02-02
  • mysql快速获得库中无主键的表实例代码

    mysql快速获得库中无主键的表实例代码

    这篇文章主要给大家介绍了关于mysql如何快速获得库中无主键的表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • MySQL的中文UTF8乱码问题

    MySQL的中文UTF8乱码问题

    MySQL从4.x版本开始支持Unicode,3.x只有latin1编码。刚工作的时候就开始用MySQL了,用的php存取,网页xxx.php是gb2312的编码,存进去的数据用php取出来是中文,用phpMyAdmin执行select、update、dump都是中文,没有乱码问题。
    2010-05-05
  • MySQL中UPDATE语句使用的实例教程

    MySQL中UPDATE语句使用的实例教程

    这篇文章主要介绍了MySQL中UPDATE语句使用的实例教程,包括UPDATE的使用中所容易引起的性能问题的分析,需要的朋友可以参考下
    2015-11-11
  • MySQL8.0升级的踩坑历险记

    MySQL8.0升级的踩坑历险记

    听说mysql8的性能提升了很多,对于我这种喜欢把所有软件升级到最新版的人来说,二话不说直接升级,这篇文章主要给大家介绍了关于MySQL8.0升级踩坑的相关资料,需要的朋友可以参考下
    2021-10-10
  • MySQL 5.5.x my.cnf参数配置优化详解

    MySQL 5.5.x my.cnf参数配置优化详解

    今天正好看到一篇有关my.cnf优化的总结,虽然还没经过我自己的实践检验,但从文章内容来说已经写的很详细了(当然,事实上下面这篇文章很多地方只是翻译了my.cnf原始配置文件的说明,呵呵),所以特地转载收藏一下
    2015-08-08
  • RedHat下MySQL的基本使用方法分享

    RedHat下MySQL的基本使用方法分享

    RedHat 下MySQL安装,简单设置以用基本的使用方法,需要的朋友可以参考下。
    2011-08-08
  • MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程

    这篇文章主要介绍了MySQL表LEFT JOIN左连接与RIGHT JOIN右连接的实例教程,表连接操作是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-12-12

最新评论