第一種方案的優(yōu)點(diǎn):會重建數(shù)據(jù)文件,減少數(shù)據(jù)文件的占用空間。
創(chuàng)新互聯(lián)專注于科爾沁網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供科爾沁營銷型網(wǎng)站建設(shè),科爾沁網(wǎng)站制作、科爾沁網(wǎng)頁設(shè)計、科爾沁網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造科爾沁網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供科爾沁網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
第一種方案的缺點(diǎn):時間占用長。(導(dǎo)入導(dǎo)出都需要很長的時間,并且導(dǎo)出后的文件還要經(jīng)過網(wǎng)絡(luò)傳輸,也要占用一定的時間。)
第二種方案的優(yōu)點(diǎn):設(shè)置完成后傳輸無人值守
第二種方案的缺點(diǎn):
設(shè)置繁瑣。
傳輸中網(wǎng)絡(luò)出現(xiàn)異常,不能及時的被發(fā)現(xiàn),并且會一直停留在數(shù)據(jù)傳輸?shù)臓顟B(tài)不能被停止,如不仔細(xì)觀察不會被發(fā)現(xiàn)異常。
傳輸相對其他fang時間長。
異常后很難從異常的位置繼續(xù)傳輸。
第三種方案的優(yōu)點(diǎn):時間占用短,文件可斷點(diǎn)傳輸。操作步驟少。(絕大部分時間都是在文件的網(wǎng)絡(luò)傳輸)
第三種方案的缺點(diǎn):可能引起未知問題,暫時未發(fā)現(xiàn)。
一、一般步驟
1、用phpADMIN生成CSV格式文件
以PHP+MySQL模式建立個人主頁的讀者,在自己的機(jī)器上都有PHP+MySQL環(huán)境吧?就在這個環(huán)境下,用phpADMIN生成以分號為分隔符的dotmud.csv文件。
2、將dotmud.csv文件通過FTP上傳到服務(wù)器。
3、上傳data.php程序(程序附后),在瀏覽器調(diào)用data.php程序,將dotmud.csv文件的內(nèi)容加入到數(shù)據(jù)庫。
二、特殊處理
一般的數(shù)據(jù),通過上述步驟,基本可以順利上傳。但對于包含特殊字符的數(shù)據(jù)(比如數(shù)據(jù)庫記錄中包含換行符、單引號、分號),就要做些特殊的處理。
1、換行符的處理
PHP的fgetcsv()函數(shù)以換行符作為每行的結(jié)束標(biāo)志。如果MySQL數(shù)據(jù)表的記錄包含換行符,fgetcsv()就不能完整讀取記錄行。
筆者的解決方法是修改phpADMIN的lib.inc.php3文件(讀者也可以不修改phpADMIN文件,而是用其他方法直接加工phpADMIN生成的dotmud.csv文件,達(dá)到同樣的效果)的get_table_csv()函數(shù):
在 $schema_insert=ereg_replace($sep."$","",$schema_insert) 行后加入如下命令行
$schema_insert=ereg_replace("\r\n","`return`",$schema_insert)
將換行符轉(zhuǎn)換為不容易出現(xiàn)的換行標(biāo)識串`return`(讀者可根據(jù)自己數(shù)據(jù)的特點(diǎn)設(shè)置獨(dú)特的換行標(biāo)識串),再在data.php程序中加一行命令$data[$i]=ereg_replace("`return`","\r\n",$data[$i]),用來將換行標(biāo)識串還原成換行符。
2、分隔符的處理
如果MySQL記錄行恰好包含CSV分隔符,fgetcsv()進(jìn)行分隔處理時就會出現(xiàn)問題。
筆者仍然是通過修改lib.inc.php3文件解決的。
在get_table_csv()的$schema_insert="$row[$j]".$sep行前加一行
$row[$j]=ereg_replace($sep,"`return_sep`",$row[$j]) 命令,將分隔符轉(zhuǎn)為分隔標(biāo)識串`return_sep`,同時在data.php中用命令行 $data[$i]=ereg_replace("`return_sep`",";",$data[$i]) 進(jìn)行還原處理。
3、單引號的處理
MySQL的SQL語句行對單引號有特殊的定義,如果直接提交含單引號的SQL語句,就會出錯。這種情況需要加上轉(zhuǎn)義符。在data.php中加一行 $data[$i]=ereg_replace("'","\'",$data[$i]) 就可解決。
另外,在數(shù)據(jù)記錄特別多的的情況下,dotmud.csv文件可能比較大,如果在服務(wù)器的限定時間內(nèi)不能執(zhí)行完data.php程序,就需要按行分拆dotmud.csv。如筆者有個7000行的dotmud.csv文件,在自己的機(jī)器上執(zhí)行到600行就提示超時,便拆成10個文件上傳到全路互聯(lián)(),結(jié)果對方的服務(wù)器速度快,每個文件的處理時間還不到1秒,而php默認(rèn)的限定執(zhí)行時間可是30秒?。】磥砦易龅姆植饘崒俣嘤?。
以上方法解決了數(shù)據(jù)庫內(nèi)容的上傳問題。對于數(shù)據(jù)庫結(jié)構(gòu)的上傳,只要稍微修改一下data.php程序就可實現(xiàn)。其實,如果庫結(jié)構(gòu)比較簡單,用phpADMIN更方便
遷移MySQL數(shù)據(jù)庫通常只需要幾個簡單的步驟,但是由于您要轉(zhuǎn)移的數(shù)據(jù)量可能比較龐大,因此一般耗時也會比較長。
下面的步驟將指導(dǎo)您如何從舊的服務(wù)器上導(dǎo)出MySQL數(shù)據(jù)庫,對它進(jìn)行安全加固;然后將其復(fù)制并導(dǎo)入到新的服務(wù)器上,以保證數(shù)據(jù)的完整。
將MySQL數(shù)據(jù)庫導(dǎo)出至轉(zhuǎn)儲文件(dump file)
Oracle提供了一個名為mysqldump的工具,允許您輕松地將數(shù)據(jù)庫結(jié)構(gòu)和其數(shù)據(jù)導(dǎo)出到一個SQL的轉(zhuǎn)儲文件。您可以使用如下的命令:
1.mysqldump -u root -p --opt [database name] [database name].sql?
不過,請注意如下幾點(diǎn):
我們可以使用--single-transaction的標(biāo)志,以避免數(shù)據(jù)庫在導(dǎo)出數(shù)據(jù)的過程中被鎖死。這樣能夠在將數(shù)據(jù)導(dǎo)出到轉(zhuǎn)儲文件的同時,您仍可繼續(xù)在舊的數(shù)據(jù)庫上更新數(shù)據(jù)。不過請注意,那些在導(dǎo)出進(jìn)程已經(jīng)開始之后被更新的數(shù)據(jù),是不會被導(dǎo)入轉(zhuǎn)儲文件之中的。
在運(yùn)行該命令之前,請務(wù)必將[database name]替換成您的實際數(shù)據(jù)庫名稱。
請輸入您自己的用戶名和相對應(yīng)的密碼,并確保該用戶具有備份數(shù)據(jù)庫所需的權(quán)限。
安全加固備份文件
在大多數(shù)情況下,數(shù)據(jù)是一家企業(yè)的最重要的資產(chǎn)。因此,我們不希望數(shù)據(jù)庫的各種備份被暴露在不受保護(hù)的服務(wù)器上,因為這樣有可能會造成錯誤地泄露,甚至?xí)霈F(xiàn)被黑客竊取等更為糟糕的狀況。
因此,通常您可以嘗試的做法是:壓縮、加密文件,然后刪除原文件。在Linux操作系統(tǒng)上,請使用以下的命令對已壓縮文件進(jìn)行加密:
1.zip --encrypt dump.zip db.sql?
在壓縮開始之前,系統(tǒng)將提示您輸入密碼。
傳輸備份文件
至此,我們已經(jīng)獲得了一個加密的轉(zhuǎn)儲文件。下面讓我們通過網(wǎng)絡(luò)使用SCP命令,將其傳輸?shù)叫碌姆?wù)器上:
1.scp /path/to/source-file user@host:/path/to/destination-folder/?
將MySQL轉(zhuǎn)儲導(dǎo)入新服務(wù)器
通過上面一步,我們已將備份文件傳到了新的服務(wù)器上,下面讓我們來進(jìn)行解密和提?。?/p>
1.unzip -P your-password dump.zip?
為了存儲空間和安全方面的原因,一旦文件導(dǎo)入成功,請記得刪除其對應(yīng)的轉(zhuǎn)儲文件。
您可以使用以下的命令來導(dǎo)入文件:
1.mysql -u root -p newdatabase /path/to/newdatabase.sql?
在新服務(wù)器上驗證導(dǎo)入的數(shù)據(jù)
現(xiàn)在我們在新服務(wù)器上已經(jīng)導(dǎo)入了數(shù)據(jù)庫,那么我們就需要一種方法來驗證數(shù)據(jù)的真實存在,并確保沒有任何遺漏。
我建議您同時在舊的和新的數(shù)據(jù)庫上運(yùn)行如下查詢,并將獲得的結(jié)果進(jìn)行對比。
該查詢會在所有的表里計算行數(shù),以顯示出新、舊數(shù)據(jù)庫中的數(shù)據(jù)量。
1.SELECT ??
2.TABLE_NAME, ??
3.TABLE_ROWS ?
4.FROM ??
`
5.information_schema`.`tables` ?
6.WHERE ??
`
7.table_schema` = 'YOUR_DB_NAME';?
此外,我建議您檢查各個表中數(shù)字列的MIN和MAX記錄,以確保數(shù)據(jù)本身是有效的,而不僅僅是看數(shù)據(jù)的總量(雖然這是查詢所唯一能夠讀出的值)。另一種可供測試的選擇是將數(shù)據(jù)庫從新的服務(wù)器導(dǎo)出為SQL轉(zhuǎn)儲文件,并將其與舊服務(wù)器的SQL轉(zhuǎn)儲文件做比較。
此外,在應(yīng)用程序被遷移之前,我建議您先將一個應(yīng)用程序的實例重定向到新的數(shù)據(jù)庫上,以確認(rèn)一切運(yùn)行正常。
另一種導(dǎo)出和導(dǎo)入的選項
我們之所以把該選項放在最后,是因為我們的確不建議您去使用它。
該方法實現(xiàn)起來非常的容易,因為它僅使用一個命令,便能一次性將轉(zhuǎn)儲文件導(dǎo)出、傳輸、并將其數(shù)據(jù)導(dǎo)入到新的數(shù)據(jù)庫之中。
而它的不足之處在于,一旦其網(wǎng)絡(luò)鏈接斷掉,您就需要重新啟動它了。
因此,我們認(rèn)為它并不值得被推薦,尤其是在大型數(shù)據(jù)庫中,可能會非常不適用。
當(dāng)然,如果您非要嘗試一下的話,可以使用如下的命令:
1.mysqldump -u root -pPassword --all-databases | ssh user@new_host.host.com 'cat - | mysql -u root -pPassword'?
重要提示
請確保在新舊兩處,安裝有相同官方發(fā)行版本的MySQL服務(wù)器。否則,你需要按照MySQL網(wǎng)站上的升級說明來進(jìn)行統(tǒng)一(請參見(https://dev.mysql.com/doc/refman/5.7/en/upgrading.html)。
請確保您在舊的服務(wù)器上擁有足夠的空間來保存轉(zhuǎn)儲文件和壓縮文件(應(yīng)該有db_size×2的空間)。
請確保您在新的服務(wù)器上擁有足夠的空間來保存加密的和解密的轉(zhuǎn)儲文件、并能導(dǎo)入數(shù)據(jù)庫(應(yīng)該有db_size×3的空間)。
如果您曾經(jīng)考慮過只是將datadir從一個數(shù)據(jù)庫轉(zhuǎn)移到另一個的話,我建議您最好不要這樣做。否則,您會搞亂數(shù)據(jù)庫的內(nèi)部結(jié)構(gòu),而且會給將來可能的問題埋下隱患。
在新的服務(wù)器配置中,請不要忘了配置諸如innodb_log_file_size這樣的重要標(biāo)志。因為如果忘記了根據(jù)新服務(wù)器的規(guī)格而更新配置的話,很可能會導(dǎo)致嚴(yán)重的性能問題。
在許多情況下,一般升級到新的數(shù)據(jù)庫服務(wù)器的初衷是為了提高查詢性能。而如果此類升級沒有達(dá)到預(yù)期的改善,那么您就應(yīng)該考慮去優(yōu)化SQL查詢,而不僅僅是升級硬件那么簡單了
寫一個數(shù)據(jù)導(dǎo)入導(dǎo)出的代碼。
從一個數(shù)據(jù)庫表中讀取保存到另一個數(shù)據(jù)庫表。
循環(huán)導(dǎo)入一個表中的所有的記錄。
然后再導(dǎo)入其他的表。
php mysql 可以很方便的遠(yuǎn)程連接數(shù)據(jù)庫的。
方法/步驟
第一步,打開Navicat for MySQL軟件,查看數(shù)據(jù)庫book和student,對比數(shù)據(jù)庫表,如下圖所示:
第二步,對比結(jié)果發(fā)現(xiàn)這兩個數(shù)據(jù)庫有兩張表一致,需要將book數(shù)據(jù)庫的數(shù)據(jù)同步到student數(shù)據(jù)庫;選中book數(shù)據(jù)庫,選擇“Tools”,點(diǎn)擊“Data Transfer...”,如下圖所示:
第三步,選擇目的源為CMP,Database為student,點(diǎn)擊“Start”開始同步數(shù)據(jù),如下圖所示:
第四步,這時會彈出同步數(shù)據(jù)的提示,點(diǎn)擊“OK”,確定通過,如下圖所示:
第五步,完成數(shù)據(jù)同步后,這時消息日志為運(yùn)行成功,如下圖所示:
第六步,查看數(shù)據(jù)庫student,對應(yīng)的表數(shù)據(jù),可以看到表數(shù)據(jù)已經(jīng)同步過來,如下圖所示:
方法/步驟
1
登錄到phpMyAdmin
2
新建一個要導(dǎo)入的數(shù)據(jù)庫,點(diǎn)擊“+new”
3
如圖,分別填寫數(shù)據(jù)庫名稱,以及選擇數(shù)據(jù)庫的排序規(guī)則,
4
完成步驟3,點(diǎn)擊“創(chuàng)建”
5
完成步驟4,從右側(cè)就可以看到我們新創(chuàng)建的數(shù)據(jù)庫了,如果沒有立即顯示,刷新即可立馬顯示了。
6
單擊我們新創(chuàng)建的數(shù)據(jù)庫,
7
然后,我們選擇“導(dǎo)入”,
8
完成步驟7,我們點(diǎn)擊“選擇文件”,
9
點(diǎn)擊了“選擇文件”之后,就會出現(xiàn)如圖所示的彈出框,我們選擇要導(dǎo)入的sql就可以了,后綴名可以是.sql,也可以是壓縮文件.zip。如圖,選擇好文件之后,點(diǎn)擊“確定”就可以了
10
完成步驟⑨,你就可以從剛才的頁面中看到自己上傳的文件了,如圖所示,其余選項默認(rèn)就可以了,然后點(diǎn)擊“執(zhí)行”就可以了。
11
這個時候,你就可以看到你的數(shù)據(jù)已經(jīng)導(dǎo)入到你新創(chuàng)建的數(shù)據(jù)庫中了
分享標(biāo)題:mysql怎么數(shù)據(jù)傳輸,mysql有哪些導(dǎo)入數(shù)據(jù)的方式
文章起源:http://chinadenli.net/article10/heipdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、定制網(wǎng)站、網(wǎng)頁設(shè)計公司、軟件開發(fā)、微信小程序、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)