[英]Unable to restore from mysql database dump
我已经转储了我的数据库,其中一个表非常大(大约 400 万条记录)并且具有大量索引(一个全文索引以及一个主键和 3 个唯一索引)。 当我尝试恢复此转储时,当它尝试执行启用键(ALTER table x ENABLE 键)的语句时,恢复挂起(它现在已经运行了五天)。
非常欢迎有关如何恢复此转储的任何建议。 有问题的表是一个 myisam 表。
这是 showprocesslist 的输出
mysql> show processlist;
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
| 2350 | rdsadmin | localhost:52508 | NULL | Sleep | 3701 | | NULL |
| 3331 | root | <remote_ip> | <db> | Query | 7971 | Repair with keycache | /*!40000 ALTER TABLE `entities` ENABLE KEYS */ |
| 3810 | root | <remote_ip> | NULL | Query | 0 | NULL | show processlist |
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
3 rows in set (0.00 sec)
它如此缓慢的原因是alter table 使用“Repair with keycache”来构建索引。 这通过一次向索引添加一个条目来构建索引。
更快的方法是使用“排序修复”。 但是,MySQL 需要有大量内存和临时磁盘空间来完成这项工作,通常会发生的是 MySQL 会使用“排序”方法启动,空间不足,然后回退到“keycache”方法.
解决这个问题的方法是让您的 MySQL 服务器使用更多空间进行排序。 这是由一些服务器变量控制的:
这些都是动态变量,但我怀疑在更改表启动后更改它们会有多大好处。 如果你不想改变你的系统配置,那么另一种方法是在修复模式下使用 myisamchk 构建索引,分配大的排序缓冲区。
PostgreSQL 不支持“alter table x enable keys”语句:
alter table a enable keys;
ERROR: syntax error at or near "keys"
LINE 1: alter table a enable keys;
^
尝试使用mysqldump --compatible=postgresql
转储您的 MySQL 数据库 - 也许它会加载得很好。
您还可以尝试首先使用mysqldump --compatible=postresql --no-data
转储和导入模式。 手动更正转储文件中的任何不兼容性会更容易。 如果成功导入,则仅使用mysqldump --compatible=postresql --no-create-info
转储和导入数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.