使用大 blob 恢复大型 mySQL 转储

Restoring large mySLQ dump with large blob

我正在尝试下载并恢复一个非常大的 mySQL 转储 (>40GB),其中还包含表中的大型二进制 blob。 我正在使用这样的命令行:

curl 'https://url_from_doogle_dirve' -H ... --compressed | mysql --user=root --password=my-secret

操作开始,但在大约 57MB 后出现以下错误:

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

我想我已经阅读了几乎所有关于此错误的帖子并尝试了很多解决方案,但不幸的是 none 对我有用

这是我的 mysqld.cnf 文件(仅相关部分):

key_buffer_size         = 16M
max_allowed_packet      = 32M
thread_stack            = 192K
thread_cache_size       = 8

myisam-recover-options  = BACKUP

query_cache_limit       = 1M
query_cache_size        = 16M

log_error = /var/log/mysql/error.log

expire_logs_days        = 10
max_binlog_size   = 100M

net_write_timeout = 36000
net_read_timeout = 36000
innodb_buffer_pool_size = 32M
wait_timeout = 36000

我不得不将 max_allowed_packet 增加到 32MB 因为 16MB 它之前因另一个错误而失败,但现在我有这个新的 ERROR 2013 似乎与大查询/超时。实际上,如上所述,表包含每个可能大于 20 / 30 MB 的二进制 blob。

编辑

我也试过在本地下载 sql 文件,但我得到了相同的结果,所以它与 curl

无关

MySQL 5.7.29 在 Ubuntu 服务器 18.04.4

好的,感谢 maria-db,我找到了问题。

我 运行 在 mariadb 服务器而不是 mySQL 服务器上执行相同的命令,我遇到了同样的问题,但 mariadb 给了我一个更有意义的错误消息:

ERROR 1118 (42000) at line 388: The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size.

所以我设置

innodb_log_file_size=256M

它现在正在运行(尚未完成,但至少这个问题已经解决了) 我想它也可以在 mySQL 服务器上运行。