以前備份binlog時,都是先在本地進行備份壓縮,然后發(fā)送到遠程服務器中。但是這其中還是有一定風險的,因為日志的備份都是周期性的,如果在某個周期中,服務器宕機了,硬盤損壞了,就可能導致這段時間的binlog就丟失了。
而且,以前用腳本對遠程服務器進行備份的方式,有個缺點:無法對MySQL服務器當前正在寫的二進制日志文件進行備份。所以,只能等到MySQL服務器全部寫完才能進行備份。而寫完一個binlog的時間并不固定,這就導致備份周期的不確定。
從MySQL5.6開始,mysqlbinlog支持將遠程服務器上的binlog實時復制到本地服務器上。
mysqlbinlog的實時二進制復制功能并非簡單的將遠程服務器的日志復制過來,它是通過MySQL 5.6公布的Replication API實時獲取二進制事件。本質上,就相當于MySQL的從服務器。與普通服務器類似,主服務器發(fā)生事件后,一般都會在0.5~1秒內進行備份。
備份命令
解釋如下:
--read-from-remote-server:用于備份遠程服務器的binlog。如果不指定該選項,則會查找本地的binlog。
--raw:binlog日志會以二進制格式存儲在磁盤中,如果不指定該選項,則會以文本形式保存。
--user:復制的MySQL用戶,只需要授予REPLICATION SLAVE權限。
--stop-never:mysqlbinlog可以只從遠程服務器獲取指定的幾個binlog,也可將不斷生成的binlog保存到本地。指定此選項,代表只要遠程服務器不關閉或者連接未斷開,mysqlbinlog就會不斷的復制遠程服務器上的binlog。
mysql-bin.000001:代表從哪個binlog開始復制。
除了以上選項外,還有以下幾個選項需要注意:
--stop-never-slave-server-id:在備份遠程服務器的binlog時,mysqlbinlog本質上就相當于一個從服務器,該選項就是用來指定從服務器的server-id的。默認為-1。
--to-last-log:代表mysqlbinlog不僅能夠獲取指定的binlog,還能獲取其后生成的binlog,獲取完了,才終止。如果指定了--stop-never選項則會隱式打開--to-last-log選項。
--result-file:用于設置遠程服務器的binlog,保存到本地的前綴。譬如對于mysql-bin.000001,如果指定--result-file=/test/backup-,則保存到本地后的文件名為/test/backup-mysql-bin.000001。注意:如果將--result-file設置為目錄,則一定要帶上目錄分隔符“/”。譬如--result-file=/test/,而不是--result-file=/test,不然保存到本地的文件名為/testmysql-bin.000001。
不足:
這個方式有個問題,對于常規(guī)的主從復制來說,如果主從直接的連接斷開了,則從會自動再次連接,而對于mysqlbinlog,如果斷開了,并不會自動連接。
新聞熱點
疑難解答
圖片精選