还原具有大型 blob 的大型 mySLQ 转储



我正在尝试下载并恢复一个非常大的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

我想我已经阅读了几乎所有关于此错误的线程并尝试了许多解决方案,但不幸的是,它们都不适合我

这是我的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。实际上,如上所述,表包含的二进制 blob 甚至可能大于 20/30 MB。

编辑

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

无关Ubuntu Server 18.04.4 上的 MySQL 5.7.29

好的,多亏了 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服务器上工作。

最新更新