两个数据库同步备份

我有一个系统需要两个数据库才能工作。 我需要一个脚本来备份两个数据库在给定的时间点。 我需要数据库同步,所以我需要确保备份不会允许其中一个数据库的更改备份时。

mysqldump db1 db2 > db1_db2.sql 

上面的代码是否适合这个。 它会locking两个数据库的备份时间,所以我会得到同步备份? 什么是实现这一目标的正确方法? 我将如何做到这一点,但每个数据库的分离文件?

编辑:

大多数表使用InnoDB引擎,但使用归档引擎的重要表less有几个。

你最好的select是以下几点

 mysqldump --single-transaction --databases db1 db2 > db1_db2.sql 

选项–single-transaction将为转储中的所有数据创build一个时间点窗口。 唯一的限制是你不执行任何DDL

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE
  • 请参阅row locking within ACID transaction innodb DBA StackExchange row locking within ACID transaction innodb ,查看可能间歇性地损害事务的所有语句。

只要你在mysqldump的持续时间内不执行任何这些操作,从mysqldump开始的那一刻起,db1和db2将是一个完美的快照。

你的非InnoDB表应该是没问题的,只要你不做任何事情:没有DDL,没有插入,没有更新,没有删除。

更新2014-06-26 19:43 EDT

你问

单事务和全locking表是相互排斥的吗? 其中一个是默认的\默认?

从MySQL文档 – 单一事务

–single-transaction选项和–lock-tables选项是相互排斥的,因为LOCK TABLES会导致任何挂起的事务被隐式提交。

是的,他们是互相排斥的。

从MySQL文档–lock-all-tables

locking所有数据库的所有表。 这是通过获取整个转储期间的全局读锁来实现的。 该选项自动closures – 单事务和 – 锁表。

因此, lock-all-tables将禁用 – --single-transaction

CAVEAT:请记住, FLUSH TABLES WITH READ LOCK; 而所有其他的强制(全有或全无)locking机制不会完全阻止InnoDB写入系统表空间。 我之前在DBA StackExchange中写过

下面是一个InnoDB的地图,供您查看InnoDB的其他移动部分:

InnoDB架构

请阅读Innodb Tables(MySQL性能博客)如何使用READ LOCK的FLUSH TAB与 InnoDB表(InnoDB Tables)locking所有表对InnoDB的其他不良影响。

查看这个URL来了解MySQL备份的概述。

http://www.iheavy.com/2012/08/09/5-things-you-overlooked-with-mysql-dumps/

你需要添加下面的参数来locking这两个数据库。

–lock-all-tables,-x

“locking所有数据库中的所有表,这是通过在整个转储期间获取全局读取锁来实现的”。

你的命令应该如下所示。

mysqldump -x –databases db1 db2

您也可以考虑将您的MySQL数据库复制到从服务器,并从从服务器进行备份。