我从引擎场备份了我的数据库,该备份在sql.gz
文件中下载。由于我的数据库中的一张表太大,所以我想skip
在本地系统中恢复它时使用它。
我使用gunzip < file_name.sql.gz | mysql -u user_name -p password database name
命令来恢复备份。
我从引擎场备份了我的数据库,该备份在sql.gz
文件中下载。由于我的数据库中的一张表太大,所以我想skip
在本地系统中恢复它时使用它。
我使用gunzip < file_name.sql.gz | mysql -u user_name -p password database name
命令来恢复备份。
您现在可能已经确定了一个解决方案,但我想我会添加一些见解。MySQL 的恢复操作目前不提供从恢复操作中排除单个表的简单方法,但您可以考虑以下几个选项:
如果您的本地 MySQL 服务器提供“黑洞”引擎,您可以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
.
这指示数据库在重新加载期间仅通过针对该表的行插入。加载完成后,您可以将其修改回 InnoDB 引擎,使用alter table [table_to_be_skipped] engine=innodb;
. 这样做的缺点是您仍在通过更大的备份下载和解析。
到目前为止,解决此问题的最佳选择是简单地对忽略此表的源数据库进行手动备份。如果可能,请使用副本,如果您正在使用所有 InnoDB 表或非 InnoDB 表的一致性对您的本地环境的重要性最低,请使用该--single-transaction
选项。mysqldump
以下应该可以解决问题:
mysqldump -u user_name -p --single-transaction --ignore-table=[table_to_be_skipped] database name | gzip > file_name.sql.gz
这有一个明显的好处,即不需要任何复杂的解析或更大的文件下载。
不确定这是否会有所帮助,但我们有可用于处理数据库备份的文档- 此外,您可能希望通过工单或在 IRC freenode 上的#engineyard 中与支持人员交谈。