当使用 mysqldump
导入数据到 MySQL 8.0 失败时,可能有多种原因。以下是最常见的几种情况及解决方案:
问题:MySQL 8.0 默认使用 caching_sha2_password
认证插件,而旧版本使用 mysql_native_password
。
解决方案:
-- 创建用户时指定旧版认证插件
CREATE USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
-- 或修改现有用户
ALTER USER 'username'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
问题:源数据库和目标数据库字符集不一致。
解决方案:
# 导出时指定字符集
mysqldump -u username -p --default-character-set=utf8mb4 database > dump.sql
# 导入时指定字符集
mysql -u username -p --default-character-set=utf8mb4 database < dump.sql
问题:MySQL 8.0 引入了新的表空间格式。
解决方案:
# 导出时添加兼容选项
mysqldump --column-statistics=0 -u username -p database > dump.sql
问题:执行导入的用户缺少必要权限。
解决方案:
GRANT ALL PRIVILEGES ON database.* TO 'username'@'host';
FLUSH PRIVILEGES;
问题:导入文件过大导致超时或内存不足。
解决方案:
- 修改 max_allowed_packet
参数
- 使用 mysql
命令行工具的 --max_allowed_packet
选项
- 分批导入
# 导出
mysqldump --column-statistics=0 --single-transaction --routines --triggers --default-character-set=utf8mb4 -u root -p source_db > dump.sql
# 导入
mysql --max_allowed_packet=512M --default-character-set=utf8mb4 -u root -p target_db < dump.sql
tail -f /var/log/mysql/error.log
-v
参数查看详细输出如果问题仍然存在,请提供具体的错误信息以便更精确地诊断问题。