Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从mysql数据库转储还原_Mysql - Fatal编程技术网

无法从mysql数据库转储还原

无法从mysql数据库转储还原,mysql,Mysql,我已经转储了我的数据库,其中一个表相当大(约400万条记录),并且有很多索引(一个全文索引、一个主键和3个唯一索引)。当我尝试恢复这个转储时,当它尝试执行启用键的语句(ALTER table x ENABLE keys)时,restore挂起(它已经运行了五天了) 任何关于如何恢复此转储的建议都非常受欢迎。桌子在里面 问题是myisam表 下面是showprocesslist的输出 mysql> show processlist; +------+----------+----------

我已经转储了我的数据库,其中一个表相当大(约400万条记录),并且有很多索引(一个全文索引、一个主键和3个唯一索引)。当我尝试恢复这个转储时,当它尝试执行启用键的语句(ALTER table x ENABLE keys)时,restore挂起(它已经运行了五天了)

任何关于如何恢复此转储的建议都非常受欢迎。桌子在里面 问题是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)
mysql>显示进程列表;
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
|Id |用户|主机| db |命令|时间|状态|信息|
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
|2350 | rdsadmin | localhost:52508 | NULL | Sleep | 3701 | NULL|
|3331 | root | | | | Query | 7971 |用keycache修复|/*!40000 ALTER TABLE`entities`启用键*/|
|3810 |根| |空|查询| 0 |空|显示进程列表|
+------+----------+-------------------------------------------------+---------------+---------+------+----------------------+------------------------------------------------+
一组3行(0.00秒)

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

转储和导入数据。其速度如此缓慢的原因是alter table正在使用“使用keycache修复”来构建索引。这将通过在索引中每次添加一个条目来构建索引

更快的方法是使用“排序修复”。然而,MySQL需要有大量的内存和临时磁盘空间来完成这项工作,通常情况下,MySQL将使用“sort”方法启动,空间耗尽,然后返回到“keycache”方法

解决方法是允许MySQL服务器使用更多的空间进行排序。这由一些服务器变量控制:

  • -将其设置为您可以安全承受的最大值-例如150G
  • -再说一次,越大越好-例如1G

这两个都是动态变量,但我怀疑一旦alter table启动,更改它们是否会有很多好处。如果您不想更改系统配置,那么另一种方法是在修复模式下使用myisamchk构建索引,分配大的排序缓冲区。

alter语句位于何处-在数据之后,还是在CREATE语句之后?您的文件系统是否已满?e、 g./tmpAlter表位于数据之后,有大量的磁盘空间!!!谢谢。ALTERTABLE语句的当前状态是什么?运行“ShowProcessList;”并用结果更新您的问题。谢谢。该声明已经运行了大约2个小时,与5天大不相同。但是状态(使用keycache修复)为我们提供了问题的线索。“分类修复”通常更快。检查最大排序文件的大小,它可能需要增加:显示“myisam_max_sort_file_size”之类的变量;哎呀,我没有注意到艾克的评论。我的答案实际上是这个的翻版。