You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB 10.3.32 mysqldump未转义单引号致数据库恢复失败

问题分析与解决方案

核心原因

  1. 跨版本工具兼容性冲突:你用MariaDB 10.3.32的mysqldump备份MariaDB 11的数据库,新旧版本的工具与服务端在字符串转义逻辑上存在差异,旧版mysqldump无法正确处理新版服务端返回数据中的单引号。
  2. 配置参数缺失加剧异常:虽然mysqldump默认开启单引号转义,但跨版本场景下,未明确指定字符集参数,可能导致字符处理逻辑异常,进一步引发转义失效。

解决办法

1. 使用同版本mysqldump备份(推荐)

直接在主NAS(MariaDB 11环境)执行mysqldump操作,彻底规避跨版本工具的兼容性问题:

# 在主NAS上完成备份后,将文件传输至备份NAS
mysqldump --defaults-extra-file=/path/to/my.cnf --defaults-group-suffix=.nas1 $DB > /path/to/backup/$DB.sql

若无法直接操作主NAS,可将MariaDB 11的mysqldump二进制文件复制到备份NAS使用。

2. 补充配置参数强制转义

修改备份NAS上的[mysqldump.nas1]配置,添加字符集与强制转义参数:

[mysqldump.nas1]
allow-keywords
comments
databases
events
force
routines
single-transaction
verbose
default-character-set=utf8mb4
quote-names
escape-quoting

重新执行备份命令,确保mysqldump以统一字符集处理数据,并强制启用单引号转义逻辑。

3. 修复已生成的损坏备份文件

针对已存在的未转义备份文件,可通过sed批量修复:

# 将字段值中的单个单引号替换为SQL标准的双单引号转义格式
sed -E "s/([^'])'([^'])/\1''\2/g" $BACKUP_DIR/$DB.sql > $BACKUP_DIR/$DB_fixed.sql

注意:该命令适用于常规场景,若备份文件包含JSON、特殊格式文本,建议先测试小范围数据,避免误替换。

4. 临时规避恢复报错(不推荐)

若需紧急恢复,可在恢复命令中添加--force参数跳过单条错误继续执行,但无法解决根本问题:

mysql --defaults-extra-file=$SCRIPT_DIR/my.cnf --defaults-group-suffix=.nas2 --database=$DB --force < $BACKUP_DIR/$DB.sql

内容的提问来源于stack exchange,提问作者Joost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:58:56