MySQL - 大表的 MySQLDump 问题

Jez*_*ezB 7 mysql mysqldump backup

我有一个 10.6GB 的 MySQL 数据库——它有 MyISAM 和 InnoDB 表。一个特定的表(称为“响应”)是 8Gb - 该表是 InnoDB。

实时数据库被复制到另一台服务器,我使用 MySQLDump 从复制服务器进行备份……实时服务器运行 Windows,但复制服务器运行 CentOS。

MySQLDump 命令是:

mysqldump --verbose --lock-tables=true --max-allowed-packet=1024M --host=192.168.1.182 --user=myusername --password=mypassword --opt --databases databasename > databasename.sql
Run Code Online (Sandbox Code Playgroud)

该命令运行到“响应”表的一半 - 当我们得到:错误 2013 - 查询期间在第 12891212 行转储表响应时丢失与 MySQL 服务器的连接

经过一番谷歌搜索后,我尝试将以下命令添加到 MySQLDump(独立和同时):

--net-buffer-length=32704
Run Code Online (Sandbox Code Playgroud)

--skip-extended-insert
Run Code Online (Sandbox Code Playgroud)

错误仍然发生在同一个地方。

为了完整起见,我尝试在 NaviCat 和 MySQL Workbench 中转储数据库 - 两者都返回相同的错误。

所以,我想知道这是否是腐败问题。我尝试运行以下(在复制服务器上):

CHECK TABLE responses;
Run Code Online (Sandbox Code Playgroud)

CHECK TABLE responses EXTENDED;
Run Code Online (Sandbox Code Playgroud)

两者都返回以下内容:错误 2013 - 查询期间与 MySQL 服务器的连接丢失。

实时数据库非常忙,所以我有点担心......我在实时表上启动了CHECK TABLE,但不出所料,它导致应用程序停止,所以我不得不停止它。

这里欢迎任何建议......最终目标是使用 MySQLDump 进行备份。

谢谢

更新:我尝试使用 NaviCat 将表(在复制服务器上)复制到另一台服务器上的新数据库 - 它失败并显示相同的消息(传输记录:12,889,214):错误 2013 - 在查询过程中与 MySQL 服务器的连接丢失

Rol*_*DBA 7

你的问题源于网络。在这种情况下,它不是用于通过网络传输数据的缓冲区。它是网络试图在这样做时保持活动的时间长度。

请注意以下选项:

  • net_read_timeout(默认 30):在中止读取之前等待来自连接的更多数据的秒数。当服务器从客户端读取时,net_read_timeout 是控制何时中止的超时值。当服务器写入客户端时,net_write_timeout 是控制何时中止的超时值。另请参阅 slave_net_timeout。
  • net_write_timeout(默认 60):在中止写入之前等待块写入连接的秒数。另请参阅 net_read_timeout。

您有一个繁忙的服务器,并且在某个时刻,您需要为 mysqldump 读取的数据超时。

我过去所做的是在源服务器和目标服务器上运行以下内容:

mysql> SET GLOBAL net_read_timeout = 31536000;
mysql> SET GLOBAL net_write_timeout = 31536000; 
Run Code Online (Sandbox Code Playgroud)

然后,去运行mysqldump。

将这些值设置得非常高会强制 mysqldump 数据库连接等待很长时间才能传送数据。如果您想知道,数字31536000是一年中的秒数 (365 * 24 * 60 * 60)。mysqldump 数据库连接将只需要停留并等待,即使对于您繁忙的服务器,直到数据到来(最终)。请参阅我的帖子Jan 12, 2012客户端超时,而 MySQL 查询仍在运行?

试一试 !!!

更新 2018-01-04 09:53 美国东部时间

我刚刚注意到你的评论

请注意您从 mysqldump 获得的错误消息:

错误 2013 - 在查询期间在第 12891212 行转储表响应时丢失与 MySQL 服务器的连接

请注意行号12891212如果每次 mysqldump 失败时该行号都会在错误消息中返回,那么您可能会怀疑数据损坏。但是,如果您在每次 mysqldump 尝试中获得不同的行号,这表明 mysqldump 连接能够沿着大表移动,并且只是超时和一些随机点。

请设置这些值并再次尝试 mysqldump。然后,回来告诉我们发生了什么事。