首页 > 代码库 > MySQL的备份和还原

MySQL的备份和还原

MySQL的备份和还原

    备份:副本
    RAID1,RAID10:保证硬件损坏而不会业务中止;
        DROP TABLE mydb.tb1;

    备份类型:
        热备份、温备份和冷备份(根据服务器是否在线)
            热备份:读、写不受影响;
            温备份:仅可以执行读操作;
            冷备份:离线备份;读、写操作均中止;

        物理备份和逻辑备份(根据直接cp或者把文件导出)
            物理备份:复制数据文件;
            逻辑备份:将数据导出至文本文件中;

        完全备份、增量备份和差异备份;
            完全备份:备份全部数据;
            增量备份:仅备份上次完全备份或增量备份以后变化的数据;
            差异备份:仅备份上次完全备份以来变化的数据;

    在线:物理完全备份

还原:

        备份什么:
            数据、配置文件、二进制日志、事务日志

热备份:
    MyISAM: 温备份
    InnoDB: xtrabackup, mysqldump

MySQL --> 从:

物理备份:速度快
逻辑备份:速度慢、丢失浮点数精度;方便使用文本处理工具直接对其处理、可移植能力强;


备份策略:完全+增量;完全+差异
    
MySQL备份工具:
mysqldump: 逻辑备份工具、MyISAM(温)、InnoDB(热备份)
mysqlhotcopy:物理备份工具、温备份

文件系统工具:
cp:冷备
lv: 逻辑卷的快照功能,几乎热备;
    mysql> FLUSH TABLES;
    mysql> LOCK TABLES

    创建快照:释放锁,而后复制数据

    InnoDB:

第三组工具:
    ibbackup: 商业工具
    xtrabackup: 开源工具



mysqldump: 逻辑备份
    mysqldump(完全备份)+ 二进制日志  锁表:flush tables with read lock 滚动二进制日志:flush logs
    完全+增量:

备份单个数据库,或库中特定表
    mysqldump DB_NAME [tb1] [tb2]   不包含创建数据库的命令,还原时候必须指定数据库,也可以只备份单张表
    

--master-data=http://www.mamicode.com/{0|1|2}
    0: 不记录二进制日志文件及路位置;
    1:以CHNAGE MASTER TO的方式记录位置,可用于恢复后直接启动从服务器;
    2:以CHANGE MASTER TO的方式记录位置,但默认为被注释;

--lock-all-tables:锁定所有表

--flush-logs: 执行日志flush;

如果指定库中的表类型均为InnoDB,可使用--single-transaction启动热备,不用再使用lock和flush;


备份多个库:
    --all-databases: 备份所有库,保存创建库的命令
    --databases DB_NAME,DB_NAME,...: 备份指定库,保存创建库的命令

    --events:备份事件调度器
    --routines:备份存储过程和函数的
    --triggers:备份触发器
    
以下备份保留创建数据库:
 mysqldump -uroot -p --lock-all-tables --flush-logs --all-databases --master-data=http://www.mamicode.com/2 > /root/all.sql

备份策略:每周完全+每日增量
    完全备份:mysqldump
    增量备份:备份二进制日志文件(flush logs)

    手动模拟:
    mysqldump -uroot -p --master-data=http://www.mamicode.com/2 --flush-logs --all-databases --lock-all-tables > /root/alldatabases.sql
    
    第一天全量备份之后,添加删除数据,
    第二天做增量备份:flush logs
    mysqlbinlog mysql-bin.000006 > /root/mon-increamental.sql
    增加删除数据,而后数据库数据全没了,但二进制文件依然保留
    还原数据:
    (1)初始化库后启动mysqld
    (2)还原全库 mysql -uroot -p < alldatabases.sql
    (3)还原第一天增量备份 mysql -uroot -p < mon-increamental.sql
    (4)还原当天的数据 mysqlbinlog mysql-bin.000007 | mysql -uroot -p
    做成脚本,一个是全量,一个是增量

MySQL的备份和还原