解决数据库还原失败:错误1105 (HY000) — 超过Adobe Commerce Cloud上的最大写集大小

在Galera群集上还原MariaDB备份时,由于2GB事务大小限制,您可能会遇到​ 超出最大写集大小 ​错误。 此文章提供了一个分步式解决方案,它调整了备份和恢复命令以处理较大的事务,从而确保恢复过程的成功。

描述 description

环境

Adobe Commerce Cloud

在MariaDB Galera群集环境中发生此问题。

问题/症状

当您尝试在Galera群集上还原MariaDB数据库备份时,该过程可能会失败,并出现以下错误:

[行出现错误1105 (HY000),特定行号] :超出最大写集大小

原因

Galera群集的wsrep_max_ws_size系统变量将最大写集大小设置为2GB。 如果备份包含超过此大小的大行或二进制数据,则还原过程将失败。

解决方法 resolution

要解决此问题,请通过增加--max_allowed_packet大小来调整备份过程以防止大型事务。 这允许MySQL服务器在备份和还原操作期间处理较大的行或二进制数据。 请记住,始终在非生产环境中测试。

  1. 从MySQL错误日志中确定错误的确切原因。 查找类似于以下内容的消息:

    [行出现错误1105 (HY000),特定行号] :超出最大写集大小

    这可以确认由于事务大小超过Galera限制导致错误。

  2. 创建一个指定--max_allowed_packet参数的新备份,以允许更大的数据大小并防止事务过大。 The --max_allowed_packet参数定义服务器在与客户端通信期间可以处理的数据包的最大大小。 增加此大小有助于处理较大的行或对象,从而防止事务拆分和写集过大。 对于大多数方案,--max_allowed_packet=64M就足够了。 如果数据库包含非常大的行或二进制数据,则将此值调整为 — max_allowed_packet=128M。 此外,使用压缩(例如gzip)来减小文件大小。
    备份命令示例:

    code language-none
    mysqldump -h <host> -u <username> -p <password> --single-transaction --max_allowed_packet=64M <db_name> | gzip > /tmp/<dump_name>.sql.gz
    
  3. 还原备份时,请指定增加的--max_allowed_packet值,以确保与修改的备份兼容。
    恢复命令示例:

    zcat /tmp/<dump_name>.sql.gz | sed -e 's/DEFINER[ ] *=[ ] *[ *] *\*/\*/' | mysql --host=127.0.0.1 -u <username> -p <password>

  4. 恢复备份后,确认过程完成且没有错误。 检查日志以确保不存在警告或异常。

相关阅读

MariaDB文档中的Galera群集系统变量中的wsrep_max_ws_size

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f