mysqldump+二進制日誌備份恢復

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 |
    +----+----------+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章