您好,登錄后才能下訂單哦!
本文主要給大家簡單講講MySQL8.0的一些新特性,相關專業術語大家可以上網查查或者找一些相關書籍補充一下,這里就不涉獵了,我們就直奔主題吧,希望MySQL8.0的一些新特性這篇文章可以給大家帶來一些實際幫助。
此次,InnoDB重啟redo log歸檔功能,按照開發團隊的說法,主要是為了解決備份一致性的問題。文檔里是這么寫的:
Backup utilities that copy redo log records may sometimes fail to keep pacewith redo log generation while a backup operation is in progress, resultingin lost redo log records due to those records being overwritten. The redolog archiving feature addresses this issue by sequentially writing redo logrecords to an archive file. Backup utilities can copy redo log records fromthe archive file as necessary, thereby avoiding the potential loss of data. in lost redo log records due to those records being overwritten. The redo log archiving feature addresses this issue by sequentially writing redo log records to an archive file. Backup utilities can copy redo log records from the archive file as necessary, thereby avoiding the potential loss of data.
簡言之,就是備份速度跟不上redo log生成的速度,結果導致redo log被覆蓋了,然后備份就無法保證一致性。有了redo log歸檔,就可以在備份啟動時同步啟動redo log歸檔,備份結束時同步停止redo log歸檔,這樣就可以避免這個問題了,備份結束后可以利用這期間生成的redo log進行數據恢復。
想要啟用redo log歸檔功能,只需設置innodb_redo_log_archive_dirs
選項即可,該選項可支持在線動態修改,例如:
[root@yejr.me]> SET GLOBAL innodb_redo_log_archive_dirs = "redolog-archiving-for-backup:/data/mysql8-redologs/";
指定 /data/mysql8-redologs/
目錄作為redo log歸檔存放路徑,并且指定label為 "redolog-archiving-for-backup"
,也就是這是專用于備份的redo log歸檔存放目錄。
我們還可以指定另一個目錄用于未來基于redo log的物理復制用途(我瞎猜的,可能沒那么快實現)。
[root@yejr.me]> SET GLOBAL innodb_redo_log_archive_dirs = "redolog-archiving-for-backup:/data/mysql8-redologs1/;redolog-archiving-for-repl:/data/mysql8-redologs2";
選項innodb_redo_log_archive_dirs
可以指定多個目錄作為歸檔redo log存放位置。不過這個選項有幾個限制:
設置完后,就可以開始進行redo log歸檔了。
第一個參數是我們之前定義過的一個label,第二個參數是該label對應目錄下的子目錄,也就是 "/data/mysql8-redologs/20190722"
。我們在相應目錄下就可以看到這樣的redo log歸檔文件了:
[root@yejr.me]> ls -l /data/mysql8-redologs/20190722-r--r-----. 1 mysql mysql 0 Jul 22 20:54 archive.f0ff5743-97be-11e9-a5d6-0050568bba82.000001.log
文件名中常常的那串字符,就是本實例的UUID。此時文件的大小是0字節。
我們在另一個session發動一個sysbench oltp測試。執行完sysbench測試結束后,我們停止redo log歸檔工作:
[root@yejr.me]> DO innodb_redo_log_archive_stop();Query OK, 0 rows affected (0.00 sec)
我分別記錄了測試前后redo log LSN的變化如下:
# 測試前的LSNLOG---Log sequence number 27938813989...# 測試后的LSNLOG---Log sequence number 27945024531 --- Log sequence number 27938813989 ... # 測試后的LSN LOG --- Log sequence number 27945024531
兩次LSN的差值是:6210542 字節。
然后我們查看redo log歸檔文件大小是多少:
[root@yejr.me]> ls -l /data/mysql8-redologs/20190722-r--r-----. 1 mysql mysql 6213632 Jul 22 21:19 archive.f0ff5743-97be-11e9-a5d6-0050568bba82.000001.log
可以看到文件大小是 6213632 字節,和上面的 6210542 字節只相差了 3090 字節,和本次測試產生的redo log日志大小相當。后面我們就可以利用這個redo log做數據恢復之用了(不過,相應的官方工具還沒開發出來,拭目以待吧)。
一般情況下,redo log歸檔對性能的影響比較小(順序寫入),在大量高并發事務的場景下,可能對性能影響會稍大點,不過也不用太擔心,以后有機會我再做個性能對比測試吧。
MySQL8.0的一些新特性就先給大家講到這里,對于其它相關問題大家想要了解的可以持續關注我們的行業資訊。我們的板塊內容每天都會捕捉一些行業新聞及專業知識分享給大家的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。