V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gkiwi
V2EX  ›  问与答

mysql 数据转存,硬盘空间不够了倒腾了

  •  
  •   gkiwi · 2016-10-10 16:29:13 +08:00 · 3006 次点击
    这是一个创建于 2965 天前的主题,其中的信息可能已经有所发展或是发生改变。
    事情有点特殊。朋友阿里服务器到期(还有 5 天),不想续费了,希望我把上面的 mysql 数据转存一下(打算用百度云,他也没啥服务器),留着后面用;
    数据是他买了别人的,所以丢掉不忍;

    现在情况:服务器 150G 硬盘, mysql data 大小约 80G ,剩余大概 40G 可以用;

    其中单 ibdata1 就有 79G ,参照网上一些瘦身方法,我想着用 mysqldump 导出,然后 gz 压缩一下,然后拉到我的本地再传到百度云上。

    但是 ibdata1, db.sql, db.sql.tar.gz 这三者的大小不知道大概有多少。

    结果第一步 mysqldump 导出了大半天,我上去一看,硬盘刚刚用光了。

    直接压缩 mysql data 文件夹可行么?求个合适的方案,谢谢
    第 1 条附言  ·  2016-10-12 11:02:16 +08:00

    问题搞定,大概整理下:

    mysqldump -uroot -ppassword --opt --extended-insert=true -R --no-autocommit --quick db_name|gzip -c -3>db_name.gz
    

    然后使用bypy,同步到了百度云。

    /var/lib/mysql大概大小80G,导db_name出后(主要就这一个库),约11+G,花费了有5,6个小时;

    2M小水管同步花了12个小时左右;

    同步完了才想起来bypy上传数据和导出数据可以并行的。

    ===

    另外一种方案直接打包文件夹/var/lib/www出了15G,速度比mysqldump导出快很多,也是一种不错的方案。 对于硬盘实在不够的,使用这种,每次打包一部分,然后上传,也是一种不错的方案;

    18 条回复    2016-10-12 10:27:48 +08:00
    zpvip
        1
    zpvip  
       2016-10-10 16:45:54 +08:00   ❤️ 1
    有没有可能先一个一个地把表转成 MyISAM ,然后 scp MyISAM 文件
    ooxxcc
        2
    ooxxcc  
       2016-10-10 16:52:40 +08:00   ❤️ 1
    直接打包 /var/lib/mysql ,或者直接备份这个目录(
    pubby
        3
    pubby  
       2016-10-10 16:55:30 +08:00   ❤️ 1
    光用 mysqldump 就够了 ,直接在管道中压缩
    mysqldump -u<user> -p<password> -h <host> <database> | gzip -c -3 > db.sql.gz

    mysql 目录文件打包不需要吧,遇到不同 mysql 版本不好弄的。
    ifishman
        4
    ifishman  
       2016-10-10 17:01:16 +08:00   ❤️ 1
    何不直接上传到百度云,是因为水管太小了么
    Mac
        5
    Mac  
       2016-10-10 17:02:12 +08:00   ❤️ 1
    1.直接打包 data 目录。
    2.远程用工具备份,我不知道阿里云支不支持 MYSQL 用户的 HOST 是来自%的
    shlabc
        6
    shlabc  
       2016-10-10 17:03:24 +08:00   ❤️ 1
    pubby
        7
    pubby  
       2016-10-10 17:08:08 +08:00   ❤️ 1
    如果磁盘剩余还是不够,保证网络稳定的情况下可以直接导出到本地机器

    ssh user@host ' mysqldump -u<user> -p<password> -h <host> <database> | gzip -c -3 ' > db.sql.gz
    gkiwi
        8
    gkiwi  
    OP
       2016-10-10 17:13:54 +08:00
    @zpvip 已经列在目录单子上,备选方案;
    @ooxxcc @Mac 有尝试这个,但是压缩比不晓得,还在观察,速度倒是不错;
    @pubby @shlabc 没有用到--quick 这个参数,之前我看了几个推荐的脚本,有些有用到这个参数,我一会尝试下,这个应该是最理想的姿势;

    @ifishman 因为买的数据,当时对方有同步数据的工具,直接是同步到 mysql 中的~
    ifishman
        9
    ifishman  
       2016-10-10 17:19:06 +08:00   ❤️ 1
    @gkiwi 我的意思是,直接用百度云的 linux 备份脚本备份整个数据文件夹到百度云上
    gkiwi
        10
    gkiwi  
    OP
       2016-10-10 17:24:41 +08:00
    @ifishman 谢谢,晓得你的意思了。。这个等我压缩好了再用,**真**小水管
    ifishman
        11
    ifishman  
       2016-10-10 17:33:20 +08:00   ❤️ 1
    既然不能一次性压缩完,何不找找类似 winrar 的分卷压缩解决方案,压缩一个上传一个删除一个
    @gkiwi
    gkiwi
        13
    gkiwi  
    OP
       2016-10-10 20:01:04 +08:00
    @ifishman 现在用了两种方式进行压缩,一种直接压缩文件夹的出了一个 15G 的了已经,另外一个速度有点慢,一边导出一边压缩;感觉数据量应该会比 15G 这个小;

    关于分割压缩,在管道中的数据,不晓得分割压缩是否可行,毕竟在在无法获得所有的所有数据之前,是否能够合理的分割压缩,不是太清楚这个。单纯的分割可以有。我晚点再看看结果
    pubby
        14
    pubby  
       2016-10-10 20:57:13 +08:00   ❤️ 1
    @gkiwi 管道输出也可以分片的

    .... | split -d -b 10G - db.sql.gz.part-


    但是你这小水管的话,分了也没用,因为下载速度比你文件生成慢。
    ebony0319
        15
    ebony0319  
       2016-10-10 22:44:06 +08:00 via Android   ❤️ 1
    压缩备份数据库的话大约是 12G 可以压缩为 1G 。
    kn007
        16
    kn007  
       2016-10-10 22:51:13 +08:00   ❤️ 1
    停止运行。直接把目录拷贝走。
    kn007
        17
    kn007  
       2016-10-10 22:51:33 +08:00   ❤️ 1
    或者一点一点备份
    gkiwi
        18
    gkiwi  
    OP
       2016-10-12 10:27:48 +08:00
    @pubby 小水管 12G ,上传了大概 12 个小时吧,已经搞定了:) 谢谢


    @ebony0319 我的是 80G=>15G ,还得看数据

    @kn007 已经搞定:)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2077 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:37 · PVG 08:37 · LAX 16:37 · JFK 19:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.