mysql數據備份和還原


備份結構

1.備份表結構

mysqldump -u root -p -d dbname table1 table2 ... > a.sql

2.備份數據庫的所有表結構

mysqldumo -u root -p -d dbname > b.sql

3.備份多個數據庫的所有表結構

mysqldump -u root -p -d --databases db1 db2... > c.sql

4.備份所有數據庫的表結構

mysqldump -u root -p -d --all-databases > d.sql

備份結構和數據(相當於在備份結構的語法上去掉-d選項)

1.備份表結構和數據

mysqldump -u root -p dbname table1 table2 ... > a.sql

2.備份數據庫的所有表結構和數據

mysqldump -u root -p dbname  > b.sql

3.備份多個數據庫的表結構和數據

mysqldump -u root -p --databases db1 db2  > c.sql

4.備份所有數據庫的表結構和數據

mysqldump -u root -p --all-databases > d.sql

 備份表數據

select ... into outfile

select [列名] from table [where 語句] into outfile '目標文件' [options]

目標文件必須是字符串形式

options是設置導出文件的一些格式;

fields terminated by '字符串':多個字段值之間的分隔符,默認是'\t'

fields enclosed by '字符串':用給定的字符來包圍字段值,默認不需要

fields optionally enclosed by '字符串':用給定的字符包圍文本類型的字段值,默認不需要

fields escaped by '字符串':設置轉義字符,默認為"\"

lines starting by '字符串':每條記錄的開始字符,默認沒有

lines terminated by '字符串':每條記錄的結束符,默認是換行符

 

select * from pmx.score2 where 1 into outfile '/Users/pmx/Sites/a.txt' fields terminated by '|' enclosed by '"' optionally enclosed by '@' lines starting by '^' terminated by '$' ;

結果:

  ^1|900|@計算機@|90$^2|901|@英語@|80$^3|902|@計算機@|70$^4|903|@中文@|30$

1.只需要一個fields關鍵字或者一個lines關鍵字

2.各選項間以空格分隔

3.重復選項以最后一個為准

select * from pmx.score2 where 1 into outfile '/Users/pmx/Sites/a.txt' fields terminated by 'o' terminated by 'p';

結果:

1p900p計算機p90
2p901p英語p80
3p902p計算機p70
4p903p中文p30

select * from pmx.score2 where 1 into outfile '/Users/pmx/Sites/a.txt' fields optionally enclosed by '|' enclosed by '"';

結果

1 900 "計算機" 90
2 901 "英語" 80
3 902 "計算機" 70
4 903 "中文" 30

相當於optionally enclosed by ' " ';

4.optionally enclosed by 會覆蓋enclosed by

select * from pmx.score2 where 1 into outfile '/Users/pmx/Sites/a.txt' fields enclosed by '[' optionally enclosed by '|';

結果:

1 900 |計算機| 90
2 901 |英語| 80
3 902 |計算機| 70
4 903 |中文| 30

當enclosed by 后面又設置optionally enclosed by時,則前面的enclosed by 無效

5.fileds選項必須在lines前面

select * from pmx.score2 where 1 into outfile '/Users/pmx/Sites/a.txt' lines starting by '^' fields terminated by '|';

直接報錯了

mysqldump命令

mysqldump -u root -p -T 目標目錄 dbname tablename [options]

參數是目錄路徑不是文件路徑,參數可以加引號也可以不加

options參數含義和select into outfile一致

 

mysqldump -u root -p -T /Users/pmx/Sites pmx score2;

mysqldump命令默認會以score2為文件名導出兩份文件,一份是txt文件,保存表的數據,一份是sql文件,保存表的結構

 

mysqldump -u root -p -T /Users/pmx/Sites pmx score2  score;

mysqldump還能導出多個表內容,每個表內容分別保存在對應表名的文本文件中

 

mysqldump -u root -p -T /Users/pmx/Sites pmx;

沒有表名,則默認會導出數據庫的所有表

 

mysqldump -u root -p -T /Users/pmx/Sites  pmx score "--fields-terminated-by=|" "--fields-enclosed-by=\"" "--lines-terminated-by=$";

各選項以字符串形式表示,選項間以空格分隔。選項值是字符串類型,但不需要加引號。選項值是"時用轉義符轉義。

 

mysqldump -u root -p -T /Users/pmx/Sites  pmx score "--lines-terminated-by=$" "--fields-terminated-by=|";

lines選項可以在fields選項前面

 

mysqldump -u root -p -T /Users/pmx/Sites  pmx score "--fields-enclosed-by=\"" "--fields-optionally-enclosed-by=|";

--fields-enclosed-by和--fields-optionally-enclosed-by只能出現一個,否則報錯

 

mysqldump -u root -p -T /Users/pmx/Sites  pmx score "--lines-starting-by=^";

 沒有--lines-starting-by選項

 

mysqldump -u root -p --xml  pmx score > a.xml;

導出為xml文件,不能有options參數。

mysql命令

mysql -u root -p -e "selec 語句" dbname > 目標文件名

目標文件名可以加引號或者不加

當select語句中明確數據庫時,dbname要省略

mysql命令中沒有options參數

mysql -u root -p -e "select * from pmx.score" > 'a.txt'

結果為:

id stu_id c_name grade
1 900 計算機 90
2 901 英語 80
3 902 計算機 70
4 903 中文 30

導出文件中有字段名

 

mysql -u root -p -X  -e "select * from pmx.score" > a.xml

mysql命令可以導出為xml文件

 

mysql -u root -p -H  -e "select * from pmx.score" > a.html

mysql命令可以導出為html文件

還原表結構和數據

mysql -u root -p [dbname] < 目標文件

如果目標文件中有創建數據庫的語句,則dbname省略

還原表數據

load data infile命令

load data [local] infile file into table table_name [options]

options選項和select into outfile選項規則一致,但是多出3個特殊選項

導入文件a.txt的內容

"1"|"900"|"計算機"|"90"
"2"|"901"|"英語"|"80"
"3"|"902"|"計算機"|"70"
"4"|"903"|"中文"|"30"

load data local infile '/Users/pmx/Sites/a.txt' into table pmx.score fields terminated by '|' enclosed by '"' ignore 1 lines (id,grade,c_name,stu_id) set grade = grade + 10

ignore n lines:忽略文件的前n行記錄

(id,grade,c_name,stu_id):每條記錄的每個字段值加載到設置的字段上,也就是原來900對應的是stu_id值,現在900被加載到grade字段上

set column = exp:在加載記錄前,先將column列的值用exp表達式處理下

3個特殊選項的順序是定死的

如果mysql導入的文件中,第一行不是真實數據,要加上ignore n lines忽略掉。

mysqlimport命令

mysqlimport -u root -p [--local] dbname file [option]

 

導入文件score.txt的內容:

select * from pmx.score2 into outfile '/Users/pmx/Sites/score.txt' fields terminated by '---' lines starting by '^' terminated by '$';

^1---900---計算機---90$^2---901---英語---80$^3---902---計算機---70$^4---903---中文---30$

 

mysqlimport -u root -p --local pmx '/Users/pmx/Sites/score.txt' "--fields-terminated-by=---" "--lines-terminated-by=$" "--ignore-lines=1";

mysqlimport命令將導入文件名作為表名,將數據導入到該表中。

mysqlimport命令和mysqldump一樣沒有lines starting by選項

這里每行開頭的^沒有被保存,因為id字段是整型,"^1"在保存之前將^忽略掉了

如果score.txt每行的起始符是一個數字

21---900---計算機---90$22---901---英語---80$23---902---計算機---70$24---903---中文---30$

那么在保存的時候"21"會被保存,然而實際應該保存的是"1"。所以要設置line starting by選項,但是mysqlimport是沒有--line-starting-by選項的,所以這種形式的文件應該用load data infile命令保存

 

在load data infile命令中的選項options最多:

  fields termindate by

  fields [optionally] enclosed by

  fields escaped by

  lines starting by

  lines terminated by

  ignore n lines

  (字段列表)

  set column=exp

在書寫時,必須按照fields>lines>ignore>(字段列表)>set column的優先級。每個選項的子選項間的優先級相同

以上的形式是在登錄mysql后的書寫形式。在沒有登錄進mysql,僅僅是在控制台的話,則應該以"--fields-terminated-by=|"形式書寫。特別的,這種形式是沒有"--lines-starting-by="選項的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM