【问题标题】:#2006 - MySQL server has gone away on db import#2006 - MySQL 服务器已在 db 导入时消失
【发布时间】: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,尽管导入只需要几秒钟。

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

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

[mysqld]
max_allowed_packet=512M
wait_timeout=600
interactive_timeout = 86400
  1. 并将我的 php.ini 调整为:
max_execution_time = 500
max_input_time = 500
memory_limit = 512M
post_max_size = 512M
upload_max_filesize = 256M
  1. 尝试通过命令行导入:
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 有完全相同的问题,但第一次出现时有一个堆栈跟踪:-/

标签: mysql import phpmyadmin ubuntu-20.04


【解决方案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

【讨论】:

【解决方案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
      猜你喜欢
      • 2015-01-15
      • 1970-01-01
      • 2012-06-28
      • 2011-12-18
      • 2014-08-09
      • 2016-06-21
      • 1970-01-01
      相关资源
      最近更新 更多