要将 Windows 系统的 MySQL 数据源迁移到 Ubuntu 系统的 MySQL,核心思路是 "先在 Windows 导出数据(备份),再在 Ubuntu 导入数据",全程保证 MySQL 版本兼容、字符集一致,避免数据乱码或结构损坏。以下是详细步骤(适用于 MySQL 5.7/8.0,通用且稳定):
一、前置准备(关键!避免踩坑)
-
版本兼容检查
确保 Ubuntu 上安装的 MySQL 版本 ≥ Windows 上的版本(低版本导入高版本数据可能报错,高版本兼容低版本通常没问题)。
- Windows 查看版本:
mysql -V(cmd 中执行,需配置 MySQL 环境变量) - Ubuntu 安装 MySQL:若未安装,执行
sudo apt update && sudo apt install mysql-server(默认安装最新稳定版)。
- Windows 查看版本:
-
字符集统一
避免中文乱码,需保证两端 MySQL 的默认字符集均为
utf8mb4(支持所有 emoji 和特殊字符):-
Windows MySQL 配置:打开
my.ini(通常在C:\ProgramData\MySQL\MySQL Server X.X\),添加/修改:ini[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci [client] default-character-set=utf8mb4重启 Windows MySQL:
services.msc找到MySQL服务,右键"重启"。 -
Ubuntu MySQL 配置:打开
my.cnf(通常在/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),添加/修改同上,重启 Ubuntu MySQL:bashsudo systemctl restart mysql
-
-
网络/文件传输
确保 Windows 导出的备份文件能传到 Ubuntu(可选方式:U盘、共享文件夹、FTP、微信/QQ 传输等)。
二、步骤1:在 Windows 导出 MySQL 数据(使用 mysqldump)
mysqldump 是 MySQL 自带的备份工具,能导出数据库的表结构+数据,生成 SQL 脚本文件,兼容性最好。
操作步骤:
-
打开 Windows 命令提示符(cmd,管理员模式可选)。
-
切换到 MySQL 的
bin目录(若已配置环境变量可跳过):示例(MySQL 8.0 默认路径):
cmdcd C:\Program Files\MySQL\MySQL Server 8.0\bin -
执行导出命令(核心!):
cmdmysqldump -u 用户名 -p -h 127.0.0.1 --databases 数据库名 --default-character-set=utf8mb4 > 备份文件名.sql- 参数说明:
-u 用户名:Windows MySQL 的登录用户名(默认root);-p:提示输入密码(避免密码明文写在命令中);-h 127.0.0.1:本地数据库(默认可省略);--databases 数据库名:指定要导出的数据库(多个数据库用空格分隔,如db1 db2);--default-character-set=utf8mb4:强制字符集为 utf8mb4,避免乱码;> 备份文件名.sql:导出到指定路径(如D:\backup\mydb_backup.sql,建议路径无中文)。
- 参数说明:
-
输入 Windows MySQL 的密码,回车开始导出(导出成功后,cmd 无报错,且目标路径生成
.sql文件)。
三、步骤2:将备份文件传到 Ubuntu 系统
将 Windows 上生成的 mydb_backup.sql 传到 Ubuntu,以"U盘传输"为例(最简单):
-
U 盘插入 Windows,复制
mydb_backup.sql到 U 盘; -
U 盘插入 Ubuntu,系统会自动挂载(通常在
/media/用户名/U盘名称/); -
复制备份文件到 Ubuntu 本地目录(如
/home/用户名/backup/),避免权限问题:bash# 先创建本地目录(若不存在) mkdir -p /home/用户名/backup # 复制 U 盘中的备份文件(替换 U 盘实际路径) cp /media/用户名/U盘名称/mydb_backup.sql /home/用户名/backup/
四、步骤3:在 Ubuntu 导入数据到 MySQL
操作步骤:
-
先登录 Ubuntu 的 MySQL,创建与 Windows 同名的空数据库(若数据库已存在,需先删除或清空,避免冲突):
bash# 登录 Ubuntu MySQL(默认 root 无密码,或首次登录需初始化) sudo mysql -u root -p若 Ubuntu MySQL 首次登录无密码,直接输入
sudo mysql -u root即可;若有密码,输入密码登录。 -
登录后执行 SQL,创建空数据库(字符集必须与 Windows 一致):
sql-- 创建数据库(替换为 Windows 上的数据库名,如 mydb) CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 退出 MySQL 命令行 exit; -
执行导入命令(在 Ubuntu 终端,而非 MySQL 命令行):
bashmysql -u root -p 数据库名 --default-character-set=utf8mb4 < /home/用户名/backup/mydb_backup.sql- 参数说明:
数据库名:指定导入到哪个数据库(必须是刚创建的空数据库);< /home/用户名/backup/...:指定备份文件的本地路径(替换为实际路径)。
- 参数说明:
-
输入 Ubuntu MySQL 的密码,回车开始导入(导入时间取决于数据量,耐心等待,终端无报错即成功)。
五、验证数据是否迁移成功
-
登录 Ubuntu MySQL,查看数据库表和数据:
bashsudo mysql -u root -p -
切换到目标数据库,查询表结构和数据:
sql-- 切换数据库 USE 数据库名; -- 查看所有表(应与 Windows 一致) SHOW TABLES; -- 查看某张表的数据(如 user 表) SELECT * FROM user LIMIT 10;若表结构完整、数据无乱码、条数与 Windows 一致,则迁移成功!
常见问题排查
-
导出时提示"mysqldump 不是内部或外部命令"
→ 未配置 Windows MySQL 环境变量:将
C:\Program Files\MySQL\MySQL Server X.X\bin添加到系统环境变量Path中,重启 cmd 即可。 -
导入时提示"Access denied"(权限不足)
→ 备份文件路径权限不够:执行
chmod 777 /home/用户名/backup/mydb_backup.sql临时赋予权限,或确保文件所有者是当前用户。 -
导入后中文乱码
→ 字符集未统一:检查两端 MySQL 的
my.ini/my.cnf配置,确保utf8mb4,且导出/导入时都加了--default-character-set=utf8mb4。 -
导入时提示"Table already exists"(表已存在)
→ 目标数据库非空:先删除数据库
DROP DATABASE 数据库名;,再重新创建空数据库后导入。 -
Ubuntu MySQL 首次登录无法连接
→ 初始化 root 密码(MySQL 8.0 为例):
bash# 登录无密码的 MySQL sudo mysql -u root # 修改 root 密码 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; # 刷新权限 FLUSH PRIVILEGES; exit;
通过以上步骤,即可完整迁移 Windows MySQL 的数据到 Ubuntu,全程核心是"版本兼容+字符集统一+备份导入规范",适用于绝大多数场景(包括本地虚拟机、物理机、云服务器等)。