V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
caixiexin
V2EX  ›  MySQL

有什么简单的 mysql 增量备份方案?

  •  
  •   caixiexin · 2014-12-17 22:46:39 +08:00 · 10862 次点击
    这是一个创建于 3635 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想弄一个自动作业每天备份公司项目的一个mysql数据库,原本采取的方案是crontab+全量mysqldump 然后gzip压缩并按日期保存,最后生成文件大概30多M的样子。但是毕竟这种全量备份放在每天执行不是很好,因为以后数据会越来越大(其中几张表,每天可能增加几w条数据)。
    百度google了mysql增量备份的方案,看到有2种:
    1.也是使用mysqldump,然后将这一次的dump文件和前一次的文件用比对工具比对,生成patch补丁,将补丁打到上一次的dump文件中,生成一份新的dump文件。(stackoverflow上看到的,感觉思路很奇特,但是不知道这样会不会有问题)
    2.增量拷贝 mysql 的数据文件,以及日志文件。典型的方式就是用官方mysqlbackup工具配合 --incremental 参数,但是 mysqlbackup 是mysql Enterprise版才有的工具(收费?),现在项目安装的mysql版本貌似没有。还有v友中分享的各种增量备份脚本或工具也是基于这种方案?

    请问像我这种需求,应该如何选择增量备份工具呢?要是大家知道好用有简单上手的也推荐下,不胜感激:)
    29 条回复    2014-12-18 13:10:12 +08:00
    pubby
        1
    pubby  
       2014-12-17 23:10:01 +08:00 via Android   ❤️ 1
    数据量小就mysqldump
    大了就跑主从,在slaver上dump
    再大了,就把slave跑在能建文件系统快照的系统上,每天建文件系统快照
    wdlth
        2
    wdlth  
       2014-12-17 23:20:19 +08:00   ❤️ 1
    常用的方法是用binlog做增量备份。
    lyragosa
        3
    lyragosa  
       2014-12-17 23:24:20 +08:00   ❤️ 1
    用binlog

    dump表不能做到真·即时
    wdd2007
        4
    wdd2007  
       2014-12-18 00:23:28 +08:00   ❤️ 1
    kslr
        5
    kslr  
       2014-12-18 01:58:24 +08:00 via Android   ❤️ 1
    几万条没必要把
    msg7086
        6
    msg7086  
       2014-12-18 02:33:02 +08:00   ❤️ 2
    你需要先确定一些事情,比如
    1. 这些数据重要吗?如果在你预定备份前1个小时数据丢了,你能承受损失吗?
    2. 有可用资金吗?比如每月多花50块钱买一个VPS之类?
    3. 数据库是innodb吗?

    如果数据很重要,有点预算,请用master-slave结构备份,slave机上再用cron做定时备份。
    如果数据一般般,或者写入量很少,或者没钱,cron做定时备份就好。
    如果数据库全是innodb,可以考虑直接上galera做同步复制,然后slave机上做定时备份。
    yellowV2ex
        7
    yellowV2ex  
       2014-12-18 02:35:06 +08:00
    你们说服务器有没有类似 Time Machine 之类的东西,自动备份每小时,每天,每星期,每月到某个dropbox 云储存之类的或另一个服务器?
    msg7086
        8
    msg7086  
       2014-12-18 02:48:01 +08:00
    @yellowV2ex 自己写脚本。这种高度定制化的东西不太可能会有通用方案。
    特别是数据库这种东西你怎么自动备份。
    yellowV2ex
        9
    yellowV2ex  
       2014-12-18 02:55:31 +08:00   ❤️ 1
    @msg7086 我只想有个一键安装,然后填个dropbox用户名,就帮我备份mySQL和或某个目录的文件到我自己的dropbox上就好啦。至于背后的什么增量备份啊,一键恢复啊,工具帮我搞定。
    有这种易用东西吗?
    yellowV2ex
        10
    yellowV2ex  
       2014-12-18 02:56:44 +08:00
    @msg7086 就像 Time Machine ,我只要插上移动硬盘然后点个菜单他以后就会帮我自动每小时每天每星期的完全备份了
    msg7086
        11
    msg7086  
       2014-12-18 03:00:35 +08:00
    @yellowV2ex TimeMachine只能备份一个一个完整的文件,不能备份数据库这种每时每刻都在改变的东西。目录是可以备份的,安装dropbox就好了。
    yellowV2ex
        12
    yellowV2ex  
       2014-12-18 03:03:16 +08:00
    @msg7086 难道真的没有 一键备份,一键恢复 的东西吗?这样备份的话,数据虽然是在,但要恢复到一台新服务器上,也是折腾的不是一时半会儿啊。还是说搞服务器的就是喜欢这样自己折腾什么都自己写脚本。。
    msg7086
        13
    msg7086  
       2014-12-18 03:11:31 +08:00
    @yellowV2ex 技术上做不到,代价太大。

    随便举个栗子吧。
    我手头在管理一个中型论坛。数据库的写入量是每秒几十次左右。数据库容量大概是15G左右。
    在任何时候,如果你要备份的话,都要读取15G数据,还要与上一次备份的数据做对比。
    先不说你的网络是否快到能很快对比完这么多数据……
    首先你要把这些数据从硬盘上读出来,按照普通硬盘150MB/s的速度就要花费2分钟
    在这2分钟内,正在运行的论坛已经写入了超过1000次新的数据了
    所以你在读取文件的时候,文件头部和尾部的数据已经不在同一个时间点上了
    等你全部读取完毕的时候头上的文件是2分钟之前的,中间的是1分钟之前的,而尾部则是新鲜出炉的
    这种数据就算给你恢复了,数据库结构也是坏的
    luo362722353
        14
    luo362722353  
       2014-12-18 04:33:49 +08:00 via iPhone   ❤️ 1
    我个人比较依赖云端,我个人选择copy网盘,然后打通与move对接,move支持每小时的备份,全量,增量自己选择…
    jarlyyn
        15
    jarlyyn  
       2014-12-18 08:25:43 +08:00 via Android
    @msg7086 snapshot
    caixiexin
        16
    caixiexin  
    OP
       2014-12-18 08:34:24 +08:00
    睡前发了个贴醒来这么多回复,大家都是夜猫子吗:)
    caixiexin
        17
    caixiexin  
    OP
       2014-12-18 08:35:17 +08:00
    @msg7086 是innodb的库,主机空间不是问题,那是客户提供的,不差钱= =不过现在只有一台,可能不好做主从?数据也算比较重要的,只是之前一直没有做每日的备份,同时我也想趁这次机会学学mysql维护方面的知识
    caixiexin
        18
    caixiexin  
    OP
       2014-12-18 08:37:01 +08:00
    @luo362722353 copy到网盘?具体是怎么操作的,我一直以为网盘只能同步文件。。。感觉很神奇的样子。
    caixiexin
        19
    caixiexin  
    OP
       2014-12-18 08:37:26 +08:00
    @wdd2007 谢谢,我参考下
    caixiexin
        20
    caixiexin  
    OP
       2014-12-18 08:38:12 +08:00
    @wdlth 谢谢,我搜下相关资料看看
    soulteary
        21
    soulteary  
       2014-12-18 09:15:33 +08:00 via Android
    有可能的话,试试几家云提供的Rdc,然后选择自己信任的
    tigerstudent
        22
    tigerstudent  
       2014-12-18 09:41:30 +08:00 via Android
    把每天执行的sql语句保存起来哈哈哈
    msg7086
        23
    msg7086  
       2014-12-18 09:50:55 +08:00 via iPhone
    @caixiexin 如果拿的出每月几刀的预算,做个galera是挺不错的。主从也可以,做起来不是很麻烦。
    msg7086
        24
    msg7086  
       2014-12-18 09:59:48 +08:00 via iPhone
    @jarlyyn 要文件系统支持,并且要先flush刷盘。
    很难做成通用的解决方案吧…
    realityone
        25
    realityone  
       2014-12-18 10:01:24 +08:00 via iPhone
    以前做过一个很原始的方案,每次备份的时候记下上次备份每个表最后一条数据的id…然后下次…
    luo362722353
        26
    luo362722353  
       2014-12-18 10:14:03 +08:00

    注册copy.com 选择此项

    选择other




    这样就可以自动备份了..
    luo362722353
        27
    luo362722353  
       2014-12-18 10:15:09 +08:00

    漏发了这张图...云端备份吧..@caixiexin
    xfwduke
        28
    xfwduke  
       2014-12-18 12:40:36 +08:00
    lz 这个场景数据量很小嘛, 每天的增量也很小
    可以考虑这样的方案
    1. 每周一次 mysqldump 全备
    2. 剩下的只备份 binary log 做增量

    这样可以构造任意时间的的数据

    到了第二周, 把上一周的干掉, 或者想归档也行

    这样搞, 得用 innodb, myisam 引擎用 mysqldump 基本没啥意义
    yanleijava
        29
    yanleijava  
       2014-12-18 13:10:12 +08:00
    推荐主从复制。纯自动
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2785 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 12:48 · PVG 20:48 · LAX 04:48 · JFK 07:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.