#2006 - MySQL服务器在导入数据库时失去连接
#2006 - MySQL服务器在导入数据库时失去连接
我有一台新电脑,正在为一些项目设置一切。\n当我尝试导入一些数据库时,在phpmyadmin中导入失败后,我会收到以下消息:\n
缺少表达式(在位置25处的“ON”附近) SET FOREIGN_KEY_CHECKS = ON; MySQL错误2006:MySQL服务器已断开连接
\n并且尽管导入只需要几秒钟,我也会被注销phpmyadmin。\n我已经阅读了一些提示,并且已经执行了以下操作:\n
- \n
- 设置my.cnf值如下:
\n
\n[mysql]\nmax_allowed_packet=512M\n[mysqld]\nmax_allowed_packet=512M\nwait_timeout=600\ninteractive_timeout = 86400\n
\n
- \n
- 同时还调整了php.ini:
\n
\n
max_execution_time = 500 max_input_time = 500 memory_limit = 512M post_max_size = 512M upload_max_filesize = 256M
\n
- \n
- 尝试使用命令行导入:
\n
\n
mysql -u USER -p database < import.sql
\n命令行给出了以下错误:\n
ERROR 2013 (HY000) at line 12042: 在查询期间与MySQL服务器的连接丢失
\n所以显然这不仅仅是一些php问题。\n导入似乎失败了。我尝试了多个数据库,一些大小为10MB,一些大小为120MB。如果我启动一个全新的网络应用程序或WordPress实例,一切都正常,没有任何错误。但是失败的数据库也应该正常工作。至少在生产、分段和我的以前的工作机器上是如此。\n所以我有点迷失了。\n以下是当前的版本:\n
Ubuntu 20.04 mysql Ver 8.0.27-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu)) PHP 7.4.25 (cli) (built: Oct 22 2021 12:34:33) ( NTS ) phpmyadmin 4:4.9.5+dfsg1-2
\n更新:\n我查看了mysql的错误日志:\n
2021-10-29T13:10:12.337942Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27-0ubuntu0.20.04.1' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu). 2021-10-29T13:14:31.622915Z 0 [ERROR] [MY-013183] [InnoDB] 断言失败:ddl0builder.cc:1495:n >= IO_BLOCK_SIZE thread 140053145696000 InnoDB:我们有意生成内存陷阱。 InnoDB:请提交详细的错误报告至http://bugs.mysql.com。 InnoDB:如果您在mysqld启动后甚至立即遇到重复的断言失败或崩溃,可能存在InnoDB表空间中的损坏。请参考 InnoDB:http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html InnoDB:关于强制恢复的信息。 13:14:31 UTC - mysqld收到信号6; 很可能,您遇到了一个错误,但这个错误也可能是由于硬件故障引起的。 线程指针:0x0 尝试回溯。您可以使用以下信息找出 mysqld停止的位置。如果在此之后没有看到任何消息,说明出现了严重错误... stack_bottom = 0 thread_stack 0x100000
\n也许有人遇到过这个问题吗?
这个错误发生在使用PhpMyAdmin导出数据库时,因为它在最后将索引创建为单独的语句添加。
首先创建不带索引的表,然后插入所有数据,最后使用ALTER语句创建索引。
在MySQL 8中,如果在一个ALTER语句中创建多个索引,导入将失败。
所以,如果数据已经在表中,以下代码将失败:
ALTER TABLE `wp_posts` ADD PRIMARY KEY (`ID`), ADD KEY `post_name` (`post_name`(191)), ADD KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), ADD KEY `post_parent` (`post_parent`), ADD KEY `post_author` (`post_author`);
而以下代码将不会失败:
ALTER TABLE `wpul_posts` ADD PRIMARY KEY (`ID`), ALTER TABLE `wpul_posts` ADD KEY `post_name` (`post_name`(191)), ALTER TABLE `wpul_posts` ADD KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), ALTER TABLE `wpul_posts` ADD KEY `post_parent` (`post_parent`), ALTER TABLE `wpul_posts` ADD KEY `post_author` (`post_author`);
仍在努力弄清楚这里到底发生了什么,似乎与排序规则/字符集有关。
对于这个错误,我们将非常感谢任何进一步的信息。
在使用phpMyAdmin导入数据库时,可能会遇到“#2006 - MySQL server has gone away”错误。这个错误通常是由于在数据插入之后,phpMyAdmin尝试添加表索引,而MySQL 8.0在导入过程中对已有大量数据的表存在问题。
为了解决这个问题,我们可以告诉phpMyAdmin在创建表时使用"IF NOT EXISTS",这样可以在插入任何数据之前强制创建索引。
具体操作步骤如下:
1. 在数据库导出界面,选择"Custom"导出方法。
2. 启用以下选项:[✓] IF NOT EXISTS (less efficient as indexes will be generated during table creation)。
这样设置之后,phpMyAdmin在创建表时将先创建索引,然后再插入数据,从而避免了导入过程中出现的问题。
另外,有用户也提到了其他解决方法。其中一个用户通过将结构和数据分别导出到两个文件,成功解决了这个问题。
,解决"#2006 - MySQL server has gone away"错误的方法有两种:
1. 在phpMyAdmin导出时启用"IF NOT EXISTS"选项。
2. 将结构和数据分别导出到两个文件。
感谢前辈们的分享和提供的解决方案,希望这些方法能帮助到遇到相同问题的人们。