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

导入MySQL备份文件至MariaDB后JSON数据损坏,求便捷无损导入方案

解决MySQL转MariaDB时JSON字段批量损坏的问题

一、从MySQL导出时提前规避问题(推荐)

直接用mysqldump导出时指定兼容参数,从根源避免JSON字段转义或格式不兼容:

mysqldump -u 用户名 -p \
  --databases 数据库名 \
  --compatible=mariadb \
  --default-character-set=utf8mb4 \
  --hex-blob \
  > 备份文件.sql

参数说明:

  • --compatible=mariadb:强制生成MariaDB兼容的SQL语句
  • --hex-blob:将JSON等特殊字段以十六进制格式导出,避免转义错误
  • --default-character-set=utf8mb4:统一字符集,防止多字节字符导致JSON解析失败

二、导入MariaDB前的环境配置

导入前临时调整MariaDB的SQL模式,避免严格模式下的JSON校验报错:

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';

如果需要永久生效,编辑MariaDB的配置文件(如/etc/my.cnf或/etc/mysql/my.cnf),添加:

[mysqld]
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

重启MariaDB服务后生效。

三、批量修复已导入的损坏JSON字段

如果已经完成导入且出现损坏,可通过Shell脚本自动遍历所有含JSON字段的表并修复(需MariaDB 10.2+版本支持):

#!/bin/bash
DB_USER="用户名"
DB_PASS="密码"
DB_NAME="你的数据库名"

# 获取所有JSON字段的表和字段名
mysql -u$DB_USER -p$DB_PASS -N -e "SELECT CONCAT(table_name, '.', column_name) FROM information_schema.columns WHERE data_type='json' AND table_schema='$DB_NAME'" | while read -r TABLE_COL; do
  TABLE=$(echo $TABLE_COL | cut -d. -f1)
  COL=$(echo $TABLE_COL | cut -d. -f2)
  # 修复损坏的JSON字段
  mysql -u$DB_USER -p$DB_PASS -e "UPDATE $DB_NAME.$TABLE SET $COL = JSON_REPASE($COL) WHERE NOT JSON_VALID($COL);"
done

注意:执行前务必备份数据库,避免修复过程中出现意外。

四、WordPress特定注意事项

部分WordPress插件会将JSON存储在wp_postmeta或自定义表中:

  • 登录WP后台,开启Debug模式查看是否有JSON解析相关报错
  • 对于插件自定义表,可确认插件是否有MariaDB兼容的版本或特殊导入说明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:52:38