在實際工作中,有時經常地時行mysql資料庫的匯入和匯入操作,但對於大型sql檔案匯入時,phpmyadmin是不行的,有太多限制,比如記錄,記憶體等!
多種方案收集,如下:
方案一:用戶端直接命令操作(此方法是我比較喜歡的)
剛恢複一個電商網站mysql備份資料,此備份檔案有300多M,因為phpmyadmin支援上傳有限,檔案太大IE停止回應,所以在本地用
| 代碼如下 |
複製代碼 |
mysql -u root -p root jiahuibuydb< c:/yebihai.sql |
但沒匯入進去,出來一大堆mysql的參數提示,不認輸入的命令參數,後來寫成下面這個樣子,就是去掉了參數和資料之間的空格
| 代碼如下 |
複製代碼 |
mysql -uroot -proot jiahuibuydb< c:/yebihai.sql |
匯入就OK了
匯出命令:
a)匯出整個庫
mysqldump -u 使用者名稱 -p 資料庫名 > 匯出的檔案名稱
| 代碼如下 |
複製代碼 |
mysqldump -u root -p student >d:/yebihai.sql |
b)匯出一個表
mysqldump -u 使用者名稱 -p 資料庫名 表名> 匯出的檔案名稱
方案二:分塊匯入
| 代碼如下 |
複製代碼 |
<? //用來快速Mysql的大資料備份 //使用前請首先按照代碼注釋修改要匯入的SQL檔案名稱、資料庫主機名稱、資料庫使用者名稱、密碼、資料庫名 //同時將資料庫檔案和本文本一起ftp導網站目錄,然後以web方式訪問此檔案即可 $file_name="sql.sql"; //要匯入的SQL檔案名稱 $dbhost="localhost"; //資料庫主機名稱 $dbuser="user"; //資料庫使用者名稱 $dbpass="pass"; //資料庫密碼 $dbname="dbname"; //資料庫名 set_time_limit(0); //設定逾時時間為0,表示一直執行。當php在safe mode模式下無效,此時可能會導致匯入逾時,此時需要分段匯入 $fp = @fopen($file_name, "r") or die("不能開啟SQL檔案 $file_name");//開啟檔案 mysql_connect($dbhost, $dbuser, $dbpass) or die("不能串連資料庫 $dbhost");//串連資料庫 mysql_select_db($dbname) or die ("不能開啟資料庫 $dbname");//開啟資料庫 mysql_query('set names utf8'); echo "正在執行匯入操作"; while($SQL=GetNextSQL()){ if (!mysql_query($SQL)){ echo "執行出錯www.111cn.net:".mysql_error()." "; echo "SQL語句為: ".$SQL." "; }; } echo "匯入完成";
fclose($fp) or die("Can’t close file $file_name");//關閉檔案 mysql_close(); //從檔案中逐條取SQL function GetNextSQL() { global $fp; $sql=""; while ($line = @fgets($fp, 40960)) { $line = trim($line); //以下三句在高版本php中不需要,在部分低版本中也許需要修改 $line = str_replace("////","//",$line); $line = str_replace("/’","’",$line); $line = str_replace("//r//n",chr(13).chr(10),$line); // $line = stripcslashes($line); if (strlen($line)>1) { if ($line[0]=="-" && $line[1]=="-") { continue; } } $sql.=$line.chr(13).chr(10); if (strlen($line)>0){ if ($line[strlen($line)-1]==";"){ break; } } } return $sql; } ?> |
方案三:用戶端用source命令操作
比較好的辦法仍是用mysql的source命令:
一、在用戶端下操作:
1、進行入用戶端
| 代碼如下 |
複製代碼 |
2、mysql>use 資料庫名(如果沒有,先建一個) 3、mysql>set names 'utf8'; (一般看匯入的是什麼格式的檔案) 4、mysql>source d:/aaa.sql; |
即可正常匯入,如果有錯,可以看出錯提示
二、PHP檔案操作:
建立a.php
裡面有下面內容
| 代碼如下 |
複製代碼 |
mysql_connet('xxxx'); mysql_query("set names 'utf8'"); mysql_query("source d:/aaa.sql'"); |
原理同上,主要方便了無法使用命令列使用者的操作
方案四:下面教大家一個簡單有效辦法,適合不會使用命令視窗的非技術人員,可以匯入任意大小的mysql資料庫,理論上不論您的Database Backup檔案多大,都可以匯入
方法如下:
1.將Database Backup檔案(如backup.sql)上傳至網站根目錄。
2.將以下代碼儲存為mysql.php檔案,上傳至網站根目錄。
| 代碼如下 |
複製代碼 |
system("mysql -hdbhost -udbuser -ppassword dbname < backup.sql"); print "匯入成功"; |
其中
dbhost 改為您的資料庫伺服器地址(小提示:一般主機預設資料庫伺服器位址是:localhost)
dbuser 改為您的資料庫使用者名稱
password 改為您的資料庫使用者密碼
dbname 改為您的資料庫名(匯入的時候此庫必須先建立好,否則會失敗並且不會進行任何提示)
backup.sql表示通過ftp上傳到網站根目錄下資料庫檔案的檔案名稱(該檔案是解壓縮後的檔案)
3.在瀏覽器裡面訪問mysql.php,假設你的網站網域名稱是www.111cn.net,那麼就在瀏覽器裡面輸入/mysql.php,只要瀏覽器一訪問這個mysql.php檔案,資料就開始匯入,資料匯入結束後,就會顯示“匯入成功”的字樣。這個時間根據您要匯入的資料大小決定,一般時間很短