我从engine yard下载了我的数据库的备份,该文件位于sql.gz文件中。因为我的数据库中有一个表太大了,所以我想在本地系统中恢复它的时候使用skip。
我使用gunzip < file_name.sql.gz | mysql -u user_name -p password database name命令恢复备份。
发布于 2015-05-29 22:35:47
到目前为止,您可能已经确定了一个解决方案,但我认为我需要补充一些见解。MySQL的还原操作当前不提供从还原操作中排除单个表的简单方法,但您可以考虑以下几个选项:
gawk在创建该表时更改该表的引擎定义。这将类似于: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引擎。这样做的缺点是您仍在下载和解析更大的备份。
中更容易记住
到目前为止,
mysqldump的--single-transaction选项,或者非InnoDB表的一致性对您的本地环境最不重要。下面的代码应该可以解决这个问题:mysqldump -u user_name -p --single-transaction --ignore-table=[table_to_be_skipped] database name | gzip > file_name.sql.gz
这有一个明显的好处,即不需要任何复杂的解析或更大的文件下载。
发布于 2015-02-27 22:36:45
不确定这是否会有帮助,但我们有处理database backups的文档--另外,你可能想通过工单或在IRC freenode上的#engineyard中与支持人员交谈。
https://stackoverflow.com/questions/28767306
复制相似问题