2014-09-04 87 views
0

我一直在一個涉及Mysql和PHP的項目中工作。在創建包測試中,我已經出口MySQL數據庫從MySQL工作臺SQL文件,並導入到Linux機器上的MySQL服務器和導出和導入mysql數據庫的最佳做法是什麼?

mysql>source mydatabase.sql; 

這是導出正確的方式和進口的mysql數據庫?此外,數據庫文件還包含模式創建,插入數據和創建索引腳本。導入文件需要很長時間。我的直接經理建議我導出沒有索引和導入數據庫,然後執行索引創建腳本。這是正確的方式嗎?索引在導入數據庫時​​是否需要很長時間?

在此先感謝!

+0

這聽起來對於我來說,無論哪種方式,你的時間都會被索引表所消耗。無論如何,這似乎是正確的。你只有其他的選擇是做一個SELECT INTO另一個數據庫。這可能甚至可能不可能。但它應該節省時間。 – durbnpoisn 2014-09-04 18:26:40

回答

1

導出取決於您正在運行的MySQL版本/供應商!

  • 的MySQL(舊版本) - 使用mysqldump的
  • 的MySQL(Percona的) - 使用XtraBackup
  • 的MySQL(EE - 5.6) - 使用MySQL企業備份這是更復雜的 和快得多。

最快的方法是避免mysqldump。

我喜歡Percona而不是其他人!
另一種更高級的方式,我認爲是在目標服務器上創建數據庫,並直接複製數據庫文件。假設用戶有權訪問目標服務器的mysql目錄:
作爲root用戶:這裏

[[email protected]]# /etc/init.d/mysqld stop 
[[email protected]]# cd /var/lib/mysql/[databasename] 
[[email protected]]# scp * [email protected]:/var/lib/mysql/[databasename] 
[[email protected]]# /etc/init.d/mysqld start 

重要的事情是:複製DB文件之前停止這兩個服務器上的mysqld,確保文件的所有權和權限是正確的在目標服務器上啓動mysqld之前在目標上。

[[email protected]]# chown mysql:mysql /var/lib/mysql/[databasename]/* 
[[email protected]]# chmod 660 /var/lib/mysql/[databasename]/* 
[[email protected]]# /etc/init.d/mysqld start 

隨着時間的推移在這兒你的優先級,壓縮的使用將取決於時間是否失去了等待的壓縮/解壓縮(用類似的gzip)會比浪費傳輸未壓縮數據的時間更大;也就是連接的速度。

1

Percona Server附帶修改後的mysqldump工具,因此您可以選擇--innodb-optimize-keys選項。這會導出表格,數據和索引定義,如股票mysqldump,但是在導入期間,它會推遲創建二級索引,直到之後的數據已被加載到表中。這利用了InnoDB的fast index creation功能。

另一種選擇是使用物理備份工具,如提到的Percona XtraBackup(如user @Up_One)。這意味着將備份完整的數據文件,包括索引。在恢復時,不需要重建,因爲索引已經填充。使用物理備份工具也有優點和缺點,但恢復時間是一大優勢。

相關問題