在mysql中導(dǎo)入/導(dǎo)出超大的sql文本文件,我們可以使用很多方法實(shí)例,如有:客戶端直接命令操作,分塊導(dǎo)入,客戶端用source命令操作等等。
創(chuàng)新互聯(lián)建站專注于中大型企業(yè)的網(wǎng)站制作、成都網(wǎng)站建設(shè)和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計(jì)客戶1000+,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注品牌網(wǎng)站設(shè)計(jì)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!
在實(shí)際工作中,有時(shí)經(jīng)常地時(shí)行mysql數(shù)據(jù)庫的導(dǎo)入和導(dǎo)入操作,但對于大型sql文件導(dǎo)入時(shí),phpmyadmin是不行的,有太多限制,比如記錄,內(nèi)存等!
多種方案收集,如下:
方案一:客戶端直接命令操作(此方法是我比較喜歡的)
剛恢復(fù)一個(gè)電商網(wǎng)站mysql備份數(shù)據(jù),此備份文件有300多M,因?yàn)閜hpmyadmin支持上傳有限,文件太大IE停止響應(yīng),所以在本地用
代碼如下
復(fù)制代碼
mysql -u root -p root jiahuibuydb
c:/yebihai.sql
但沒導(dǎo)入進(jìn)去,出來一大堆mysql的參數(shù)提示,不認(rèn)輸入的命令參數(shù),后來寫成下面這個(gè)樣子,就是去掉了參數(shù)和數(shù)據(jù)之間的空格
代碼如下
復(fù)制代碼
mysql -uroot -proot jiahuibuydb
c:/yebihai.sql
導(dǎo)入就OK了
導(dǎo)出命令:
a)導(dǎo)出整個(gè)庫
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 導(dǎo)出的文件名
代碼如下
復(fù)制代碼
mysqldump -u root -p student
d:/yebihai.sql
b)導(dǎo)出一個(gè)表
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 表名 導(dǎo)出的文件名
方案二:分塊導(dǎo)入
代碼如下
復(fù)制代碼
?
//用來快速M(fèi)ysql的大數(shù)據(jù)備份
//使用前請首先按照代碼注釋修改要導(dǎo)入的SQL文件名、數(shù)據(jù)庫主機(jī)名、數(shù)據(jù)庫用戶名、密碼、數(shù)據(jù)庫名
//同時(shí)將數(shù)據(jù)庫文件和本文本一起ftp導(dǎo)網(wǎng)站目錄,然后以web方式訪問此文件即可
$file_name="sql.sql"; //要導(dǎo)入的SQL文件名
$dbhost="localhost"; //數(shù)據(jù)庫主機(jī)名
$dbuser="user"; //數(shù)據(jù)庫用戶名
$dbpass="pass"; //數(shù)據(jù)庫密碼
$dbname="dbname";
//數(shù)據(jù)庫名
set_time_limit(0); //設(shè)置超時(shí)時(shí)間為0,表示一直執(zhí)行。當(dāng)php在safe
mode模式下無效,此時(shí)可能會(huì)導(dǎo)致導(dǎo)入超時(shí),此時(shí)需要分段導(dǎo)入
$fp = @fopen($file_name, "r") or
die("不能打開SQL文件 $file_name");//打開文件
mysql_connect($dbhost, $dbuser,
$dbpass) or die("不能連接數(shù)據(jù)庫 $dbhost");//連接數(shù)據(jù)庫
mysql_select_db($dbname)
or die ("不能打開數(shù)據(jù)庫 $dbname");//打開數(shù)據(jù)庫
mysql_query('set names utf8');
echo "正在執(zhí)行導(dǎo)入操作";
while($SQL=GetNextSQL()){
if
(!mysql_query($SQL)){
echo
"執(zhí)行出錯(cuò):".mysql_error()."
";
echo
"SQL語句為:
".$SQL."
";
};
}
echo
"導(dǎo)入完成";
fclose($fp) or die("Can’t close file $file_name");//關(guān)閉文件
mysql_close();
//從文件中逐條取SQL
function GetNextSQL() {
global $fp;
$sql="";
while ($line =
@fgets($fp, 40960)) {
$line =
trim($line);
//以下三句在高版本php中不需要,在部分低版本中也許需要修改
$line =
str_replace("http:////","http://",$line);
$line =
str_replace("/’","’",$line);
$line =
str_replace("http://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、進(jìn)行入客戶端
代碼如下
復(fù)制代碼
2、mysqluse 數(shù)據(jù)庫名(如果沒有,先建一個(gè))
3、mysqlset names 'utf8'; (一般看導(dǎo)入的是什么格式的文件)
4、mysqlsource d:/aaa.sql;
即可正常導(dǎo)入,如果有錯(cuò),可以看出錯(cuò)提示
二、PHP文件操作:
建立a.php
里面有下面內(nèi)容
代碼如下
復(fù)制代碼
mysql_connet('xxxx');
mysql_query("set names 'utf8'");
mysql_query("source d:/aaa.sql'");
原理同上,主要方便了無法使用命令行用戶的操作
方案四:下面教大家一個(gè)簡單有效的辦法,適合不會(huì)使用命令窗口的非技術(shù)人員,可以導(dǎo)入任意大小的mysql數(shù)據(jù)庫,理論上不論您的數(shù)據(jù)庫備份文件多大,都可以導(dǎo)入
方法如下:
1.將數(shù)據(jù)庫備份文件(如backup.sql)上傳至網(wǎng)站根目錄。
2.將以下代碼保存為mysql.php文件,上傳至網(wǎng)站根目錄。
代碼如下
復(fù)制代碼
system("mysql -hdbhost -udbuser -ppassword dbname backup.sql");
print "導(dǎo)入成功";
其中
dbhost 改為您的數(shù)據(jù)庫服務(wù)器地址(小提示:一般主機(jī)默認(rèn)數(shù)據(jù)庫服務(wù)器地址是:localhost)
dbuser 改為您的數(shù)據(jù)庫用戶名
password 改為您的數(shù)據(jù)庫用戶密碼
dbname 改為您的數(shù)據(jù)庫名(導(dǎo)入的時(shí)候此庫必須先建立好,否則會(huì)失敗并且不會(huì)進(jìn)行任何提示)
backup.sql表示通過ftp上傳到網(wǎng)站根目錄下數(shù)據(jù)庫文件的文件名(該文件是解壓縮后的文件)
3.在瀏覽器里面訪問mysql.php, 那么就在瀏覽器里面輸入/mysql.php,只要瀏覽器一訪問這個(gè)mysql.php文件,數(shù)據(jù)就開始導(dǎo)入,數(shù)據(jù)導(dǎo)入結(jié)束后,就會(huì)顯示“導(dǎo)入成功”的字樣。這個(gè)時(shí)間根據(jù)您要導(dǎo)入的數(shù)據(jù)大小決定,一般時(shí)間很短
1、
當(dāng)使用
navicat
備份時(shí),點(diǎn)擊數(shù)據(jù)庫然后在編輯區(qū)上方選擇備份.psc文件(點(diǎn)擊
備份文件
右鍵-backup
Information
選項(xiàng)后找到常規(guī)面板,查看文件目錄并可以取出),或者是右鍵選擇轉(zhuǎn)存SQL文件就可以保存為.sql文件了。
2、
當(dāng)還原數(shù)據(jù)庫時(shí)(數(shù)據(jù)庫為打開狀態(tài),選擇數(shù)據(jù)庫選擇備份-右鍵-恢復(fù)備份選擇相應(yīng)類型文件即可。
可以將.bak格式的數(shù)據(jù)庫備份文件導(dǎo)入SQL server 2000的數(shù)據(jù)庫中,然后重新導(dǎo)出成.sql的文件, 放入mysql中執(zhí)行即可,然后再將數(shù)據(jù)導(dǎo)為CSV文件或者其他文件,導(dǎo)入到mysql中執(zhí)行即可
MySQL數(shù)據(jù)庫的導(dǎo)入,有兩種方法:
1) 先導(dǎo)出數(shù)據(jù)庫SQL腳本,再導(dǎo)入;
2) 直接拷貝數(shù)據(jù)庫目錄和文件。
在不同操作系統(tǒng)或MySQL版本情況下,直接拷貝文件的方法可能會(huì)有不兼容的情況發(fā)生。
所以一般推薦用SQL腳本形式導(dǎo)入。下面分別介紹兩種方法。
2. 方法一 SQL腳本形式
操作步驟如下:
2.1. 導(dǎo)出SQL腳本
在原數(shù)據(jù)庫服務(wù)器上,可以用phpMyAdmin工具,或者mysqldump命令行,導(dǎo)出SQL腳本。
2.1.1 用phpMyAdmin工具
導(dǎo)出選項(xiàng)中,選擇導(dǎo)出“結(jié)構(gòu)”和“數(shù)據(jù)”,不要添加“DROP DATABASE”和“DROP TABLE”選項(xiàng)。
選中“另存為文件”選項(xiàng),如果數(shù)據(jù)比較多,可以選中“gzipped”選項(xiàng)。
將導(dǎo)出的SQL文件保存下來。
2.1.2 用mysqldump命令行
命令格式
mysqldump -u用戶名 -p 數(shù)據(jù)庫名 數(shù)據(jù)庫名.sql
范例:
mysqldump -uroot -p abc abc.sql
(導(dǎo)出數(shù)據(jù)庫abc到abc.sql文件)
提示輸入密碼時(shí),輸入該數(shù)據(jù)庫用戶名的密碼。
2.2. 創(chuàng)建空的數(shù)據(jù)庫
通過主控界面/控制面板,創(chuàng)建一個(gè)數(shù)據(jù)庫。假設(shè)數(shù)據(jù)庫名為abc,數(shù)據(jù)庫全權(quán)用戶為abc_f。
2.3. 將SQL腳本導(dǎo)入執(zhí)行
同樣是兩種方法,一種用phpMyAdmin(mysql數(shù)據(jù)庫管理)工具,或者mysql命令行。
2.3.1 用phpMyAdmin工具
從控制面板,選擇創(chuàng)建的空數(shù)據(jù)庫,點(diǎn)“管理”,進(jìn)入管理工具頁面。
在"SQL"菜單中,瀏覽選擇剛才導(dǎo)出的SQL文件,點(diǎn)擊“執(zhí)行”以上載并執(zhí)行。
注意:phpMyAdmin對上載的文件大小有限制,php本身對上載文件大小也有限制,如果原始sql文件
比較大,可以先用gzip對它進(jìn)行壓縮,對于sql文件這樣的文本文件,可獲得1:5或更高的壓縮率。
gzip使用方法:
# gzip xxxxx.sql
得到
xxxxx.sql.gz文件。
提示輸入密碼時(shí),輸入該數(shù)據(jù)庫用戶名的密碼。
3 直接拷貝
如果數(shù)據(jù)庫比較大,可以考慮用直接拷貝的方法,但不同版本和操作系統(tǒng)之間可能不兼容,要慎用。
3.1 準(zhǔn)備原始文件
用tar打包為一個(gè)文件
3.2 創(chuàng)建空數(shù)據(jù)庫
3.3 解壓
在臨時(shí)目錄中解壓,如:
cd /tmp
tar zxf mydb.tar.gz
3.4 拷貝
將解壓后的數(shù)據(jù)庫文件拷貝到相關(guān)目錄
cd mydb/
cp * /var/lib/mysql/mydb/
對于FreeBSD:
cp * /var/db/mysql/mydb/
3.5 權(quán)限設(shè)置
將拷貝過去的文件的屬主改為mysql:mysql,權(quán)限改為660
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 660 /var/lib/mysql/mydb/*
先配置mysql path環(huán)境變量
在Windows下設(shè)置環(huán)境變量,點(diǎn)開始菜單,右鍵單擊我的電腦--屬性--高級--環(huán)境變量
可以看到PATH的變量是這樣的:
C:\WINDOWS;C:\WINDOWS\COMMAND
為了讓運(yùn)行mysql程序變得更容易,改變它的值指向程序安裝目錄,添加一個(gè)目錄D:\Program Files\wamp\bin\mysql\mysql5.0.51b\bin,結(jié)果是
D:\Program Files\wamp\bin\mysql\mysql5.0.51b\bin;C:\WINDOWS;C:\WINDOWS\COMMAND
開始--運(yùn)行--cmd? 里直接打mysql
win+R輸入cmd按回車打開cmd
mysql -h主機(jī)地址 -u用戶名 -p用戶密碼 (注:u與root可以不用加空格,其它也一樣)
鏈接數(shù)據(jù)庫
選中或創(chuàng)建一個(gè)數(shù)據(jù)庫
創(chuàng)建數(shù)據(jù)庫庫:create database 庫名;
選擇一個(gè)數(shù)據(jù)庫庫:use 庫名;
導(dǎo)入sql的命令行如下:
source "路徑名"+/mytest_emp_dept.sql
選擇sql文件,我的是放在E盤根目錄
sql執(zhí)行結(jié)果
有很多數(shù)據(jù)庫圖形軟件,可根據(jù)圖形軟件進(jìn)行可視化操作,導(dǎo)入、導(dǎo)出等sql操作。
默認(rèn)情況下MySQL 對導(dǎo)入文件大小有限制的,最大為2M,所以當(dāng)文件很大時(shí)候,直接無法導(dǎo)入。
影響mysql導(dǎo)入文件大小的參數(shù)有三個(gè)。
在php.ini中修改相關(guān)參數(shù)。
修改upload_max_filesize=200?M 這里修改滿足你需要的大小,可以同時(shí)修改其他兩項(xiàng)memory_limit=250M?post_max_size=200M 這樣就可以導(dǎo)入200M以下的.sql文件了。
MySQL數(shù)據(jù)庫備份及數(shù)據(jù)庫導(dǎo)入方法:
在做操作之前首先要利用命令提示符進(jìn)入MySQL安裝目錄中的bin目錄,否則無法執(zhí)行下面的命令。
1、備份數(shù)據(jù)庫
mysqldump
-u
root
-p
數(shù)據(jù)庫名備份數(shù)據(jù)庫路徑及名稱
例如:mysqldump
-u
root
-p
htmerdbD:htmerdb.sql
2、導(dǎo)入.sql數(shù)據(jù)庫
mysql
-u
root
-p
數(shù)據(jù)庫名(此數(shù)據(jù)庫名必須已經(jīng)存在于現(xiàn)有的數(shù)據(jù)庫中)導(dǎo)入的數(shù)據(jù)庫路徑及名稱
例如:mysql
-u
root
-p
htmerdb