【mysql】将数据源从windows 迁移到 ubuntu的过程

要将 Windows 系统的 MySQL 数据源迁移到 Ubuntu 系统的 MySQL,核心思路是 "先在 Windows 导出数据(备份),再在 Ubuntu 导入数据",全程保证 MySQL 版本兼容、字符集一致,避免数据乱码或结构损坏。以下是详细步骤(适用于 MySQL 5.7/8.0,通用且稳定):

一、前置准备(关键!避免踩坑)

  1. 版本兼容检查

    确保 Ubuntu 上安装的 MySQL 版本 ≥ Windows 上的版本(低版本导入高版本数据可能报错,高版本兼容低版本通常没问题)。

    • Windows 查看版本:mysql -V(cmd 中执行,需配置 MySQL 环境变量)
    • Ubuntu 安装 MySQL:若未安装,执行 sudo apt update && sudo apt install mysql-server(默认安装最新稳定版)。
  2. 字符集统一

    避免中文乱码,需保证两端 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:

      bash 复制代码
      sudo systemctl restart mysql
  3. 网络/文件传输

    确保 Windows 导出的备份文件能传到 Ubuntu(可选方式:U盘、共享文件夹、FTP、微信/QQ 传输等)。

二、步骤1:在 Windows 导出 MySQL 数据(使用 mysqldump)

mysqldump 是 MySQL 自带的备份工具,能导出数据库的表结构+数据,生成 SQL 脚本文件,兼容性最好。

操作步骤:
  1. 打开 Windows 命令提示符(cmd,管理员模式可选)。

  2. 切换到 MySQL 的 bin 目录(若已配置环境变量可跳过):

    示例(MySQL 8.0 默认路径):

    cmd 复制代码
    cd C:\Program Files\MySQL\MySQL Server 8.0\bin
  3. 执行导出命令(核心!):

    cmd 复制代码
    mysqldump -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,建议路径无中文)。
  4. 输入 Windows MySQL 的密码,回车开始导出(导出成功后,cmd 无报错,且目标路径生成 .sql 文件)。

三、步骤2:将备份文件传到 Ubuntu 系统

将 Windows 上生成的 mydb_backup.sql 传到 Ubuntu,以"U盘传输"为例(最简单):

  1. U 盘插入 Windows,复制 mydb_backup.sql 到 U 盘;

  2. U 盘插入 Ubuntu,系统会自动挂载(通常在 /media/用户名/U盘名称/);

  3. 复制备份文件到 Ubuntu 本地目录(如 /home/用户名/backup/),避免权限问题:

    bash 复制代码
    # 先创建本地目录(若不存在)
    mkdir -p /home/用户名/backup
    # 复制 U 盘中的备份文件(替换 U 盘实际路径)
    cp /media/用户名/U盘名称/mydb_backup.sql /home/用户名/backup/

四、步骤3:在 Ubuntu 导入数据到 MySQL

操作步骤:
  1. 先登录 Ubuntu 的 MySQL,创建与 Windows 同名的空数据库(若数据库已存在,需先删除或清空,避免冲突):

    bash 复制代码
    # 登录 Ubuntu MySQL(默认 root 无密码,或首次登录需初始化)
    sudo mysql -u root -p

    若 Ubuntu MySQL 首次登录无密码,直接输入 sudo mysql -u root 即可;若有密码,输入密码登录。

  2. 登录后执行 SQL,创建空数据库(字符集必须与 Windows 一致):

    sql 复制代码
    -- 创建数据库(替换为 Windows 上的数据库名,如 mydb)
    CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    -- 退出 MySQL 命令行
    exit;
  3. 执行导入命令(在 Ubuntu 终端,而非 MySQL 命令行):

    bash 复制代码
    mysql -u root -p 数据库名 --default-character-set=utf8mb4 < /home/用户名/backup/mydb_backup.sql
    • 参数说明:
      • 数据库名:指定导入到哪个数据库(必须是刚创建的空数据库);
      • < /home/用户名/backup/...:指定备份文件的本地路径(替换为实际路径)。
  4. 输入 Ubuntu MySQL 的密码,回车开始导入(导入时间取决于数据量,耐心等待,终端无报错即成功)。

五、验证数据是否迁移成功

  1. 登录 Ubuntu MySQL,查看数据库表和数据:

    bash 复制代码
    sudo mysql -u root -p
  2. 切换到目标数据库,查询表结构和数据:

    sql 复制代码
    -- 切换数据库
    USE 数据库名;
    -- 查看所有表(应与 Windows 一致)
    SHOW TABLES;
    -- 查看某张表的数据(如 user 表)
    SELECT * FROM user LIMIT 10;

    若表结构完整、数据无乱码、条数与 Windows 一致,则迁移成功!

常见问题排查

  1. 导出时提示"mysqldump 不是内部或外部命令"

    → 未配置 Windows MySQL 环境变量:将 C:\Program Files\MySQL\MySQL Server X.X\bin 添加到系统环境变量 Path 中,重启 cmd 即可。

  2. 导入时提示"Access denied"(权限不足)

    → 备份文件路径权限不够:执行 chmod 777 /home/用户名/backup/mydb_backup.sql 临时赋予权限,或确保文件所有者是当前用户。

  3. 导入后中文乱码

    → 字符集未统一:检查两端 MySQL 的 my.ini/my.cnf 配置,确保 utf8mb4,且导出/导入时都加了 --default-character-set=utf8mb4

  4. 导入时提示"Table already exists"(表已存在)

    → 目标数据库非空:先删除数据库 DROP DATABASE 数据库名;,再重新创建空数据库后导入。

  5. 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,全程核心是"版本兼容+字符集统一+备份导入规范",适用于绝大多数场景(包括本地虚拟机、物理机、云服务器等)。

相关推荐
生活很暖很治愈3 小时前
Linux——基础IO&软硬链接
linux·ubuntu
Roc.Chang3 小时前
Ubuntu 下 VLC 无法启动(Segmentation fault)终极解决方案
linux·ubuntu·vlc·媒体播放
Anesthesia丶4 小时前
Ubuntu20.04 升级 Ubuntu24.04 LTS
ubuntu
雨中风华5 小时前
Linux, macOS系统实现远程目录访问(等同于windows平台xFsRedir软件的目录重定向)
linux·windows·macos
·云扬·6 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
符哥20087 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql
筵陌7 小时前
MySQL索引及其底层原理(上)
mysql
陌上花开缓缓归以7 小时前
linux mtd-utils使用源码分析(ubuntu测试版)
linux·arm开发·ubuntu
怣507 小时前
MySQL子查询零基础入门教程:从小白到上手(零基础入门版)
数据库·mysql
yuuki2332337 小时前
【C++】继承
开发语言·c++·windows