V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
irisdev
V2EX  ›  程序员

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

  •  1
     
  •   irisdev · 2022-05-07 01:04:44 +08:00 · 4337 次点击
    这是一个创建于 692 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    48 条回复    2022-05-10 21:22:33 +08:00
    liprais
        1
    liprais  
       2022-05-07 01:12:27 +08:00 via iPhone   ❤️ 2
    Mysqldump 呗
    eason1874
        2
    eason1874  
       2022-05-07 01:15:01 +08:00   ❤️ 3
    shell 运行

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

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

    mysqldump -u root

    source /home/databases.sql
    irisdev
        3
    irisdev  
    OP
       2022-05-07 01:25:24 +08:00
    ok 的,谢谢上面两个老哥,备份完了
    vibbow
        4
    vibbow  
       2022-05-07 03:03:45 +08:00   ❤️ 1
    直接复制粘贴 mysql 数据目录就行呀
    irisdev
        5
    irisdev  
    OP
       2022-05-07 03:25:38 +08:00
    @vibbow 我下次试试,楼上老哥说的用 mysqldump 还蛮方便的,不解压直接把 sql 运行一遍也行
    yazoox
        6
    yazoox  
       2022-05-07 09:05:17 +08:00
    @irisdev 兄弟,能把完整流程过程中,运行的命令,详细写一份出来么?学习一下。
    谢谢
    chengyiqun
        7
    chengyiqun  
       2022-05-07 09:36:25 +08:00
    @irisdev
    @yazoox
    学习学习
    mu666
        8
    mu666  
       2022-05-07 09:40:38 +08:00
    亲测,直接复制数据目录就行
    CheckMySoul
        9
    CheckMySoul  
       2022-05-07 10:11:04 +08:00
    1. 备份恢复:mysqldump 导出成 sql 文件导入到新数据库,或者通过 xtrabackup 备份再恢复(推荐)
    2. 关旧的数据库,数据库文件和配置文件复制到新电脑再启动
    crazytudou
        10
    crazytudou  
       2022-05-07 10:14:37 +08:00
    直接把目录复制进去,然后添加到服务,启动,完事
    cloverzrg2
        11
    cloverzrg2  
       2022-05-07 11:05:09 +08:00
    用 docker ,才不管你的是什么东西,直接打包过去就行了 😆
    mobbdeep
        12
    mobbdeep  
       2022-05-07 11:10:36 +08:00
    @eason1874 问下倒数第二句的 mysqldump 是干啥,把新电脑上数据库备份吗
    irisdev
        13
    irisdev  
    OP
       2022-05-07 11:42:24 +08:00
    就是 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
       2022-05-07 11:42:45 +08:00
    @yazoox 如上
    chengyiqun
        15
    chengyiqun  
       2022-05-07 11:49:50 +08:00
    @irisdev emmmm 我自己用的 mysql 是精简版, 没有 mysqldump ...
    其实 navicat 这种, 用导出导入 csv 也挺不错的.
    csv txt 不用担心爆内存, 导出其他的可能会爆内存.
    irisdev
        16
    irisdev  
    OP
       2022-05-07 11:58:50 +08:00
    @chengyiqun 学到了
    julyclyde
        17
    julyclyde  
       2022-05-07 12:01:48 +08:00
    @cloverzrg2 建议还是加强学习
    julyclyde
        18
    julyclyde  
       2022-05-07 12:02:20 +08:00
    @chengyiqun 为什么 csv 不会爆内存?
    chengyiqun
        19
    chengyiqun  
       2022-05-07 12:06:21 +08:00
    @julyclyde csv 和 txt 都是纯文本文件. 一条记录写一行.
    我猜, 可能是用的流式查询, 然后写文件直接通过有缓冲的 writer, 直接在文本后面追加, 这样的话, 数据量再大都不会很耗费内存, 最多就是花时间多.
    julyclyde
        20
    julyclyde  
       2022-05-07 12:07:47 +08:00
    @chengyiqun mysqldump 产生的 insert 语句也可以一条记录一行的
    禁用 extended insert 就行了
    chengyiqun
        21
    chengyiqun  
       2022-05-07 12:13:38 +08:00
    @julyclyde 学习了
    hefish
        22
    hefish  
       2022-05-07 12:15:33 +08:00
    别说是 mysql , 我 oracle 都是直接复制数据库文件的。哈哈。
    julyclyde
        23
    julyclyde  
       2022-05-07 12:32:57 +08:00
    @hefish mysql InnoDB 的情况,内存里会有一部分未落盘的 redo log 的
    hefish
        24
    hefish  
       2022-05-07 12:59:41 +08:00
    @julyclyde 没事,负载没有那么大。
    eason1874
        25
    eason1874  
       2022-05-07 14:50:13 +08:00
    @mobbdeep #12 哈哈,是我打错了,本来是想写登录 mysql -u root
    eason1874
        26
    eason1874  
       2022-05-07 14:56:19 +08:00
    @irisdev mysqldump 导出的就是 SQL 语句,source 是执行 sql 文本文件里的全部语句。mysqldump 后直接复制字符串去执行,效果一样的。压缩是为了减小传输体积,不过你量小,压缩反而麻烦了,这个步骤确实多余,可以跳过
    mobbdeep
        27
    mobbdeep  
       2022-05-07 15:02:08 +08:00
    @eason1874 理解,新机器没数据库的话应该要先 create database 再 source,不知道是不是我云了
    eason1874
        28
    eason1874  
       2022-05-07 15:13:15 +08:00
    @mobbdeep 如果你只导出表格,导入时就得先有数据库。导出 --all-databases 就不用,导出结果会包含 CREATE DATABASE
    stevefan1999
        29
    stevefan1999  
       2022-05-07 15:51:21 +08:00 via Android
    🐶弄個集群然後把么遷移的機器加進去 等他同步完畢了把原先的 master down 了再 promote 新加的到 master
    stevefan1999
        30
    stevefan1999  
       2022-05-07 15:52:23 +08:00 via Android
    這樣做的好處是在線遷移可以無縫遷移 缺點是複雜
    asmile1993
        31
    asmile1993  
       2022-05-07 16:00:11 +08:00
    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  
       2022-05-07 16:02:32 +08:00
    @chengyiqun mysqldump mysql 这些是客户端,
    encro
        33
    encro  
       2022-05-07 16:25:40 +08:00
    navicat ,图形界面,数据库同步。数据量不大的话。
    xuanbg
        34
    xuanbg  
       2022-05-07 16:47:00 +08:00
    直接复制文件过去就可以
    smallYear
        35
    smallYear  
       2022-05-07 17:00:39 +08:00
    冷备份,直接复制目录就可以
    struggle001
        36
    struggle001  
       2022-05-07 17:25:18 +08:00
    @smallYear 冷备份需要拷贝 mysql 目录,还必须版本一直,最初的 innodb 的类型的在 ibdata1 里,如果不拷贝 ibdata1 文件,那就狒狒了,建议还是 mysqldump 出来之后再导入最好。
    bthulu
        37
    bthulu  
       2022-05-07 18:03:53 +08:00
    哪用这么麻烦, 直接 navicat 数据传输就行了
    aaa5838769
        38
    aaa5838769  
       2022-05-07 18:07:25 +08:00
    Mysqldump 是最简单的
    keepeye
        39
    keepeye  
       2022-05-07 18:42:19 +08:00
    冷迁移方式很多,最简单的就是数据库版本一致直接拷贝 data 目录。。热迁移需要借助一些工具了,大概就是搭建一个主从,然后 slave 切换到 master
    bruce0
        40
    bruce0  
       2022-05-07 19:03:56 +08:00
    @vibbow 我有一次升级 mysql, 好像是从 5.5 升到 5.7, 先备份的 sql, 然后导不进去,报错. 最后用的复制目录, 直接启动, 原来的数据都在 0.0
    aaniao002
        41
    aaniao002  
       2022-05-07 19:32:40 +08:00 via Android
    为什么不试试 var 下的数据库文件直接粘过去?
    qile1
        42
    qile1  
       2022-05-07 19:45:59 +08:00 via Android
    @hefish 能不能给说说怎么复制文件,我用数据泵备份,还原一直不成功,说是表空间问题,复制文件该怎么操作
    jolanyu
        43
    jolanyu  
       2022-05-07 20:24:25 +08:00
    kettle
    xiangyuecn
        44
    xiangyuecn  
       2022-05-07 20:49:20 +08:00
    楼上有人不怕丢数据就用 navicat

    mysqldump 安全可靠
    hefish
        45
    hefish  
       2022-05-07 21:20:54 +08:00
    @qile1 我的 oracle 跑在 zfs 的分区上,所以先给 zfs 分区做一个快照,然后把这个快照的内容复制出来就可以了。
    只要注意机器名一样就能把服务出来。
    在负载不重的机器上,zfs 的 snapshot95%以上的概率能成功。
    flynaj
        46
    flynaj  
       2022-05-08 20:08:37 +08:00 via Android
    版本相同的话直接复制 data 目录就行
    qile1
        47
    qile1  
       2022-05-10 20:32:39 +08:00 via Android
    @hefish 那我安装相同版本的 oracle ,然后服务器名字弄一样,复制文件就可以用是不是?
    hefish
        48
    hefish  
       2022-05-10 21:22:33 +08:00
    @qile1 都不用安装,我整个把 /opt/oracle 复制了过去。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1385 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 23:43 · PVG 07:43 · LAX 16:43 · JFK 19:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.