所以我有一台新电脑,我正试图为一些项目设置一切。
当我尝试导入一些数据库时,在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
也许是有人撞上了这个?
4条答案
按热度按时间2wnc66cl1#
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
wj8zmpe12#
使用PhpMyAdmin转储数据库时会发生此错误,因为它在末尾的单独语句中添加了索引创建。它首先创建不带索引的TABLE,然后插入所有数据,最后使用ALTER语句创建索引。如果在一个ALTER语句中创建多个索引,则在MySQL 8上导入将失败。
因此,此操作将失败(如果数据已在表中):
而这不会:
仍在试图弄清楚这里的交易到底是什么,看起来像是与排序规则/字符集有关的东西。
将感谢有关此错误的任何进一步信息。
sg3maiej3#
到现在为止,我已经改用了Docker容器。但我仍然找到了问题的原因,并想与您分享解决方案:
在我的旧系统上,我直接从phpmyadmin导出了数据库。这个文件不能用import函数或命令行导入到mysql 8.0.27。
解决方案是使用mysqldump转储。此SQL在导入时没有问题。
不知怎么的,我想,phpmyadmin的导出和mysqldump是一样的。
因此,如果有人遇到这个问题,mysqldump是解决方案。:)
but5z9lq4#
我们也用mysqldump解决了这个问题。客户端有一个来自MySQL服务器5.7.36的phpMyAdmin 4.9.7 SQL转储要导入到MySQL服务器8.0.27上。我把它分解到下面的复制器:
无法使用控制台
并在mysql.err中使用
于