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

Docker容器中MySQL备份恢复时Unicode字符乱码问题求助

解决MySQL备份恢复乱码问题及替代方案

修复PowerShell命令(直接解决编码问题)

乱码核心原因是PowerShell默认的set-content/get-content采用系统默认编码(通常非UTF-8),而你的MySQL数据库使用utf8mb4编码,mysqldump输出UTF-8格式内容,管道传输时编码不匹配导致乱码。修改命令时指定UTF-8编码即可:

备份命令

docker exec db /usr/bin/mysqldump -u myuser --password=123 --no-tablespaces mydb | set-content backup__.sql -Encoding UTF8

恢复命令

get-content backup__.sql -Encoding UTF8 | docker exec -i db mysql -u myuser --password=123 mydb

若仍有问题,可改用Out-File并指定编码:

docker exec db /usr/bin/mysqldump -u myuser --password=123 --no-tablespaces mydb | Out-File -FilePath backup__.sql -Encoding UTF8

替代方案(无需PowerShell)

如果不想依赖PowerShell,以下几种方案更适合给产品经理使用:

1. CMD脚本

用Windows命令提示符编写脚本,先切换到UTF-8编码再执行操作:

备份脚本(backup.cmd)

chcp 65001
docker exec db /usr/bin/mysqldump -u myuser --password=123 --no-tablespaces mydb > backup__.sql

恢复脚本(restore.cmd)

chcp 65001
docker exec -i db mysql -u myuser --password=123 mydb < backup__.sql

2. Docker挂载卷直接备份/恢复

通过挂载宿主目录到容器,让备份文件直接生成在宿主机器,完全避免管道编码问题:

备份命令

# 假设宿主备份目录是D:\mysql-backup,挂载到容器/backup路径
docker exec -v D:\mysql-backup:/backup db /usr/bin/mysqldump -u myuser --password=123 --no-tablespaces mydb > /backup/backup__.sql

恢复命令

docker exec -v D:\mysql-backup:/backup db sh -c "/usr/bin/mysql -u myuser --password=123 mydb < /backup/backup__.sql"

注:启动容器时需提前添加挂载参数-v D:\mysql-backup:/backup,或临时挂载执行命令

3. 使用WSL(Windows Subsystem for Linux)

若系统已开启WSL,直接用Linux bash命令执行,彻底避开Windows编码问题:

备份命令

docker exec db /usr/bin/mysqldump -u myuser --password=123 --no-tablespaces mydb > /mnt/d/mysql-backup/backup__.sql

恢复命令

cat /mnt/d/mysql-backup/backup__.sql | docker exec -i db mysql -u myuser --password=123 mydb

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:50:10