#2006 - MySQL 服务器已在 db 导入时消失

Posted

技术标签:

【中文标题】#2006 - MySQL 服务器已在 db 导入时消失【英文标题】:#2006 - MySQL server has gone away on db import 【发布时间】:2021-12-14 13:04:43 【问题描述】:

所以我有一台新电脑,我正在尝试为一些项目设置一切。

当我尝试导入一些数据库时,我在 phpmyadmin 中导入失败后收到此消息:

Missing expression. (near "ON" at position 25)
SET FOREIGN_KEY_CHECKS = ON;
mysql error 2006: mysql server has gone away

我退出了 phpmyadmin,尽管导入只需要几秒钟。

我已经阅读了一些提示并且已经阅读了:

    将 my.cnf 值设置为:
[mysql]
max_allowed_packet=512M

[mysqld]
max_allowed_packet=512M
wait_timeout=600
interactive_timeout = 86400
    并将我的 php.ini 调整为:
max_execution_time = 500
max_input_time = 500
memory_limit = 512M
post_max_size = 512M
upload_max_filesize = 256M
    尝试通过命令行导入:
mysql -u USER -p database < import.sql

命令行给了我一个错误:

ERROR 2013 (HY000) at line 12042: Lost connection to MySQL server during query

所以显然这不仅仅是一些 php 的东西。

导入似乎失败。我尝试了多个数据库。有的 10MB,有的 120MB。如果我启动一个新的 Web 应用程序或 wordpress 实例,一切正常,完全没有错误。但是失败的数据库也应该可以正常工作。至少他们在生产、登台和我以前的工作机器上这样做。

所以我有点迷路了。

这是当前版本:

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

更新: 我查看了mysql的error.log:

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] Assertion failure: ddl0builder.cc:1495:n >= IO_BLOCK_SIZE thread 140053145696000
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
13:14:31 UTC - mysqld got signal 6 ;
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.
Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0 thread_stack 0x100000

也许有人遇到过这个?

【问题讨论】:

复制sql文件到服务器并用mysql -u导入 感谢您的回复。这是本地开发机器。我已经用上面提到的命令行试过了。 这看起来像是一个内部错误,您可以尝试在 bugtracker 上报告它 好吧,这又是我。昨天我设置了 docker 容器。所以这是一个解决方案。但我仍然不明白错误的原因。但是:我发现,当我直接从控制台 mysqldump 数据时,使用该 SQL 的导入工作正常。在我使用 phpmyadmin 的导出功能之前。不知何故,导出向转储添加了一些东西,这不适用于不同的 mysql 版本(旧系统 5.something.something 新 mysql 8.0.27)。 与 8.0.27 有完全相同的问题,但第一次出现时有一个堆栈跟踪:-/ 【参考方案1】:

This answer is piggybacking off this answer from emanuelv。不幸的是,我没有足够的声誉来发表评论。

如果这确实是由于 phpMyAdmin 在数据插入后尝试添加表索引而导致的错误,并且 MySQL 8.0 在导入期间已经存在大量数据的表上阻塞,您可以告诉 phpMyAdmin 使用 IF NOT EXISTS 在创建表期间,因此强制在插入任何数据之前创建索引

在数据库导出屏幕上,选择“自定义”导出方法,并启用以下选项:

[✓] IF NOT EXISTS (less efficient as indexes will be generated during table creation).Screenshot of the option

【讨论】:

这没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review 感谢您的分享,埃德!这帮助我进行了导入,否则我将花费超过一天的工作。 谢谢,过去 3 天一直在处理这个问题。该复选框默认情况下应处于活动状态,如果您需要时无法导入某些数据库,则允许您导出是没有意义的【参考方案2】:

使用 PhpMyAdmin 转储数据库时会发生此错误,因为它在末尾的单独语句中添加了索引创建。 它首先创建没有索引的 TABLE,然后插入所有数据,最后使用 ALTER 语句创建索引。 在一个 ALTER 语句中创建多个索引时,导入将在 MySQL 8 上失败。

所以,这将失败(如果数据已经在表中):

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`);

仍在试图弄清楚这里的交易到底是什么,看起来与排序规则/字符集有关。

希望能提供有关此错误的更多信息。

【讨论】:

【参考方案3】:

现在,我切换到了 docker 容器。但是我还是找到了问题的原因,想和大家分享一下解决方法:

在我使用 mysql 5.something 的旧系统上,我直接从 phpmyadmin 导出了数据库。无法使用导入函数命令行将该文件导入 mysql 8.0.27。

解决方案是使用 mysqldump 进行转储。此 SQL 导入时没有问题。

不知怎的,我想,phpmyadmin的导出和mysqldump是一样的。

所以如果有人遇到这个问题,mysqldump 就是解决方案。 :)

【讨论】:

【参考方案4】:

我们也用 mysqldump 解决了这个问题。客户端有一个来自 MySQL 服务器 5.7.36 的 phpMyAdmin 4.9.7 SQL 转储,要导入 MySQL 服务器 8.0.27。我将其分解为以下复制器:

-- phpMyAdmin SQL Dump
-- version 4.9.7
-- https://www.phpmyadmin.net/
--
-- Host: localhost
-- Erstellungszeit: 29. Nov 2021 um 21:06
-- Server-Version: 5.7.36
-- PHP-Version: 7.3.33

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
DROP TABLE IF EXISTS `s_mail_log`;
CREATE TABLE `s_mail_log` (
  `id` int(11) NOT NULL,
  `type_id` int(11) DEFAULT NULL,
  `order_id` int(11) DEFAULT NULL,
  `shop_id` int(10) UNSIGNED DEFAULT NULL,
  `subject` longtext COLLATE utf8_unicode_ci,
  `sender` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `sent_at` datetime NOT NULL,
  `content_html` longtext COLLATE utf8_unicode_ci,
  `content_text` longtext COLLATE utf8_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `s_mail_log` (`id`, `type_id`, `order_id`, `shop_id`, `subject`, `sender`, `sent_at`, `content_html`, `content_text`) VALUES
(3586,
2,
9463,
1,
'A',
'B',
'2021-09-22 12:51:39',
'1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333334444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444123456789',
'111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999111111111122222222223333333333444444444455555555556666666666123456789012345678'
),
(3587,
2,
9465,
1,
'1234567890123456789012345678',
'123456789012345',
'2021-09-22 14:20:30',
'11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111',
'22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222');
ALTER TABLE `s_mail_log`
  ADD PRIMARY KEY (`id`),
  ADD KEY `s_mail_log_idx_type_id` (`type_id`),
  ADD KEY `s_mail_log_idx_order_id` (`order_id`),
  ADD KEY `s_mail_log_idx_shop_id` (`shop_id`);
 /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
 /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
 /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

控制台失败

ERROR 2013 (HY000) at line 64: Lost connection

并在 mysql.err 中使用

[ERROR] [MY-013183] [InnoDB] Assertion failure: ddl0builder.cc:1495:n >= IO_BLOCK_SIZE thread 140481166030592
InnoDB: We intentionally generate a memory trap.

ADD KEY `s_mail_log_idx_shop_id` (`shop_id`);

【讨论】:

这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review

以上是关于#2006 - MySQL 服务器已在 db 导入时消失的主要内容,如果未能解决你的问题,请参考以下文章

#2006 MySQL 服务器在 Wamp 中消失了错误

MySQL导入sql脚本错误:2006 - MySQL server has gone away

第 406 行的 MySQL 错误 2006 (HY000):MySQL 服务器已消失

Mysql导入大文件报错(MySQL server has gone away(error 2006))

导入SQL文件到MySQL报错 - 2006 - MySQL server has gone away

mysql导入大批量数据时,出现ERROR : (2006, 'MySQL server has gone away')