前言

数据库实时备份的需求很常见,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

剑 http://www.cnblogs.com/wu-jian

工作原理

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中查看对应线程的运行情况

吴剑 http://www.cnblogs.com/wu-jian

配置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;

吴剑 http://www.cnblogs.com/wu-jian

Master的binlog_format 参数

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

Row

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

Statement

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

Mixed

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

吴剑 http://www.cnblogs.com/wu-jian

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.%

转载必需注明出处:http://www.cnblogs.com/wu-jian

MySQL主从复制备份的更多相关文章

  1. mysql数据库备份,主从复制及半同步复制

    1.使用mysqldump备份数据库并通过备份及二进制日志还原数据(备份完后再写入数据,然后再删库) mysqldump -A --single-transaction -F --master-dat ...

  2. MySQL主从复制(Master-Slave)实践

    MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...

  3. 2.快速部署MySQL主从复制

      1.快速部署MySQL主从复制 [root@mysql ~]# mysql -uroot -p123456 -S /data/3307/mysql.sock -e "show slave ...

  4. MySQL 主从复制与读写分离概念及架构分析

    1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...

  5. MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现

    一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  6. MySQL主从复制

    Mysql主从复制介绍 MySQL支持单向.双向.链式级联.实时.异步复制.在复制过程中,一台服务器充当服务器(Master),而一个或多个其它的服务器充当从服务器(Slave). 复制可以是单向:M ...

  7. mysql主从复制实现数据库同步

    mysql主从复制相信已经用得很多了,但是由于工作原因一直没怎么用过.趁着这段时间相对空闲,也就自己实现一遍.尽管互联网上已有大把类似的文章,但是自身实现的仍然值得记录. 环境: 主服务器:cento ...

  8. mysql主从复制+读写分离 菜鸟入门

    MYsql主从复制 1.mysql主从复制原理: Master将数据变化记录到二进制日志中[binary log] Slave将master的二进制日志[binary log]拷贝到自己的中继日志[r ...

  9. mysql学习(3)-linux下mysql主从复制

    前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

随机推荐

  1. BTree,B-Tree,B+Tree,B*Tree的数据结构

    B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B ...

  2. Python - Django - ORM 实例(二)

    在 app01/models.py 中添加 Book 类对象表 from django.db import models # Create your models here. # 出版社 class ...

  3. re模块 ,random模块

    # 在python中使用正则表达式 # 转义符 : 在正则中的转义符 \ 在python中的转义符# 正则表达式中的转义 :# '\(' 表示匹配小括号# [()+*?/$.] 在字符组中一些特殊的字 ...

  4. Data Provider 中没有.net framework Data provider for Mysql 的解决方法

    近来做的一个项目中,数据库用的是 MySql, 而在项目使用 Entity Data Model 来做数据服务层,可是在项目中添加 Data Entty Model 时,一般我们都会选择从数据库中直接 ...

  5. filzilla

    之前找了一套支援 SFTP (FTP over SSH) 的 FTP Server 就是為了解決 Port 不夠用的問題,直到最近才發現我們常用的 FileZilla Server 原來就有支援 FT ...

  6. 1.Spring AOP (上)

    转自:https://blog.csdn.net/yusheng8711/article/details/21622773 Spring有两大核心,IOC和AOP.IOC在java web项目中无时无 ...

  7. S+ hidden tray with window start

    官方论坛上有个帖子给出了答案: I forgot that this is supported in the code, but it requires a little editing of the ...

  8. How to Pronounce Ending T Clusters + Homophones — Baking!

    How to Pronounce Ending T Clusters + Homophones — Baking! Share Tweet Share Tagged With: ARE Reducti ...

  9. TEXT 3 Food firms and fat-fighters

    TEXT 3 Food firms and fat-fighters 食品公司与减肥斗士 Feb 9th 2006 From The Economist Global Agenda Five lead ...

  10. asp.net core in centos

    CentOS 7部署ASP.NET Core应用程序   看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不 ...