So I have a new computer and I’m trying to set everything up for some projects.
When I try to import some databases I’m getting this message after the import fails in phpmyadmin:
Missing expression. (near "ON" at position 25)
SET FOREIGN_KEY_CHECKS = ON;
MySQL error 2006: mysql server has gone away
and I get logged out of phpmyadmin alltough the import just takes few seconds.
I already read some hints and I already did:
- Set the my.cnf values like:
[mysql]
max_allowed_packet=512M
[mysqld]
max_allowed_packet=512M
wait_timeout=600
interactive_timeout = 86400
- and also adjusted my php.ini to:
max_execution_time = 500
max_input_time = 500
memory_limit = 512M
post_max_size = 512M
upload_max_filesize = 256M
- Tried the import via command line:
mysql -u USER -p database < import.sql
The command line gives me this as an error:
ERROR 2013 (HY000) at line 12042: Lost connection to MySQL server during query
So apparently this is not just some php stuff.
The import seems to fail. I tried it with multiple Databases. Some where 10MB, some where 120MB. If I start a fresh web application or a wordpress instance, everything works fine and there is no error at all. But the failing databases should also work fine. At least they do on production, staging and on my former working machine.
So I’m a bit lost here.
Here are the current version:
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
Update:
I looked into the error.log of mysql:
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
Maybe someone did run into this?
4
Answers
By now, I switched to docker containers. But I still found the reason for the problem and want to share the solution with you:
On my old system with mysql 5.something I exported the database directly from phpmyadmin. This file couldn't be imported to mysql 8.0.27 with the import function or the command line.
The solution was a dump with mysqldump. This SQL had no problems when importing.
Somehow I thought, that the export of phpmyadmin is the same as the mysqldump.
So if someone runs into this problem, mysqldump is the solution. :)
We solved this problem with mysqldump, too. The client had a phpMyAdmin 4.9.7 SQL Dump from MySQL server 5.7.36 to be imported on MySQL Server 8.0.27. I broke it down to the following reproducer:
Fails to console with
and in the mysql.err with
at
This error happens when dumping databases with PhpMyAdmin, since it adds index creation in a separate statement at the end.
It first creates the TABLE without indices, then INSERTs all the data and at the end it creates indices with ALTER statement.
The import will fail on MySQL 8 when creating multiple indices in one ALTER statement.
So, this will fail (if the data is already in the table):
And this will not:
Still trying to figure out what exactly is the deal here, looks like something to do with collations / charsets.
Would appreciate any further info on this error.
This answer is piggybacking off this answer from emanuelv. Unfortunately, I do not have enough reputation to comment.
If this is indeed an error due to phpMyAdmin attempting to add table indices after data insertion, and MySQL 8.0 chokes on tables with a lot of data already present during import, you can tell phpMyAdmin to use
IF NOT EXISTS
during table creation, thus forcing indices to be created before any data is inserted.On the database export screen, select the "Custom" export method, and enable the following option:
[✓] IF NOT EXISTS (less efficient as indexes will be generated during table creation)
.Screenshot of the option