91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySql備份時怎么保持數據一致性

發布時間:2021-07-24 17:00:02 來源:億速云 閱讀:244 作者:Leah 欄目:MySQL數據庫

這期內容當中小編將會給大家帶來有關MySql備份時怎么保持數據一致性,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。


1、直接拷貝整個數據目錄下的所有文件到新的機器。優點是簡單、快速,只需要拷貝;缺點也很明顯,在整個備份過程中新機器處于完全不可用的狀態,且目的無法釋放源數據文件中因為碎片導致的空間浪費和無法回收已發生擴展的innodb表空間。

2、用xtrabackup進行熱備。優點是備份過程中可繼續提供服務;缺點和第一種方法差不多,目的分區無法釋放源數據文件中因為碎片導致的空間浪費和無法回收已發生擴展的innodb表空間。

3、使用官方自帶的mysqldump邏輯重做。優點是在整個備份過程中可以向外提供服務,最重要的一點是可以解決碎片浪費。

以上幾種方法相信大家也都很熟悉,就不再詳細介紹。下面主要講解一下mysqldump備份時如何保持數據的一致性。

mysqldump對不同類型的存儲引擎,內部實現也不一樣。主要是針對兩種類型的存儲引擎:支持事務的存儲引擎(如InnoDB)和不支持事務的存儲引擎(如MyISAM),下面分別看看這兩種存儲引擎的實現:

1、對于支持事務的引擎如InnoDB,參數上是在備份的時候加上--single-transaction保證數據一致性
--single-transaction實際上通過做了下面兩個操作:
①、在開始的時候把該session的事務隔離級別設置成repeatable read;
②、然后啟動一個事務(執行bigin),備份結束的時候結束該事務(執行commit)
有了這兩個操作,在備份過程中,該session讀到的數據都是啟動備份時的數據(同一個點)。可以理解為對于innodb引擎來說加了該參數,備份開始時就已經把要備份的數據定下來了,備份過程中的提交的事務時是看不到的,也不會備份進去。

2、對于不支持事務的引擎如MyISAM,只能通過鎖表來保證數據一致性,這里分三種情況:
①、導出全庫:加--lock-all-tables參數,這會在備份開始的時候啟動一個全局讀鎖(執行flush tables with read lock),其他session可以讀取但不能更新數據,備份過程中數據沒有變化,所以最終得到的數據肯定是完全一致的;
②、導出單個庫:加--lock-tables參數,這會在備份開始的時候鎖該庫的所有表,其他session可以讀但不能更新該庫的所有表,該庫的數據一致;
③、導出單個表:加--lock-tables參數,這會在備份開始的時候鎖該表,其他表不受影響,該表數據一致

上面只是展示了對不同引擎來講加的參數只是為了讓數據保持一致性,但在備份中業務并沒有停止,時刻可能有新的數據進行寫入,為了讓我們知道備份時是備份了哪些數據,或者截止到那個指針(二進制日志),我們可以再加入 --master-data參數,備份好的sql文件就會記錄從備份截至到哪個指針,指針之后的數據更新我們可以通過二進制日志進行恢復。

# mysqldump -u root -p --single-transaction --master-data --flush-log --database test > test.sql                             --> --flush-log 表示備份開始之后的更行都切到下一個二進制日志

可以在備份的test.sql文件中前幾行看到記錄著備份當時的二進制日志信息

# vim test.sql
--CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=436263492;
---- Current Database: `test`
.....
# mysqlbinlog --start-position=436263492 mysql-bin.000004 > 00004.sql                     -->在全備恢復之后,我們可以通過之后的二進制日志進行恢復

另外解釋下mysqldump備份時為什么要鎖表才能保持數據的一致性:

MySql備份時怎么保持數據一致性

說明:

1、在t1時間點,用mysqldump啟動不鎖表備份;

2、先導出a表,共耗時5分鐘,因為沒有鎖表,在這5分鐘內b表insert了10行數據;

3、到了t2時間點,a表導出完成,開始導出b表;

4、導出b表耗時10分鐘,在導出b表的過程中,a、b表均沒有數據變化;

5、到了t3時間點,b表導出完成,全部備份結束;

6、然后備機從t1時間點的binlog位置開始應用binlog,最后備機中b表的數據比主機多10行,數據不一致。

上述就是小編為大家分享的MySql備份時怎么保持數據一致性了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湘阴县| 定兴县| 沾益县| 惠来县| 双桥区| 湟中县| 汨罗市| 富锦市| 酉阳| 浏阳市| 长治市| 八宿县| 武安市| 靖西县| 永宁县| 宜兴市| 长沙县| 蒙自县| 曲靖市| 温宿县| 尉氏县| 沂水县| 庆元县| 蒙城县| 东明县| 广丰县| 北宁市| 天津市| 甘泉县| 沂南县| 桃园市| 左贡县| 邵武市| 循化| 彭州市| 鹤庆县| 江陵县| 阳泉市| 江西省| 玛纳斯县| 徐闻县|