• 请不要在回答技术问题时复制粘贴 AI 生成的内容
irisdev
V2EX  ›  程序员

mysql 怎么迁移数据库到另一台机器

  •  1
     
  •   irisdev · May 7, 2022 · 5473 views
    This topic created in 1468 days ago, the information mentioned may be changed or developed.

    换电脑了,想把之前电脑 mysql 的表和数据都迁移到新电脑(都是 windows),看网上的方案都挺麻烦,请教一下大家有没有什么比较简单的迁移方法,因为表不是很多,如果很复杂的话可以直接重建表了

    48 replies    2022-05-10 21:22:33 +08:00
    F281M6Dh8DXpD1g2
        1
    F281M6Dh8DXpD1g2  
       May 7, 2022 via iPhone   ❤️ 2
    Mysqldump 呗
    eason1874
        2
    eason1874  
       May 7, 2022   ❤️ 3
    shell 运行

    mysqldump -u root --all-databases > /home/databases.sql

    压缩,迁移到新电脑,解压缩,然后登录 mysql

    mysqldump -u root

    source /home/databases.sql
    irisdev
        3
    irisdev  
    OP
       May 7, 2022
    ok 的,谢谢上面两个老哥,备份完了
    vibbow
        4
    vibbow  
       May 7, 2022   ❤️ 1
    直接复制粘贴 mysql 数据目录就行呀
    irisdev
        5
    irisdev  
    OP
       May 7, 2022
    @vibbow 我下次试试,楼上老哥说的用 mysqldump 还蛮方便的,不解压直接把 sql 运行一遍也行
    yazoox
        6
    yazoox  
       May 7, 2022
    @irisdev 兄弟,能把完整流程过程中,运行的命令,详细写一份出来么?学习一下。
    谢谢
    C02TobNClov1Dz56
        7
    C02TobNClov1Dz56  
       May 7, 2022
    @irisdev
    @yazoox
    学习学习
    446ENzu91KZ73A33
        8
    446ENzu91KZ73A33  
       May 7, 2022
    亲测,直接复制数据目录就行
    CheckMySoul
        9
    CheckMySoul  
       May 7, 2022
    1. 备份恢复:mysqldump 导出成 sql 文件导入到新数据库,或者通过 xtrabackup 备份再恢复(推荐)
    2. 关旧的数据库,数据库文件和配置文件复制到新电脑再启动
    crazytudou
        10
    crazytudou  
       May 7, 2022
    直接把目录复制进去,然后添加到服务,启动,完事
    cloverzrg2
        11
    cloverzrg2  
       May 7, 2022
    用 docker ,才不管你的是什么东西,直接打包过去就行了 😆
    mobbdeep
        12
    mobbdeep  
       May 7, 2022
    @eason1874 问下倒数第二句的 mysqldump 是干啥,把新电脑上数据库备份吗
    irisdev
        13
    irisdev  
    OP
       May 7, 2022
    就是 2l 老哥说的(不过在 windows 上稍微有点不一样)
    进入 mysql 安装 bin 目录下,运行
    mysqlddump -u root -p -all-databases > /f/beifen.sql
    然后就可以在 f 盘下看到 beifen.sql 了
    之后我也没在新电脑还原了,直接打开新电脑的 mysql ,把 beifen.sql 运行一遍就好了(这里可以用图形化工具,我用的 sqllog)
    @chengyiqun
    irisdev
        14
    irisdev  
    OP
       May 7, 2022
    @yazoox 如上
    C02TobNClov1Dz56
        15
    C02TobNClov1Dz56  
       May 7, 2022
    @irisdev emmmm 我自己用的 mysql 是精简版, 没有 mysqldump ...
    其实 navicat 这种, 用导出导入 csv 也挺不错的.
    csv txt 不用担心爆内存, 导出其他的可能会爆内存.
    irisdev
        16
    irisdev  
    OP
       May 7, 2022
    @chengyiqun 学到了
    julyclyde
        17
    julyclyde  
       May 7, 2022
    @cloverzrg2 建议还是加强学习
    julyclyde
        18
    julyclyde  
       May 7, 2022
    @chengyiqun 为什么 csv 不会爆内存?
    C02TobNClov1Dz56
        19
    C02TobNClov1Dz56  
       May 7, 2022
    @julyclyde csv 和 txt 都是纯文本文件. 一条记录写一行.
    我猜, 可能是用的流式查询, 然后写文件直接通过有缓冲的 writer, 直接在文本后面追加, 这样的话, 数据量再大都不会很耗费内存, 最多就是花时间多.
    julyclyde
        20
    julyclyde  
       May 7, 2022
    @chengyiqun mysqldump 产生的 insert 语句也可以一条记录一行的
    禁用 extended insert 就行了
    C02TobNClov1Dz56
        21
    C02TobNClov1Dz56  
       May 7, 2022
    @julyclyde 学习了
    hefish
        22
    hefish  
       May 7, 2022
    别说是 mysql , 我 oracle 都是直接复制数据库文件的。哈哈。
    julyclyde
        23
    julyclyde  
       May 7, 2022
    @hefish mysql InnoDB 的情况,内存里会有一部分未落盘的 redo log 的
    hefish
        24
    hefish  
       May 7, 2022
    @julyclyde 没事,负载没有那么大。
    eason1874
        25
    eason1874  
       May 7, 2022
    @mobbdeep #12 哈哈,是我打错了,本来是想写登录 mysql -u root
    eason1874
        26
    eason1874  
       May 7, 2022
    @irisdev mysqldump 导出的就是 SQL 语句,source 是执行 sql 文本文件里的全部语句。mysqldump 后直接复制字符串去执行,效果一样的。压缩是为了减小传输体积,不过你量小,压缩反而麻烦了,这个步骤确实多余,可以跳过
    mobbdeep
        27
    mobbdeep  
       May 7, 2022
    @eason1874 理解,新机器没数据库的话应该要先 create database 再 source,不知道是不是我云了
    eason1874
        28
    eason1874  
       May 7, 2022
    @mobbdeep 如果你只导出表格,导入时就得先有数据库。导出 --all-databases 就不用,导出结果会包含 CREATE DATABASE
    stevefan1999
        29
    stevefan1999  
       May 7, 2022 via Android
    🐶弄個集群然後把么遷移的機器加進去 等他同步完畢了把原先的 master down 了再 promote 新加的到 master
    stevefan1999
        30
    stevefan1999  
       May 7, 2022 via Android
    這樣做的好處是在線遷移可以無縫遷移 缺點是複雜
    asmile1993
        31
    asmile1993  
       May 7, 2022
    mysqlddump -u root -p -all-databases > /f/beifen.sql ,这种备份方式获取到的是非一致性备份,不可用的,恢复之后,数据很可能对不上,要加上--master-data=2 和 --single-transaction 这两种方式。

    mysqldump --master-data=2 --single-transaction -A >db_full_backup_`date +%Y%m%d`.sql
    qwerthhusn
        32
    qwerthhusn  
       May 7, 2022
    @chengyiqun mysqldump mysql 这些是客户端,
    encro
        33
    encro  
       May 7, 2022
    navicat ,图形界面,数据库同步。数据量不大的话。
    xuanbg
        34
    xuanbg  
       May 7, 2022
    直接复制文件过去就可以
    smallYear
        35
    smallYear  
       May 7, 2022
    冷备份,直接复制目录就可以
    struggle001
        36
    struggle001  
       May 7, 2022
    @smallYear 冷备份需要拷贝 mysql 目录,还必须版本一直,最初的 innodb 的类型的在 ibdata1 里,如果不拷贝 ibdata1 文件,那就狒狒了,建议还是 mysqldump 出来之后再导入最好。
    bthulu
        37
    bthulu  
       May 7, 2022
    哪用这么麻烦, 直接 navicat 数据传输就行了
    MilkShake
        38
    MilkShake  
       May 7, 2022
    Mysqldump 是最简单的
    keepeye
        39
    keepeye  
       May 7, 2022
    冷迁移方式很多,最简单的就是数据库版本一致直接拷贝 data 目录。。热迁移需要借助一些工具了,大概就是搭建一个主从,然后 slave 切换到 master
    bruce0
        40
    bruce0  
       May 7, 2022
    @vibbow 我有一次升级 mysql, 好像是从 5.5 升到 5.7, 先备份的 sql, 然后导不进去,报错. 最后用的复制目录, 直接启动, 原来的数据都在 0.0
    aaniao002
        41
    aaniao002  
       May 7, 2022 via Android
    为什么不试试 var 下的数据库文件直接粘过去?
    qile1
        42
    qile1  
       May 7, 2022 via Android
    @hefish 能不能给说说怎么复制文件,我用数据泵备份,还原一直不成功,说是表空间问题,复制文件该怎么操作
    jolanyu
        43
    jolanyu  
       May 7, 2022
    kettle
    xiangyuecn
        44
    xiangyuecn  
       May 7, 2022
    楼上有人不怕丢数据就用 navicat

    mysqldump 安全可靠
    hefish
        45
    hefish  
       May 7, 2022
    @qile1 我的 oracle 跑在 zfs 的分区上,所以先给 zfs 分区做一个快照,然后把这个快照的内容复制出来就可以了。
    只要注意机器名一样就能把服务出来。
    在负载不重的机器上,zfs 的 snapshot95%以上的概率能成功。
    flynaj
        46
    flynaj  
       May 8, 2022 via Android
    版本相同的话直接复制 data 目录就行
    qile1
        47
    qile1  
       May 10, 2022 via Android
    @hefish 那我安装相同版本的 oracle ,然后服务器名字弄一样,复制文件就可以用是不是?
    hefish
        48
    hefish  
       May 10, 2022
    @qile1 都不用安装,我整个把 /opt/oracle 复制了过去。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5987 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 02:07 · PVG 10:07 · LAX 19:07 · JFK 22:07
    ♥ Do have faith in what you're doing.