我有一个大型数据库(几乎 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 一起使用,它将为您完成工作。