遷移MySQL資料庫通常只需要幾個簡單的步驟,但是由於您要轉移的數據量可能比較龐大,因此一般耗時也會比較長。
下面的步驟將指導您如何從舊的伺服器上導出MySQL資料庫,對它進行安全加固;然後將其復制並導入到新的伺服器上,以保證數據的完整。
將MySQL資料庫導出至轉儲文件(mp file)
Oracle提供了一個名為mysqlmp的工具,允許您輕松地將資料庫結構和其數據導出到一個SQL的轉儲文件。您可以使用如下的命令:
1.mysqlmp -u root -p --opt [database name] > [database name].sql
不過,請注意如下幾點:
我們可以使用--single-transaction的標志,以避免資料庫在導出數據的過程中被鎖死。這樣能夠在將數據導出到轉儲文件的同時,您仍可繼續在舊的資料庫上更新數據。不過請注意,那些在導出進程已經開始之後被更新的數據,是不會被導入轉儲文件之中的。
在運行該命令之前,請務必將[database name]替換成您的實際資料庫名稱。
請輸入您自己的用戶名和相對應的密碼,並確保該用戶具有備份資料庫所需的許可權。
安全加固備份文件
在大多數情況下,數據是一家企業的最重要的資產。因此,我們不希望資料庫的各種備份被暴露在不受保護的伺服器上,因為這樣有可能會造成錯誤地泄露,甚至會出現被黑客竊取等更為糟糕的狀況。
因此,通常您可以嘗試的做法是:壓縮、加密文件,然後刪除原文件。在Linux操作系統上,請使用以下的命令對已壓縮文件進行加密:
1.zip --encrypt mp.zip db.sql
在壓縮開始之前,系統將提示您輸入密碼。
傳輸備份文件
至此,我們已經獲得了一個加密的轉儲文件。下面讓我們通過網路使用SCP命令,將其傳輸到新的伺服器上:
1.scp /path/to/source-file user@host:/path/to/destination-folder/
將MySQL轉儲導入新伺服器
通過上面一步,我們已將備份文件傳到了新的伺服器上,下面讓我們來進行解密和提取:
1.unzip -P your-password mp.zip
為了存儲空間和安全方面的原因,一旦文件導入成功,請記得刪除其對應的轉儲文件。
您可以使用以下的命令來導入文件:
1.mysql -u root -p newdatabase < /path/to/newdatabase.sql
在新伺服器上驗證導入的數據
現在我們在新伺服器上已經導入了資料庫,那麼我們就需要一種方法來驗證數據的真實存在,並確保沒有任何遺漏。
我建議您同時在舊的和新的資料庫上運行如下查詢,並將獲得的結果進行對比。
該查詢會在所有的表裡計算行數,以顯示出新、舊資料庫中的數據量。
1.SELECT
2.TABLE_NAME,
3.TABLE_ROWS
4.FROM
`
5.information_schema`.`tables`
6.WHERE
`
7.table_schema` = 'YOUR_DB_NAME';
此外,我建議您檢查各個表中數字列的MIN和MAX記錄,以確保數據本身是有效的,而不僅僅是看數據的總量(雖然這是查詢所唯一能夠讀出的值)。另一種可供測試的選擇是將資料庫從新的伺服器導出為SQL轉儲文件,並將其與舊伺服器的SQL轉儲文件做比較。
此外,在應用程序被遷移之前,我建議您先將一個應用程序的實例重定向到新的資料庫上,以確認一切運行正常。
另一種導出和導入的選項
我們之所以把該選項放在最後,是因為我們的確不建議您去使用它。
該方法實現起來非常的容易,因為它僅使用一個命令,便能一次性將轉儲文件導出、傳輸、並將其數據導入到新的資料庫之中。
而它的不足之處在於,一旦其網路鏈接斷掉,您就需要重新啟動它了。
因此,我們認為它並不值得被推薦,尤其是在大型資料庫中,可能會非常不適用。
當然,如果您非要嘗試一下的話,可以使用如下的命令:
1.mysqlmp -u root -pPassword --all-databases | ssh user@new_host.host.com 'cat - | mysql -u root -pPassword'
重要提示
請確保在新舊兩處,安裝有相同官方發行版本的MySQL伺服器。否則,你需要按照MySQL網站上的升級說明來進行統一(請參見(https://dev.mysql.com/doc/refman/5.7/en/upgrading.html)。
請確保您在舊的伺服器上擁有足夠的空間來保存轉儲文件和壓縮文件(應該有db_size×2的空間)。
請確保您在新的伺服器上擁有足夠的空間來保存加密的和解密的轉儲文件、並能導入資料庫(應該有db_size×3的空間)。
如果您曾經考慮過只是將datadir從一個資料庫轉移到另一個的話,我建議您最好不要這樣做。否則,您會搞亂資料庫的內部結構,而且會給將來可能的問題埋下隱患。
在新的伺服器配置中,請不要忘了配置諸如innodb_log_file_size這樣的重要標志。因為如果忘記了根據新伺服器的規格而更新配置的話,很可能會導致嚴重的性能問題。
在許多情況下,一般升級到新的資料庫伺服器的初衷是為了提高查詢性能。而如果此類升級沒有達到預期的改善,那麼您就應該考慮去優化SQL查詢,而不僅僅是升級硬體那麼簡單了
2. 如何遷移MySQL資料庫
MySQL資料庫遷移
MySQL資料庫遷移(數據文件直接遷移)
在今年10月下旬的時候,公司的伺服器需要遷移,其中涉及到了MySQL資料庫遷移。查看了一下MySQL數據文件的大小,接近60G的大小(實際數據並沒用那麼多)。由於伺服器上業務需要,要盡量減少伺服器遷移時的損失。所以遷移時間選在了晚上零點開始,而且要盡量減少遷移所用的時間。
在遷移之前有三種方案:
資料庫直接導出,拷貝文件到新伺服器,在新伺服器上導入。
使用【MySQL
GUI
Tools】中的
MySQLMigrationTool。
數據文件和庫表結構文件直接拷貝到新伺服器,掛載到同樣配置的MySQL服務下。
我在我的電腦上用虛擬機測試後,選中了佔用時間最少的第三種方案。下面是三種方案的對比:
第一種方案的優點:會重建數據文件,減少數據文件的佔用空間。
第一種方案的缺點:時間佔用長。(導入導出都需要很長的時間,並且導出後的文件還要經過網路傳輸,也要佔用一定的時間。)
第二種方案的優點:設置完成後傳輸無人值守
第二種方案的缺點:
設置繁瑣。
傳輸中網路出現異常,不能及時的被發現,並且會一直停留在數據傳輸的狀態不能被停止,如不仔細觀察不會被發現異常。
傳輸相對其他fang時間長。
異常後很難從異常的位置繼續傳輸。
第三種方案的優點:時間佔用短,文件可斷點傳輸。操作步驟少。(絕大部分時間都是在文件的網路傳輸)
第三種方案的缺點:可能引起未知問題,暫時未發現。
下面介紹一下第三種方案d遷移步驟:
保證Mysql版本一致,安裝配置基本一致(注意:這里的數據文件和庫表結構文件都指定在同一目錄data下)
停止兩邊的Mysql服務(A伺服器--遷移-->B伺服器)
刪除B伺服器Mysql的data目錄下所有文件
拷貝A伺服器Mysql的data目錄下除了ib_logfile和.err之外的文件到B伺服器data下
啟動B伺服器的Mysql服務,檢測是否發生異常
遷移完成後,服務啟動正常,未發現其他異常問題。
備註:經測試,源mysql的安裝目錄及數據文件目錄
可以與
目標Mysql的安裝目錄及數據文件目錄
不一致。
此時,只需要拷貝您所需移動的dbname(如上:pa、testdb)及'mysql'和'ibdata1',即可。
3. 買了阿里雲雲資料庫RDS怎樣使用MySQLmp工具把數據遷移進來
1、開通雲伺服器服務;
2、開通RDS服務,如果開通成功,會返回給用戶連接地址和埠;
3、先停止業務,使用MySQLmp的數據導出工具,將原有資料庫數據導出為數據文件;
4、將數據文件使用ftp工具上傳到已經購買的雲伺服器中;
5、遠程登錄到雲伺服器,將剛才上傳的數據文件導入到example.mysql.aliyun.com:3306中。
數據遷移完畢,可以對RDS正常使用。用戶可使用資料庫客戶端工具或第三方資料庫管理工具以及程序的方式,通過域名和埠號連接資料庫,在輸入正確的用戶名和密碼後即可登陸DB進行操作和開發。
4. 怎樣用命令行把MySQL資料庫遷移到另一台Linux伺服器
1、用mp命令備份資料庫。
# mysqlmp -u root -p dbfile > dbfile.sql
2、用rsync從新伺服器獲得備份的文件(SCP或WGET也可以)。
# rsync -avr root@myolddbserver:/home/mympfolder/dbfile.sql
3、登陸新伺服器的mysql客戶端。
# mysql -u root -p
4. 建立資料庫。
mysql> create database dbfile;
5. 選擇新資料庫;
mysql> use dbfile;
6. 載入數據;
mysql> source dbfile.sql
或者
在Mysql程序中有我自己的一個資料庫共5張表,里邊數據不算太多。我現在想把他們全部弄到另一台電腦中去,該怎麼弄,如果不用其它的軟體工具,只用Mysql自已的程序不知可否?
註:不用考慮操作系統。
---------------------------------------------------------------
在dos命令提示符下使用mysqlmp命令進行備份.
如下:
C:\Documents and Settings\Administrator>mysqlmp yinshi >c:\\backup.txt -uroot
-p12142022
說明:yinshi是我的資料庫名,裡面有5張表; c:\\backup.txt 是我備份出來文件名和路徑;
-u,-p參數後面跟的分別是用戶名和密碼.
將你備份出來的文件我這里是backup.txt拷貝到另一台機上,再在dos命令提示符下用mysql命令,進行恢復,如下:
C:\Documents and Settings\Administrator>mysql < c:\\backup.txt -uroot -p12142022
or
mysql>source backup.txt;(這里backup.txt在放在data目錄下)
---------------------------------------------------------------
如果另一台機器上也安裝了mysql,可以直接導入
C:\mysql\bin>mysqlmp -h172.20.6.250 -udeveloper -p123456 --opt server_databasename | mysql -hlocalhost -uroot -C obj_databasename
172.20.6.250源伺服器ip
developer源伺服器連接用戶名
---------------------------------------------------------------
有兩種辦法。
1、在B機器上裝mysql。
將A機器上的mysql/data下的你的資料庫目錄整個拷貝下來。
將B機器上的mysql服務停止。
找到B機器上的mysql/data目錄,將你拷貝的目錄粘貼進去,然後啟動mysql服務就可以了。
2、使用SQL語句備份和恢復
你可以使用SELECT INTO OUTFILE語句備份數據,並用LOAD DATA INFILE語句恢復數據。這種方法只能導出數據的內容,不包括表的結構,如果表的結構文件損壞,你必須要先恢復原來的表的結構。
語法:
SELECT * INTO {OUTFILE | DUMPFILE} 』file_name』 FROM tbl_name
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 』file_name.txt』 [REPLACE | IGNORE]
INTO TABLE tbl_name
SELECT ... INTO OUTFILE 』file_name』
5. mysql有沒有好的據庫之間數據轉移的方法或思路呢
gh-ost 是 GitHub 發布的一款用於 MySQL 的無觸發器在線模式遷移解決方案。它是可測試的,並提供暫停,動態控制/重新配置,審計和許多操作特權。它在整個遷移過程中,對主伺服器產生的工作量很少,與已遷移表上的現有工作分離。
gh-ost與所有現有的在線模式更改工具都以類似的方式操作:它們以與原始表相似的方式創建幽靈表,將數據從原始表緩慢且增量地復制到幽靈表,同時應用正在進行的更改(INSERT,DELETE,UPDATE)到幽靈表。最後,在適當的時候,它用幽靈表替換了原始表。gh-ost使用相同的模式。但是,它與所有現有工具的不同之處在於不使用觸發器。取而代之的是,gh-ost使用二進制日誌流捕獲表的更改,然後將其非同步應用到幽靈表。
gh-ost 承擔一些其他工具留給資料庫執行的任務。gh-ost 可以更好地控制遷移過程;可以真正暫停它;可以真正將遷移的寫入負載與主伺服器的工作負載分離。此外,它還提供了許多可操作的特權,使其更安全、可信賴且易於使用。
6. WEB伺服器上mysql資料庫中的數據如何移到新資料庫中去
先用mysqlmp命令導出資料庫:
mysqlmp
-u
用戶名
-p
資料庫名
>
導出的文件名
再用mysql命令導入即可:
mysql -u
用戶名 資料庫名<
導出的文件名