A,B两数据库,A用于线上,B做数据仓库。定期把A中年月已久的数据转移到B中。
A中一些数据表没有直接的日期类型依据用来判断是否做增量备份,
但和某一些有日期类型的表 有一定逻辑关系,也就是参照关系。我的做法就是上面的:mysqldump-->B +B触发器再从A中select数据+delete A中已备份数据
想请教各位,
做增量备份大家有什么更好的方法推荐吗。
谢谢了(主从复制就不考虑了,因为我的情形是 备份及时性不需要很高。硬件方面的原因 主从复制感觉应该会影响应用性能)谢谢各位 

解决方案 »

  1.   

    打开你的二进制备份功能,然后每天文件备份一下这些bin-log 的文件就可以了。5.9.2. 示例用备份与恢复策略
    http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#backup-strategy-example
      

  2.   

    mysqldump命令产生的.sql文件包含一系列SQL INSERT语句,可以用来重载转储的表。需要进行完全备份,但有时不方便。会产生大的备份文件并需要花时间来生成。从某个角度,完全备份并不理想,因为每个成功的完全备份包括所有数据,甚至自从上一次完全备份以来没有更改的部分。完成了初使完全备份后,进行增量备份会更有效。这样备份文件要小得多,备份时间也较短。不利之处是,恢复时不能只重载完全备份来恢复数据。还必须要用增量备份来恢复增量更改。要想进行增量备份,我们需要保存增量更改。应使用--log-bin选项启动MySQL服务器,以便更新数据时将这些更改保存到文件中。该选项启用二进制日志,因此服务器写将每个更新数据的SQL语句写入MySQL二进制日志。让我们看看用--log-bin选项启动的已经运行多日的MySQL服务器的数据目录。我们找到以下MySQL二进制日志文件:
      

  3.   

    恩 ACMAIN_CHM 说的有道理。binlog是实现增量备份的好方法。不好意思,我说的这个“增量备份”的用的不正确。B数据库 其实是个数据仓库的作用 其实没有多大作为备份的意思,只是个数据转移。要是针对我说的上面那样的 数据结构 大家都是如何做数据仓库转移呢。望大家赐教!!谢谢。
      

  4.   

    copy A 数据库中MYD数据 FRM数据文件到B库myischk -r -q ×.MYD重建MYI索引文件或者你直接copy data数据到B库
      

  5.   


    那就用 select * from tablex where mdate >'2009-10-01' into outfile 'xxx.dat';然后B机上把这个 xxx.dat 复制然后load data 本也数据库进行处理。
    当然也可以直接在B机上 mysqldump -h A机 dbname tbname --where "mydate>'2009-10-01'" > xxx.sql
    然后再mysql -h B机 ... <xxx.sql
      

  6.   

    恩 这个办法可行。
    但有一个关键点:对于A中并不是所有数据表都有一个mdate 类似的日期类型,可用于判断是否做数据转移
    A,B两数据库 ,A用于线上使用,B用于备份A的数据---注:A,B数据结构完全一致A中有表aa1,aa2,aa3
    表aa1中有一日期字段tran_date用于判断是否需要转移数据,且主键item_id为表aa2,aa3的外键aa1:
        item_id int(4) auto_increment
        tran_date date not null
        ....
    aa2:
        item_id int(4) not null
        payment_id int(4)
    aa3:
        item_id int(4) not null
        shipping_id int(4)    

    受acmain_chm 的启发,
     用 select * from aa1 where tran_date >'2009-10-01' into outfile 'aa1.dat'
        select * from aa2,aa1 
        where aa2.item_id=aa1.item_id 
        and aa1.tran_date >'2009-10-01' into outfile 'aa2.dat'
       但是 如果用 mysqldump 这样的方法 ,除了使用我上面提到trigger,还有没有其他方法呢
      

  7.   

    哦 其实应该是 select aa2.* from aa2,aa1
        where aa2.item_id=aa1.item_id
        and aa1.tran_date >'2009-10-01' into outfile 'aa2.dat' 
      

  8.   


    如果这样,不如还是直接把A 上的BIN-LOG复制过来,然后 mysqlbinlog binlog.0000003 >xxx.sql , msyql <xxx.sql
    第天定时跑一下。不过既然都这样了,为什么不直接用数据库复制功能?