我从发动机码中备份了我的数据库,该数据库已在sql.gz
文件中下载。由于我的数据库中的一个表太大,所以我想在我的本地系统中恢复它时skip
。
我使用gunzip < file_name.sql.gz | mysql -u user_name -p password database name
命令恢复备份。
答案 0 :(得分:1)
您可能已经为此确定了解决方案,但我想我会添加一些见解。 MySQL的恢复操作目前不提供从恢复操作中排除单个表的简单方法,但您可以考虑以下几个选项:
如果您的本地MySQL服务器提供“Blackhole”引擎,您可以使用gawk
在创建该表时更改该表的ENGINE定义。这将是:
gunzip < file_name.sql.gz | gawk -v RS='' '{print gensub(/(CREATE TABLE .[table_to_be_skipped].*) ENGINE=InnoDB/, "\\1 ENGINE=Blackhole", 1)}' | mysql -u user_name -p password database name
。
这指示数据库在重新加载期间仅通过针对此表的行插入。加载完成后,您可以使用alter table [table_to_be_skipped] engine=innodb;
将其修改回InnoDB引擎。这样做的缺点是您仍在下载并通过更大的备份进行解析。
到目前为止,解决此问题的最佳方法是在源数据库上执行忽略此表的手动备份。如果可能,请使用副本,如果使用所有InnoDB表,则使用--single-transaction
选项mysqldump
,或者非InnoDB表的一致性对本地环境的重要性最小。以下应该可以解决问题:
mysqldump -u user_name -p --single-transaction --ignore-table=[table_to_be_skipped] database name | gzip > file_name.sql.gz
这样做的好处是不需要任何复杂的解析或更大的文件下载。
答案 1 :(得分:0)
不确定这是否有帮助,但我们有可用于处理database backups的文档 - 此外,您可能希望通过票证或#IRineyard在IRC freenode上与支持人员交谈。