binlog數據恢復 日誌備份

# 1. 查看是否開啓

show variables like 'log_bin';
 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

# 2. 開啓
a.  xx.cnf 中配置
    log_error=mysql_error.log
    
    binlog_format           = MIXED  // binlog日誌格式,mysql默認採用statement,建議使用mixed
    log-bin                 = /data/mysql/mysql-bin.log    // binlog日誌文件
    expire_logs_days        = 7                           // binlog過期清理時間
    max_binlog_size         = 100m                       // binlog每個日誌文件大小
    binlog_cache_size       = 4m                        // binlog緩存大小
    max_binlog_cache_size   = 512m                     // 最大binlog緩存大小
    
b. 命令
    set global log_bin=mysql_bin
    
# 注意
    請注意,每次重啓MySQL服務也會生成一個新的二進制日誌文件,相當於二進制日誌切換。
    切換二進制日誌時,你會看到這些number會不斷遞增。
    另外,除了這些二進制日誌文件外,你會看到還生成了一個mysql_bin_log.index的文件,
    這個文件中存儲所有二進制日誌文件的清單又稱爲二進制文件的索引。

# 3. 二進制日誌刪除
    # 查看日誌清單
        show binary logs;
    # 刪除某個日誌之前的所有二進制日誌文件
        purge binary logs to 'mysql_bin_log.000002';
    # 清除某個時間點以前的二進制日誌文件
        purge binary logs before '2017-03-10 10:10:00';
    # 清除7天前的二進制日誌文件
        purge master logs before date_sub( now( ), interval 7 day);
    # 也可以設置expire_logs_days參數,設置自動清理,其默認值爲0,表示不啓用過期自動刪除功能。
    # 如果啓用了自動清理功能,表示超出此天數的二進制日誌文件將被自動刪除,
    # 自動刪除工作通常發生在MySQL啓動時或FLUSH日誌時。
    
# 4. 查看二進制內容  character-set-server = utf8         a. 使用show binlog events方式可以獲取當前以及指定binlog的日誌,不適宜提取大量日誌
    SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
    
    b. 命令查看  需要參數解碼:--base64-output=decode-rows
        ./bin/mysqlbinlog ./mysql-bin.000003
        ./bin/mysqlbinlog --no-defaults ./mysql-bin.000003 > a.sql
        
##### 生成新的日誌
    flush logs;
    
###### 日誌使用數據恢復
    --skip-gtids=true
    
    # 指定查看某個庫
    mysqlbinlog ./mysql-bin.xxx -d database_name > a.sql
    
    # 過濾sql語句
    cat a.sql | grep -v "#"  | tr "\r\n" " " | tr ";" "\n" | grep -iE "create" | sed "s/\/\*\!\*\//;/g" > t.sql
    
    # 常用參數選項解釋:
    --start-position=875 起始pos
    --stop-position=954 結束pos
    --start-datetime="2016-9-25 22:01:08" 起始時間點
    --stop-datetime="2019-9-25 22:09:46" 結束時間點
    --database=zyyshop 指定只恢復zyyshop數據庫(一臺主機上往往有多個數據庫,只限本地log日誌)
    --base64-output=decode-rows 如果binlogrow,需要參數解碼:--base64-output=decode-rows -v

    # 恢復
    1. 從指定一個日誌恢復
    mysqlbinlog ./mysql-bin.000003 --skip-gtids=true | mysql -uroot -p -P3307
    
    2. 指定節點恢復
    mysqlbinlog ./mysql-bin.000004 --start-position=251 --stop-position=381 --skip-gtids=true | mysql -uroot -p -P3307
    
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                               |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000004 |   4 | Format_desc    |         2 |         123 | Server ver: 5.7.18-log, Binlog ver: 4                              |
| mysql-bin.000004 | 190 | Gtid           |         2 |         251 | SET @@SESSION.GTID_NEXT= 'fb3f6789-4209-11e8-b23e-525400b13db7:19' |
| mysql-bin.000004 | 251 | Query          |         2 |         381 | CREATE DATABASE `test` /*!40100 COLLATE 'utf8_general_ci' */       |
| mysql-bin.000004 | 381 | Gtid           |         2 |         442 | SET @@SESSION.GTID_NEXT= 'fb3f6789-4209-11e8-b23e-525400b13db7:20' |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+


###### 訪問遠程binlog
    mysqlbinlog -uroot -p111111 -h192.168.5.120 -P3307 --read-from-remote-server mysql-bin.000001##### 從遠程備份到本地    mysqlbinlog --read-from-remote-server --raw --host=192.168.5.120 --port=3307 --user=root --password=xxxxx --stop-never mysql-bin.000001
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章