使用 innodb 和 myisam 表混合备份 MySQL DB

使用 innodb 和 myisam 表混合备份 MySQL DB

我有一个大型数据库(几乎 1GB),它混合了 innodb 和 myisam 表。有人能提供备份时的一般技巧吗?或者更具体地说,我应该向 mysqldump 发送哪些命令。我知道我应该锁定 myisam 表,并且锁定 innodb 的单个事务,但如果我同时拥有这两个表,该怎么办?此外,当我在生产数据库上锁定整个(非常大的)表时,实际上会发生什么。

答案1

有趣的是,MySQL 客户端工具无法同时处理这两种存储引擎。不过,不要绝望。

实际上,通过 mysqldump 对数据进行快照确实有一种成功的方法:

步骤1)mysql -h...-u...-p...-A -e“FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)”&

在此 MySQL 会话中,这将锁定所有表、MyISAM、InnoDB 和其他表。整个数据库处于只读状态

步骤 2)大约 20-30 秒后,执行 SLEEP 命令捕获进程 ID,如下所示:

SLEEPID =`mysql -h ... -u ... -p ... -A -e“显示进程列表”| grep“SLEEP(86400)”| awk'{print $ 1}'`

步骤3)执行mysqldump

mysqldump -h...-u...-p...--single-transaction--routines--triggers--all-databases>MySQLData.sql

步骤4)执行SLEEP命令终止进程:

mysql -h...-u...-p...-A -e“杀死${SLEEPID}”

相信我,每次都能拍出完美的快照。

试一试 !!!

PS 公平地说,你可能还想看看其他工具

工具 1)CDP R1Soft(使用 MySQL 模块)

工具 2)Percona 的 XtraBackup

答案2

您可以将 Percona 的 XtraBackup 与 innobackupex 一起使用,它将为您完成工作。

相关内容