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

相关推荐
e***282923 分钟前
Windows 上彻底卸载 Node.js
windows·node.js
q***01652 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
4***14903 小时前
MySQL调试技巧与工具
数据库·mysql
n***54383 小时前
【MySQL】MySQL内置函数--日期函数字符串函数数学函数其他相关函数
android·mysql·adb
linchare5 小时前
linux debian上只装mysql的客户端步骤
linux·mysql·debian
w***4246 小时前
【MySQL】复合查询
数据库·mysql
q***01776 小时前
【MySQL】表的基本操作
数据库·mysql·oracle
q***48257 小时前
mysql用户名怎么看
数据库·mysql
r***12387 小时前
若依微服务中配置 MySQL + DM 多数据源
android·mysql·微服务