mysql數據庫還原慢(sqlserver數據庫寫入慢)

本文目錄一覽:

MySQL數據庫服務器逐漸變慢 該如何分析與解決

MySQL 在崩潰恢復時,會遍歷打開所有 ibd 文件的 header page 驗證數據字典的準確性,如果 MySQL 中包含了大量表,這個校驗過程就會比較耗時。 MySQL 下崩潰恢復確實和表數量有關,表總數越大,崩潰恢復時間越長。另外磁盤 IOPS 也會影響崩潰恢復時間,像這裡開發庫的 HDD IOPS 較低,因此面對大量的表空間,校驗速度就非常緩慢。另外一個發現,MySQL 8 下正常啟用時居然也會進行表空間校驗,而故障恢復時則會額外再進行一次表空間校驗,等於校驗了 2 遍。不過 MySQL 8.0 里多了一個特性,即表數量超過 5W 時,會啟用多線程掃描,加快表空間校驗過程。

如何跳過校驗MySQL 5.7 下有方法可以跳過崩潰恢復時的表空間校驗過程嘛?查閱了資料,方法主要有兩種:

1. 配置 innodb_force_recovery可以使 srv_force_recovery != 0 ,那麼 validate = false,即可以跳過表空間校驗。實際測試的時候設置 innodb_force_recovery =1,也就是強制恢復跳過壞頁,就可以跳過校驗,然後重啟就是正常啟動了。通過這種臨時方式可以避免崩潰恢復後非常耗時的表空間校驗過程,快速啟動 MySQL,個人目前暫時未發現有什麼隱患。2. 使用共享表空間替代獨立表空間這樣就不需要打開 N 個 ibd 文件了,只需要打開一個 ibdata 文件即可,大大節省了校驗時間。自從聽了姜老師講過使用共享表空間替代獨立表空間解決 drop 大表時性能抖動的原理後,感覺共享表空間在很多業務環境下,反而更有優勢。

臨時冒出另外一種解決想法,即用 GDB 調試崩潰恢復,通過臨時修改 validate 變量值讓 MySQL 跳過表空間驗證過程,然後讓 MySQL 正常關閉,重新啟動就可以正常啟動了。但是實際測試發現,如果以 debug 模式運行,確實可以臨時修改 validate 變量,跳過表空間驗證過程,但是 debug 模式下代碼運行效率大打折扣,反而耗時更長。而以非 debug 模式運行,則無法修改 validate 變量,想法破滅。

如何有效地提高 MySQL 的備份和恢復速度

一 加速備份

1、 加了single-transaction參數 備份時 需要先flush table with read lock 這個過程中會有一個鎖表的過程,如果有事務或語句正在執行,沒有結束,那麼備份進程會一直等待,並且阻塞別的事務,那麼也會影響業務。所以要先確認備份的時候沒有大的事務在運行。具體 single-transaction的加鎖可以參考 我的博客:mysqldump備份時加single-transaction會不會加鎖

2 、mysqldump是單進程的,沒有辦法並行,但現在機器的瓶頸多是出現在IO方面,可以使用更了的IO設備加快速度

3 、mysqldump時如果空間夠的話,不要邊壓縮邊備份

二 加速恢復

1 關閉binlog:不寫入Binlog會大大的加快數據導入的速度

2 innodb_flush_log_at_trx_commit=0

3 更好的配置

建議:

如果非要使用邏輯備份,可以考慮mysqldumper, mysqlpump(5.7)這兩個工具去備份,這兩個在備份的時候支持並行操作,mysqldumper還可以對單表進行恢復,在只需要恢復單表的情況下,恢復速度會大大加快

使用物理備份 xtrabackup (open source),MEB(oracle提供,收費): 他們的備份原理是基於mysql crash recover, 備份速度 是和邏輯備份的相差不太大。但是恢復速度卻有很大的提升。

邏輯備份 備出來的是sql語句文件,恢復時需要一條一條的執行sql,所以恢復很慢。

而物理備份和還原的速度 相當於直接copy文件,所以恢復的時候性能有很大的提升

並且這兩個軟件還支持並行,效果更好。

邏輯備份最大的優點是 備份好的文件經壓縮後佔用空間較小,最大缺點恢復太慢

物理備份可以很快的恢復,但是備份好的文件壓縮後佔用空間比邏輯備份要大。

二、打開Navicat—連接—Mysql 三、填寫數據庫連接信息 四、導出數據庫文件雙擊打開創建的連接—選擇您的數據庫—右鍵點擊—選擇”轉儲SQL文件”,即可將數據庫導入成.sql文件五、 導入數據庫文件 1)雙擊打開創建的連接—選擇您的數據庫—右鍵點擊—選擇”運行SQL文件”2)選擇您的數據庫備份文件以及備份文件的編碼,默認選擇的編碼為65001 (UTF-8)。如果導入失敗,可以刪除失敗的表,嘗試選擇936( Simplified Chinese GBK ) 再次導入 3)如果進度條顯示完成,並且沒有提示錯誤,則成功導入。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/272298.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-17 13:55
下一篇 2024-12-17 13:55

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL數據庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論