mysql中binlog日志及備份恢復


MySQL數據庫備份和恢復主要是使用 mysqldump 和 mysqlbinlog 來完成

mysqldump工具的使用

例子:

1:備份一個或者多個庫

[root@iZ231tx6fm4Z local]# bin/mysqldump -u root -p db1 db2 db3 > /home/dbbak.sql

2: 備份所有庫

[root@iZ231tx6fm4Z local]# bin/mysqldump -u root -p --all-database > /home/dbbak.sql

mysqldump的主要參數如下:

-A, --all-databases :備份所有數據庫,含create database
-B, -databases db_name… :指定備份的數據庫,包括create database語句
-E, --events:備份相關的所有event scheduler
-R, --routines:備份所有存儲過程和存儲函數
-x, --lock-all-tables :鎖定數據庫中所有的表.
-l, --lock-tables :對於每個要dump的數據庫,在dump之前鎖定所有要dump的表,默認為on,--skip-lock-tables選項可禁用
  對於MyISAM下,用Read Local鎖定的表是允許insert操作的,對於支持事務的表例如InnoDB,--single-transaction是一個更好的選擇,因為它根本不需要鎖定表。
--triggers:備份表相關的觸發器,默認啟用,用--skip-triggers,不備份觸發器
--master-data[=#]: 此選項須啟用二進制日志
  1:所備份的數據之前加一條記錄為change master to語句,非注釋,不指定#,默認為1
  2:記錄為注釋的change master to語句
  此選項會自動關閉--lock-tables功能,自動打開--lock-all-tables功能(除非開啟--single-transaction)
--single-transaction : 該選項Innodb中推薦使用,不適用MyISAM,
  此選項會開始備份前,先執行START TRANSACTION指令開啟事務此選項通過在單個事務中轉儲所有表來創建一致的快照。
  僅適用於存儲在支持多版本控制的存儲引擎中的表(目前只有InnoDB可以); 轉儲不保證與其他存儲引擎保持一致。
  在進行單事務轉儲時,要確保有效的轉儲文件(正確的表內容和二進制日志位置),
  沒有其他連接應該使用以下語句:ALTER TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE此選項和--lock-tables(此選項隱含提交掛起的事務)選項是相互排斥備份大型表時,建議將--single-transaction選項和--quick結合一起使用
-F, --flush-logs :備份前滾動日志,鎖定表完成后,執行flush logs命令,生成新的二進制日志文件,配合-A時,會導致刷新多次數據庫,
  在同一時刻執行轉儲和日志刷新,則應同時使用--flush-logs和-x,--master-data或-single-transaction,此時只刷新一次
  建議:和-x,--master-data或 --single-transaction一起使用
--compact :去掉注釋,適合調試,生產不使用
-d, --no-data :只備份表結構
-t, --no-create-info :只備份數據,不備份create table
-n, --no-create-db :不備份create database,可被-A或-B覆蓋
--flush-privileges :備份mysql或相關時需要使用
-f, --force :忽略SQL錯誤,繼續執行
--hex-blob :使用十六進制符號轉儲二進制列(例如,“abc”變為0x616263),受影響的數據類型包括BINARY, VARBINARY,BLOB,BIT
-q, --quick :不緩存查詢,直接輸出,加快備份速度
-X, --xml :將數據庫dump為一個xml格式的文件(還原時也要加上此參數)

 一個比較好的全量備份一個庫的方式:

[root@iZ231tx6fm4Z local]# bin/mysqldump -uroot -proot -B -F --single-transaction --master-data=1 dbname | gzip > /user/databak/dbtest-bak.sql.gz

全量還原:

[root@iZ231tx6fm4Z local]# bin/mysql -h192.068.0.12 -uroot -proot dbname < /user/databak/dbtest-bak.sql

  

MySQL的二進制日志可以說是MySQL最重要的日志了,它記錄了所有的DDL和DML(除了數據查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進制日志是事務安全型的。

一般來說開啟二進制日志大概會有1%的性能損耗(參見MySQL官方中文手冊 5.1.24版)。二進制有兩個最重要的使用場景:
其一:MySQL Replication在Master端開啟binlog,Master把它的二進制日志傳遞給slaves來達到master-slave數據一致的目的。
其二:自然就是數據恢復了,通過使用mysqlbinlog工具來使恢復數據。

二進制日志包括兩類文件:二進制日志索引文件(文件名后綴為.index)用於記錄所有的二進制文件,二進制日志文件(文件名后綴為.00000*)記錄數據庫所有的DDL和DML(除了數據查詢語句)語句事件。

開啟binlog日志: 編輯 etc/my.cnf 配置文件

在[mysqld]中加入
server-id=1
log-bin=mysql-bin 確認是打開狀態(值 mysql-bin 是日志的基本名或前綴名);

重啟mysqld服務

登錄mysql服務器, 查看二進制日志是否已開啟

常用binlog日志操作命令

1.查看所有binlog日志列表
mysql> show master logs;

2.查看master狀態,即最后(最新)一個binlog日志的編號名稱,及其最后一個操作事件pos結束點(Position)值
mysql> show master status;

3.刷新log日志,自此刻開始產生一個新編號的binlog日志文件
mysql> flush logs;
注:每當mysqld服務重啟時,會自動執行此命令,刷新binlog日志;在mysqldump備份數據時加 -F 選項也會刷新binlog日志;

4.重置(清空)所有binlog日志
mysql> reset master;

mysqlbinlog工具的使用

binlog是二進制文件,普通文件查看器cat,vim等都無法打開,必須使用自帶的mysqlbinlog命令查看 

[root@iZ231tx6fm4Z local]# mysqlbinlog /var/lib/mysql/mysql-bin.000001

 上面這種辦法讀取出binlog日志的全文內容較多,不容易分辨查看pos點信息,這里介紹一種更為方便的查詢命令:

show binlog 格式如下:
show binlog events   [IN 'log_name']   [FROM pos]   [LIMIT [offset,] row_count];

選項解析:
IN 'log_name' 指定要查詢的binlog文件名(不指定就是第一個binlog文件)
FROM pos 指定從哪個pos起始點開始查起(不指定就是從整個文件首個pos點開始算)
LIMIT [offset,] 偏移量(不指定就是0)
row_count 查詢總條數(不指定就是所有行)

這條語句可以將指定的binlog日志文件,分成有效事件行的方式返回,並可使用limit指定pos點的起始偏移,查詢條數;

1.查詢第一個(最早)的binlog日志:
mysql> show binlog events;

2.指定查詢 mysql-bin.000021 這個文件:
mysql> show binlog events in 'mysql-bin.000021';

3.指定查詢 mysql-bin.000021 這個文件,從pos點:8224開始查起:
mysql> show binlog events in 'mysql-bin.000021' from 8224;

4.指定查詢 mysql-bin.000021 這個文件,從pos點:8224開始查起,查詢10條
mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 10;

5.指定查詢 mysql-bin.000021 這個文件,從pos點:8224開始查起,偏移2行,查詢10條
mysql> show binlog events in 'mysql-bin.000021' from 8224 limit 2,10\G;

用mysqlbinlog將查詢到的數據導入到mysql中

[root@iZ231tx6fm4Z local]# bin/mysqlbinlog --start-position=245 --stop-position=582 /var/lib/mysql/master-bin.000009 | mysql -uroot -proot

 

https://www.cnblogs.com/martinzhang/p/3454358.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM