1. 程式人生 > >mysql學習7備份和匯出匯入

mysql學習7備份和匯出匯入

攜程網被黑,備份很重好

(1)資料庫備份:直接拷貝data檔案是不好的,因為mysql伺服器可能在執行和操作資料庫。備份還原還有:mysqlhotcopy工具。

./bin/mysqldump -u root -p --all-databases > dump-data/backup.sql     ----備份所有資料庫。
./bin/mysqldump -u root -p surpas > dump-data/surpas-back.sql;  ----備份一個數據庫。
./bin/mysqldump -u root -p --databases surpas mysql > dump-data/surpas-back.sql;  ----備份多個數據庫。

(2)還原:注意,因為資料庫的操作使用者是mysql.mysql,因此需要他對/usr/local/mysql/data有許可權
./bin/mysql -u root -p < dump-data/backup.sql     ----注意還原這裡時mysql而不是mysqldump,可以不帶資料庫名字全部還原。
./bin/mysql -u root -p surpas < dump-data/surpas-back.sql;  ----還原一個數據庫。必須代資料庫名字。
./bin/mysql -u root -p < dump-data/surpas-mysql-back.sql; ----還原備份的多個數據庫。可以不帶資料庫名字全部還原。
------注意:一個數據庫,必須帶資料庫名字surpas。我們開啟dump-data/surpas-back.sql可以看到:
......(省略)
DROP TABLE IF EXISTS `employer`; ----這裡直接以表操作開始
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `employer` (
.....(省略)
開啟dump-data/surpas-mysql-back.sql可以看到:
.....(省略)
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `surpas` /*!40100 DEFAULT CHARACTER SET utf8 */;------這裡以建立資料庫開始
USE `surpas`;
--
-- Table structure for table `employer`
--
DROP TABLE IF EXISTS `employer`;
.....(省略)

發現錯誤一個:
還原時出現了:Can't create table 'admin_table'。一般情況是因為許可權不夠。chown -R mysql.mysql /usr/local/mysql/data;chgrp -R mysql /usr/local/mysql.但是這次我將/usr/local/mysql/data刪除了,因此導致了資料庫不能用了。我使用了/usr/local/mysql/scripts/mysql_install_db --usr=mysql;重新安裝。恢復了/usr/local/mysql/data,但是我使用service mysqld restart.啟動伺服器出現了下面問題:
-----The server quit without updating PID file (/usr/local/mysql/data/actiontec12.pid).
-----/usr/local/mysql/data/actiontec12.pid的確不存在,可能有2個原因:1./usr/local/mysql/data/許可權不夠。2.mysql.server的埠被佔用了。使用以下命令:
netstat -tunlp |grep 3306
-----tcp6       0      0 :::3306                 :::*                    LISTEN      3560/mysqld
-----說明埠被mysqld佔用了,看看程序:
ps -aux | grep mysql;
-----3560 pts/1    Sl     0:08 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin user=mysql --log-error=/usr/local/mysql/data/actiontec12.err --pid-file=/usr/local/mysql/data/actiontec12.pid
-----裡面也有個:--pid-file=/usr/local/mysql/data/actiontec12.pid,指定了pid檔案,我將這個程序刪除掉:
kill -9 3560;
service mysqld restart;可以用了。

(3)匯出表格:
(3-1)select * from suremployer where num>1 into outfile '/usr/local/mysql/exportTableDir/suremployerTable.txt';
檔案如下:
201500001       1000    張三    25      男      students street
201500003       1010    李四    24      女      grade street
-----select * from suremployer where num>1 into outfile '/usr/local/mysql/exportTableDir/suremployerTable.txt' [OPTION];可能的OPTION操作是:fields terminated by '\t'每行中欄位分隔符,預設'\t'製表符;FIELDS ENCLOSED BY '\"'每個欄位用"括起來,預設無;FIELDS OPTIONALLY ENCLOSED BY '\"'每個字串欄位用"括起來,預設無;FIELDS ESCAPED BY ''轉義字元(如\t),預設'\';LINES STARTING BY '>' 行開始用'>',預設無;lines terminated by'\r\n' 行切換符號為'\r\n',預設'\n';
(3-2)select * from suremployer where num>1 into outfile '/usr/local/mysql/exportTableDir/suremployer.txt' fields terminated by ', ' enclosed by '\"' lines starting by '>>' terminated by '\r\n';
檔案如下:如果用optionally enclosed by '\"';雙引號只會括字串。
>>"201500001", "1000", "張三", "25", "男", "students street"
>>"201500003", "1010", "李四", "24", "女", "grade street"
(3-3)使用mysqldump匯出。
./bin/mysqldump -u root -p123456 -T '/usr/local/mysql/exportTableDir/' surpas employer "--fields-terminated-by=, " "--fields-optionally-enclosed-by=\"" "--lines-terminated-by=\n"
檔案內容:
1, "黃衝", "男", 33, "1號街區"
2, "張三", "男", 25, \N
-----p123456輸入密碼,-T輸入路徑(這裡輸入路徑而不是檔名,自動生成檔名employer.sql和employer.txt),surpas資料庫,employer表,"--fields-terminated-by=, "可以要雙引號也可以不要,但是不能寫成:"--fields-terminated-by=', '"這就和select into outfile一樣了,會出錯:
錯誤:Field separator argument is not what is expected; check the manual when executing 'SELECT INTO OUTFILE'
(3-4)mysql匯出:
mysql -u root -p -e "select * from suremployer" surpas > /usr/local/mysql/exportTableDir/mysuremployer.txt
mysql -u root -p --xml|-X|--html|-H -e "select * from suremployer" surpas > /usr/local/mysql/exportTableDir/mysuremployer.txt
--------:--xml/-X/--html/-H轉成對應格式的檔案。


(4)匯入表格:
(4-1)使用load data infile into table.
load data infile '/usr/local/mysql/exportTableDir/employer.txt' into table employer fields terminated by ', ' optionally enclosed by '\"' lines terminated by '\n';
----他就像select的逆操作,觀察表格的格式進行解析。fields terminated by等可以參考select;多了幾項:IGNORE 10 LINES忽略10行;set column=表示式:指定列column指定表示式匯入;(欄位列表):根據該欄位順序載入。
(4-2)使用mysqlimport:
./bin/mysqlimport -u root -p surpas '/usr/local/mysql/exportTableDir/suremployer.txt' "--fields-terminated-by=, " "--fields-enclosed-by=\"" "--lines-terminated-by=\r\n" "--ignore-lines=3" ;
----注意:使用mysqlimport和mysqldump是不沒有"--lines-starting-by",因此在使用select匯出的時候最好不要用:lines starting by '>>'