我使用以下命令从使用 mysqldump 在另一台服务器上创建的 160 MB 文件中导入数据。我要导入的环境正在运行最新的 WAMP 服务器,并将 max_allowed_packet 设置为“16M”。
C:\wamp\bin\mysql\mysql5.1.36\bin>mysql --max_allowed_packet=15M -u root -pXXX drupal < C:\prod.sql
ERROR 2006 (HY000) at line 644: MySQL server has gone away
这似乎在约 39 秒和导入 85.5 MB 后持续发生。
我读到了很多关于增加 my.ini 中 max_allowed_packet 的建议,所以我将其设置为 16M,而不是默认的 1M。但无论我做什么,我收到的错误仍然存在。有什么想法吗?
现在已在 my.ini 中解决:
[wampmysqld]
port = 3306
socket = /tmp/mysql.sock
key_buffer = 384M
max_allowed_packet = 100M
table_cache = 4096
sort_buffer_size = 2M
net_buffer_length = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 64M
myisam_sort_buffer_size = 64M
basedir=c:/wamp/bin/mysql/mysql5.1.36
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.36/data
thread_cache_size = 8
query_cache_size = 32M
innodb_buffer_pool_size = 384M
innodb_additional_mem_pool_size = 20M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 10M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 100
wait_timeout = 28800
[mysqldump]
quick
max_allowed_packet = 100M
[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[myisamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
答案1
sql里的数据结构是怎样的?
有可能有一列是 blob,可能是大于 16M 的图像或 PDF。为什么不将 max_allowed_packet 设置为 160MB(因为没有一个数据包可以大于整个文件大小)并再次测试,您以后可以随时将其切换回来。
如果您导入数据并使用 SHOW TABLE STATUS 命令获取数据大小,则可以获得更准确的值,然后您将看到它应该有多大。
但是,这个错误很常见,可能的原因如下:在 mysql 网站上
您必须逐一检查才能找到问题所在,但根据我的经验,问题始终出在数据包太大。出于这个原因,我将我的一台生产机器上的 max_packet_size 设置为 180MB。
答案2
尝试在 my.cnf 中将 wait_timeout 设置为 100,然后重启服务器
wait_timeout = 100
答案3
虽然 Richard 的答案是常见的解决方案,但请检查您的.err
日志。MySQL 可能内存不足并重新启动。我最近也遇到过这种情况,因为硬件出现故障。