我想排查在 Amazon Relational Database Service (Amazon RDS) 上使用 mysqldump 导入或导出数据时出现的错误。
解决方法
请使用以下解决步骤来排查您的错误。
“无法启动‘刷新带读取锁定的表’”错误
当您使用 mysqpdump 通过 —master-data 选项导出数据时,—master-data 选项会获取刷新带读取锁定的表。这需要超级权限,而 Amazon RDS 主用户不具备此权限。Amazon RDS 不支持全局读取锁定。当 MySQL 运行 CHANGE MASTER TO 命令时,二进制日志文件的名称和位置会记录在 mysqldump 文件中。有关更多信息,请参阅 MySQL 网站上的 ER_ACCESS_DENIED_ERROR。
要解决此错误,请移除 —master-data 选项。移除此选项后,将不会在 mysqldump 中向您提供确切的日志位置。要解决此问题,您可以在应用程序停止时获取 mysqldump,或从 Amazon RDS 只读副本获取 mysqldump。这样,您在运行 SHOW SLAVE STATUS 命令时就会获得确切的日志位置。因为当您停止副本时,此操作会确保二进制日志位置不再更改。要从此 RDS 数据库实例的 Amazon RDS MySQL 只读副本创建 mysqldump,请完成以下步骤:
-
为二进制日志保留期设置一个值。
-
在只读副本上运行以下命令以停止复制:
CALL mysql.rds_stop_replication;
-
从只读副本获取 mysqldump,但不使用 --master-data=2。
-
在副本上运行 SHOW SLAVE STATUS 命令,捕获 Master_Log_File 和 Exec_Master_Log_Pos。
-
如果您的应用程序使用此副本,请运行以下命令重新开始复制:
CALL mysql.rds_start_replication;
如果您的应用程序不使用此副本,可以将其删除。
Max_allowed_packet 错误
当 mysqldump 命令请求的数据包大于 RDS 数据库实例上设置的 max_allowed_packet 参数值时,会出现 max_allowed_packet 错误。有关更多信息,请参阅 MySQL 网站上的 Packet too large(数据包过大)。
要解决此错误,请提高 **max_allowed_packet 的全局值。**或者,在 mysqldump 中为该会话配置 max_allowed_packet(而不是为整个数据库全局配置)。例如,您可以修改命令,如下所示:
$ mysqldump --max\_allowed\_packet=1G ......
超级权限和定义者错误
此错误表明存在以下一个或多个问题:
连接错误
有关此错误的原因和解决方法的更多信息,请参阅如何解决连接到 Amazon RDS MySQL 数据库实例时出现的 "MySQL server has gone away" 错误?
相关信息
MySQL 网站上的 mysqldump
如何为我的 Amazon RDS for MySQL 数据库实例启用函数、过程和触发器?