我有一个大型的数据库(几乎1GB),它有一个innodb和myisam表的混合物。 有没有人有任何一般的技巧备份或更具体的我应该发送到mysqldump的命令。 我看到我应该lockingmyisam表,并为innodb单个交易,但如果我有两个。 另外,当我locking生产数据库上的整个(非常大的)表时,实际发生了什么。
有趣的是MySQL客户端工具不能同时处理两个存储引擎。 但是,不要绝望。
真的有一个成功的方法来通过mysqldump快照数据:
步骤1)mysql -h … -u … -p … -A -e“带读锁的刷新表;select睡眠(86400)”&
在这个MySQL会话中,这将locking所有的表,MyISAM,InnoDB等等。 整个数据库处于只读状态
步骤2)大约20-30秒后,捕获执行SLEEP命令的进程ID,如下所示:
SLEEPID =`mysql -h … -u … -p … -A -e“SHOW PROCESSLIST”| grep“SLEEP(86400)”| awk'{print $ 1}'`
步骤3)执行mysqldump
mysqldump -h … -u … -p … -single-transaction – 例程–triggers –all-databases> MySQLData.sql
步骤4)杀死进程执行SLEEP命令:
mysql -h … -u … -p … -A -e“KILL $ {SLEEPID}”
相信我,每次都有完美的快照。
试一试 !!!
PS公平地说,还有其他的工具,你可能想看看
工具1)CDP R1Soft(使用MySQL模块)
工具2)来自Percona的XtraBackup
你可以用innobackupex使用Percona的XtraBackup,它会为你做的工作。