我使用了--single-transaction标志(我读到了应该用于InnoDB的某个地方)导出了一个带有InnoDB表和外键关系的数据库的mysqldump。没问题。
但是当尝试将该转储导入另一个现有数据库(相同的数据库,不同的服务器)时,我在尝试删除表时会遇到各种错误,因为它会破坏InnoDB关系。
我还读到我应该使用foreign_key_checks = 0来避免这种情况,但这是一个服务器变量,不是转储过程的一部分。所以我想弄清楚如何自动化所有这些,因为我有一个备份数据库的脚本,当我们所有的都是MyISAM表时它正在工作:
mysqldump -u user -p'password' - single-transaction -q database | ssh user@backup.com mysql -u user -p'password'database
感谢。
答案 0 :(得分:3)
您可以转储到文件中,在该文件中添加所需的SET FOREIGN_KEY_CHECKS=0;
,然后将文件提供给mysql
。
答案 1 :(得分:2)
事实证明,mysqldump文件非常智能,可以检测到它们是InnoDB表,并将相应的注释放在文件的顶部。我的问题是,当我通过PHPMyAdmin导出时,它没有在文件上放置正确的注释,因此导致所有这些麻烦。
感谢您的回复。
答案 2 :(得分:1)
还可以在还原时添加到mysql命令行而不编辑原始文件。这非常有用,因为mysql备份会变得很大,编辑GB +文件需要花费大量的CPU时间,而不是将其添加到命令行,
mysql -D YourDatabaseName -u YourUserName -p --init-command="set @@foreign_key_checks=0"<YourBackupDumpFile.sql