Mysql的binlog開啟
binlog 就是binary log,二進制日志文件,這個文件記錄了mysql所有的dml操作。通過binlog日志我們可以做數據恢復,做主住復制和主從復制等等。對於開發者可能對binlog並不怎么關注,但是對於運維或者架構人員來講是非常重要的。
如何開啟mysql的binlog日志呢?
在my.inf主配置文件中直接添加三行
- log_bin=ON
- log_bin_basename=/var/lib/mysql/mysql-bin
- log_bin_index=/var/lib/mysql/mysql-bin.index
三個參數來指定,
第一個參數是打開binlog日志
第二個參數是binlog日志的基本文件名,后面會追加標識來表示每一個文件
第三個參數指定的是binlog文件的索引文件,這個文件管理了所有的binlog文件的目錄
當然也有一種簡單的配置,一個參數就可以搞定
- log-bin=/var/lib/mysql/mysql-bin
這一個參數的作用和上面三個的作用是相同的,mysql會根據這個配置自動設置log_bin為on狀態,自動設置log_bin_index文件為你指定的文件名后跟.index
這些配置完畢之后對於5.7以下版本應該是可以了,但是我們這個時候用的如果是5.7及以上版本的話,重啟mysql服務會報錯。這個時候我們必須還要指定一個參數
- server-id=123454
隨機指定一個不能和其他集群中機器重名的字符串,如果只有一台機器,那就可以隨便指定了
有了上述的配置之后,我們就可以重新啟動我們的mysql了
service mysqld restart
啟動成功之后,我們可以登陸查看我們的配置是否起作用
- show variables like '%log_bin%'
下面我們可以找到這個目錄來看一下
因為我這里已經操作過數據庫了,所以能看到這里有多個mysql-bin的文件,還有一個mysql-bin.index的文件,我們可以打開這個文件來看一下
到這里,我們的binlog日志就打開了。
使用binlog恢復數據:http://blog.csdn.net/king_kgh/article/details/74890381
Mysql的binlog日志詳解
mysql5.7默認是不開啟binlog日志的,具體的開啟方式在開啟的筆記中查看。
binlog開啟成功之后,binlog文件的位置可以在my.inf配置文件中查看。也可以在mysql的命令行中查看。命令行查看代碼如下
show variables like '%log_bin%';
我們也可以看一下當前mysql的binlog的情況
show master status
每當我們重啟一次,會自動生成一個binlog文件,我們重啟完畢之后再來執行同樣的命令
存放binlog的目錄下也多個了這么一個文件。
當然,我們也可以手動的來刷新binlog文件,通過 flush logs,同樣會新創建一個binlog文件
如果我們想把這些文件全部清空,可以使用reset master 來處理
下面我來看針對單個文件的操作,首先我們想看一下文件的內容
找到binlog的目錄,比如我們要看mysql-bin-0001
vi mysql-bin-000001
我們看到的一堆亂碼。我們知道這是一堆的二進制文件,所以以文本的方式打開二進制文件一定是有問題的,那么我們該如何查看這個文件的內容呢?
mysql給我們提供了一個用於查看binlog日志的工具,叫做mysqlbinlog
這個文件比較長,一次打開看不完怎么辦呢,這里可以使用linux的管道,這里就不詳細的說了,可以自己去查找關於linux的一些知識。
注意到上面的截圖中有一個position字段,這個字段的值為154,這個表示的就是binlog當前的位置。我們每次執行dml操作,position都會改變。比如我們先來創建一個數據 test
在創建之前我們可以清一下binlog日志方便我們查看,可以使用 reset master。在生產環境中,這個操作是非常危險的,那么我們可以使用flush logs來處理,生成一個新的binlog文件。不管采用哪種方式,我們在測試的環境中,只要有一個新的binlog文件就可以了。生成了新的binlog文件之后,我們可以通過show master status 來查看狀態
下面我們來執行一個dml語句,比如我們要創建一個test數據庫
create database test;
然后我們來查看創建之后的狀態,如下,我們發現position從154變成了313,也就是說我們的操作是在154到313之間,然后我們再來看binlog的內容。
我們截取154到313之間的binlog的內容如下:
# at 154
#170708 9:24:02 server id 12345 end_log_pos 219 CRC32 0x30763ffe Anonymous_GTID last_committed=0 sequence_number=1
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#170708 9:24:02 server id 12345 end_log_pos 313 CRC32 0x4d0140b3 Query thread_id=5 exec_time=0 error_code=0
SET TIMESTAMP=1499477042/*!*/;
SET @@session.pseudo_thread_id=5/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create database test
/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
我們可以看到,mysql做了很多的隱含的操作,然后加粗的部分就是我們所執行的操作。
下面我們來簡單總結一下關於binlog:
1.binlog文件會隨服務的啟動創建一個新文件
2.通過flush logs 可以手動刷新日志,生成一個新的binlog文件
3.通過show master status 可以查看binlog的狀態
4.通過reset master 可以清空binlog日志文件
5.通過mysqlbinlog 工具可以查看binlog日志的內容
6.通過執行dml,mysql會自動記錄binlog
使用binlog恢復數據:http://blog.csdn.net/king_kgh/article/details/74890381
