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

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

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

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

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

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

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

    mysqldump -u root

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

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