#2006 - MySQL服务器在导入数据库时失去连接

28 浏览
0 Comments

#2006 - MySQL服务器在导入数据库时失去连接

我有一台新电脑,正在为一些项目设置一切。\n当我尝试导入一些数据库时,在phpmyadmin中导入失败后,我会收到以下消息:\n

缺少表达式(在位置25处的“ON”附近)
SET FOREIGN_KEY_CHECKS = ON;
MySQL错误2006:MySQL服务器已断开连接

\n并且尽管导入只需要几秒钟,我也会被注销phpmyadmin。\n我已经阅读了一些提示,并且已经执行了以下操作:\n

    \n

  1. 设置my.cnf值如下:
  2. \n

\n[mysql]\nmax_allowed_packet=512M\n[mysqld]\nmax_allowed_packet=512M\nwait_timeout=600\ninteractive_timeout = 86400\n\n

    \n

  1. 同时还调整了php.ini:
  2. \n

\n

max_execution_time = 500
max_input_time = 500
memory_limit = 512M
post_max_size = 512M
upload_max_filesize = 256M

\n

    \n

  1. 尝试使用命令行导入:
  2. \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也许有人遇到过这个问题吗?

0
0 Comments

在使用docker容器后,我仍然发现了问题的原因,并希望与大家分享解决方法:

在我旧系统上使用mysql 5.x版本时,我直接从phpmyadmin导出了数据库。但是,这个文件无法通过导入功能或者命令行导入到mysql 8.0.27中。

解决方法是使用mysqldump进行导出。这个SQL文件在导入时没有任何问题。

不知何故,我认为phpmyadmin的导出和mysqldump是相同的。

所以,如果有人遇到这个问题,使用mysqldump就是解决方法。 🙂

0
0 Comments

这个错误发生在使用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`);

仍在努力弄清楚这里到底发生了什么,似乎与排序规则/字符集有关。

对于这个错误,我们将非常感谢任何进一步的信息。

0
0 Comments

在使用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. 将结构和数据分别导出到两个文件。

感谢前辈们的分享和提供的解决方案,希望这些方法能帮助到遇到相同问题的人们。

0