2017-09-01 84 views
4

我試圖從Azure Database for MySQL Server自動化所有數據庫的mysql轉儲。數據庫的當前大小:使用mysqldump緩慢寫入數據庫

mysql> SELECT table_schema "DB Name", Round(Sum(data_length + index_length)/1024/1024, 1) "DB Size in MB" 
     FROM information_schema.tables GROUP BY table_schema; 
+--------------------+---------------+ 
| DB Name   | DB Size in MB | 
+--------------------+---------------+ 
| db1    |   278.3 | 
| db2    |   51.8 | 
| information_schema |   0.2 | 
| mysql    |   8.9 | 
| performance_schema |   0.0 | 
| db3    |   43.3 | 
| sys    |   0.0 | 
+--------------------+---------------+ 
7 rows in set (31.80 sec) 

我有一個python腳本,在不同的虛擬機,調用mysqldump所有這些轉儲到一個文件中。但是,我遇到了db1的問題。它被轉儲到一個文件中,但速度很慢,在30分鐘內低於〜4MB。然而,db2db3幾乎立即被轉儲,以秒爲單位。

我已經嘗試了所有的下列選項和組合,看是否寫入速度的變化,但它並不:

--compress 
--lock-tables (true/false) 
--skip-lock-tables 
--max-allowed-packet (512M) 
--quick 
--single-transaction 
--opt 

我目前甚至沒有使用腳本,只是運行中的命令一個外殼,結果相同。

mysqldump -h <host> -P <port> -u'<user>' -p'<password>' db1 > db1.sql 

db1有〜500個表格。

據我所知,它大於db2db3但它不是那麼多,我想知道是否有人知道這裏可能是什麼問題?

編輯

這些有用的答案,谷歌的研究後表明,該數據庫是最有可能的罰款,我通過複製服務器上的db1數據庫到測試數據庫,然後逐個刪除表一個運行測試減小尺寸。在大約50MB的時候,寫入變得像其他數據庫一樣。這讓我相信Azure中會有一些限制,因爲數據庫沒問題,我們會和他們的支持團隊一起討論。我在Google上也發現了很多關於Azure數據庫速度的帖子。

與此同時,我將腳本更改爲忽略大型數據庫。我們將嘗試將數據庫移動到由Azure提供的SQL Server或帶有mysql服務器的簡單虛擬機,以查看哪裏可以獲得更好的性能。

回答

2

它可能在MySQL服務器端很慢,但似乎不太可能。您可以打開第二個shell窗口,連接到MySQL並使用SHOW PROCESSLISTSHOW ENGINE INNODB STATUS來檢查停滯的查詢或鎖定。

如果你的數據存儲速度非常慢,它也有可能在將數據寫入db1.sql時出現問題。但是4MB是30分鐘。是荒謬的。確保你保存到你正在運行mysqldump的實例的本地存儲。不要保存到遠程存儲。如果您正在編寫轉儲的存儲卷有其他繁重的I/O流量飽和,請注意,這可能會降低寫入速度。

另一種測試緩慢數據寫入的方法是嘗試mysqldump ... > /dev/null,如果速度很快,那麼這是一個很好的線索,表明緩慢是磁盤寫入的錯誤。

最後,網絡有可能導致緩慢。如果將轉儲文件保存到/ dev/null仍然很慢,我會懷疑網絡。


https://serverfault.com/questions/233963/mysql-checking-permission-takes-a-long-time的回答表明,在「檢查權限」慢度可能由具有在MySQL授權表(例如mysql.user)太多的數據而引起的。如果您擁有數千個用戶憑證,則可能是原因。您可以嘗試刪除這些條目(之後運行FLUSH HOSTS)。

+0

謝謝您的答覆。我將命令運行到'/ dev/null'並監視進程列表。在'db1'上,所有表按字母順序都有一個循環過程'檢查權限'。這個過程在'Time'列中顯示10-30,我相信這是每個​​表的秒數。在其他數據庫上運行相同的測試,時間總是0.我認爲這不是網絡問題,我認爲這個特定的數據庫有問題。 – tima

+0

是的,我看到了一個,但我們有4個用戶,其中一個是'mysql.sys',一個是我們正在使用的(應該​​是「admin」,所以有所有的授權),另外兩個是Azure擁有的超級用戶。 – tima

2

首先從數據庫創建備份。在此之後,試試這個:

這個
mysqlcheck 

更多信息:mysqlcheck

+0

謝謝你的迴應,但我已經運行過這個命令,所有的表都是'OK'。 – tima

+0

比你可以嘗試檢查磁盤。也許你有一個不好的區域,或者是導致輸出變慢的原因。 –