本文介绍 mysqldump 工具导出数据错误报 4012 错误时的问题排查和处理方法。
适用版本
OceanBase 数据库 V3.x 及之前版本
问题现象
使用 mysqldump 工具从 OceanBase 数据库中导出数据时错误,错误信息如下。
mysqldump -hobproxy.ocp -uuser@tenant#cluster -p'password' -PXXXX --replace --opt -t --hex-blob --triggers=false --skip-lock-tables --init-sql="set ob_query_timeout=5000000000,ob_trx_timeout=5000000000;" table name >> /path_to_dump/dump_result.sql
mysqldump: Error 4012: Timeout when dumping table `table_name` at row: xxxx
问题原因
根据错误信息,引起该问题的原因是由于超时导致的。这种情况下,有以下两个原因可能导致超时:
导出的数据量较大。
设置的超时时间是会话级别。
在 mysqldump 命令行中 -init-sql 参数设置的是被导出表的租户级别的全局变量,因此设置该参数并不能避免该问题。
解决方法
对于两种错误原因,都可以通过以下方式解决:
将 OceanBase 数据库的全局的查询超时时间和事务超时时间设置为更大的值。
ob_query_timeout用于设置查询超时时间,单位是微秒,默认为 10000000;ob_trx_timeout用于设置事务超时时间,单位为微秒,默认为 100000000。有关以上系统变量的详细信息,请参见《OceanBase 数据库 参考指南》中的 系统变量 章节。
SET GLOBAL ob_query_timeout= 5000000000, global ob_trx_timeout= 5000000000;重新执行 mysqldump 命令行工具进行数据导出。
mysqldump -hobproxy.ocp -uuser@tenant#cluster -p'password' -PXXXX --replace --opt -t --hex-blob --triggers=false --skip-lock-tables table name >> /path_to_dump/dump_result.sql