mysql备份和恢复

完全备份、部分备份
    完全备份:备份整个数据集
    部分备份:只备份数据子集
完全备份、增量备份、差异备份  
    增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据
    差异备份:仅备份最近一次完全备份以来变化的数据
热备份、温备份、冷备份
    热备:读写操作均可执行
    温备:读操作可执行,但写操作不能
    冷备:读写操作均不可用进行

    MyISAM:温备,不能热备
    InnoDB:热备

物理备份、逻辑备份
    物理备份:直接复制数据文件进行备份
    逻辑备份:从数据库中“导出”数据另存而进行的备份;(与存储引擎无关)

备份内容:
    数据、二进制日志、InnoDB的事务日志、代码(存储过程、函数、触发器、事件调度器)、服务器配置文件

备份工具:
    mysqldump:逻辑备份工具,适用所有存储引擎,温备:完全备份、部分备份;对InnoDB存储引擎支持热备;
    cp,tar等复制归档工具:物理备份工具,适用于所有存储引擎,冷备。
    lvm2的快照:几乎热备:借组于文件系统管理工具进行备份
    mysqlhotcopy:几乎冷备:仅适用于MyISAM存储引擎

    1.myslqdump+复制binlog;
        mysqldump:完全备份(每周备份一次)
        复制binlog中指定时间范围的event:增量备份(每天)
    2.lvm2快照+复制binlog;
        lvm2快照:适用cp或tar进行物理完全备份
        复制binlog中指定时间范围的event:增量备份
    3.xtrabackup
        由percona提供的支出对InnoDB进行热备(物理备份)的工具;
            完全备份、增量备份;

mysqldump+二进制日志备份恢复:

    1.创建数据测试数据库,建立表,并插入数据。
    MariaDB [(none)]> create database Allen;
    Query OK, 1 row affected (0.00 sec)
    MariaDB [(none)]> use Allen;
    Database changed
    MariaDB [Allen]> create table test (id int auto_increment primary key,name varchar(20));
    Query OK, 0 rows affected (0.00 sec)

    MariaDB [Allen]> insert into test(name)values('laowang'),('laozhang'),('laoli');
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0

    MariaDB [Allen]> select * from test;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | laowang  |
    |  2 | laozhang |
    |  3 | laoli    |
    +----+----------+
    3 rows in set (0.00 sec)

    2.创建备份文件夹、完全备份数据
    [root@localhost ~]# mkdir /backup
    [root@localhost ~]# mysqldump --all-database --lock-all-tables --routines --triggers --master-data=2 --flush-logs >/backup/2018-1-4.sql
    [root@localhost ~]# ls /backup/
    2018-1-4.sql

    3.再次插入数据,插入完成之后删除test表。
    MariaDB [Allen]> insert into test (name)values('xiaoli');
    MariaDB [Allen]> insert into test (name)values('xiaoming');
    MariaDB [Allen]> select * from test;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | laowang  |
    |  2 | laozhang |
    |  3 | laoli    |
    |  4 | xiaoli   |
    |  5 | xiaoming |
    +----+----------+
    MariaDB [Allen]> drop table test;
    MariaDB [Allen]> show master status;
    +----------------------+----------+--------------+------------------+
    | File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +----------------------+----------+--------------+------------------+
    | mysql_bin_log.000008 |      808 |              |                  |
    +----------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)

    4.查看二进制日志文件删除test表时的序号为772.
    [root@localhost ~] mysqlbinlog -d Allen /var/lib/mysql/mysql_bin_log.000008
    # at 772
    #180104 18:10:03 server id 1  end_log_pos 879   Query   thread_id=11    exec_time=0     error_code=0
    SET TIMESTAMP=1515060603/*!*/;
    DROP TABLE `test` /* generated by server */
    /*!*/;
    DELIMITER ;
    # End of log file

    5.从二进制日志中提取后面插入的两条数据的相关二进制日志。
    [root@localhost ~] mysqlbinlog --stop-position=772 /var/lib/mysql/mysql_bin_log.000008 >/backup/test.sql

    6.恢复全备份数据再恢复刚刚提取出来的后面两条数据。
    MariaDB [Allen]> flush logs;
    MariaDB [Allen]> set session sql_log_bin=0;
    MariaDB [Allen]> source /backup/2018-1-4.sql
    MariaDB [Allen]> source /backup/test.sql
    MariaDB [Allen]> select * from test;
    +----+----------+
    | id | name     |
    +----+----------+
    |  1 | laowang  |
    |  2 | laozhang |
    |  3 | laoli    |
    |  4 | xiaoli   |
    |  5 | xiaoming |
    +----+----------+