隨筆-314  評(píng)論-209  文章-0  trackbacks-0
          轉(zhuǎn)自:http://blog.chinaunix.net/uid-16844903-id-3411118.html

          工具

          mysql
          mysqldump

          應(yīng)用舉例

          導(dǎo)出
          1. 導(dǎo)出全庫(kù)備份到本地的目錄
            mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --lock-all-tables --add-drop-database -A > db.all.sql
            
            
          2. 導(dǎo)出指定庫(kù)到本地的目錄(例如mysql庫(kù))
            mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --databases mysql > db.sql
            
            
          3. 導(dǎo)出某個(gè)庫(kù)的表到本地的目錄(例如mysql庫(kù)的user表)
            mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --tables mysql user> db.table.sql
            
            
          4. 導(dǎo)出指定庫(kù)的表(僅數(shù)據(jù))到本地的目錄(例如mysql庫(kù)的user表,帶過(guò)濾條件)
            mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --no-create-db --no-create-info --tables mysql user --where="host='localhost'"> db.table.sql
            
            
          5. 導(dǎo)出某個(gè)庫(kù)的所有表結(jié)構(gòu)
            mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --no-data --databases mysql > db.nodata.sql
            
            
          6. 導(dǎo)出某個(gè)查詢(xún)sql的數(shù)據(jù)為txt格式文件到本地的目錄(各數(shù)據(jù)值之間用"制表符"分隔)
            例如sql為'select user,host,password from mysql.user;'
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8 --skip-column-names -B -e 'select user,host,password from mysql.user;' > mysql_user.txt
            
            
          7. 導(dǎo)出某個(gè)查詢(xún)sql的數(shù)據(jù)為txt格式文件到MySQL服務(wù)器.
            登錄MySQL,將默認(rèn)的制表符換成逗號(hào).(適應(yīng)csv格式文件).
            指定的路徑,mysql要有寫(xiě)的權(quán)限.最好用tmp目錄,文件用完之后,再刪除!
            SELECT user,host,password FROM mysql.user INTO OUTFILE '/tmp/mysql_user.csv' FIELDS TERMINATED BY ',';
            
          導(dǎo)入
          1. 恢復(fù)全庫(kù)數(shù)據(jù)到MySQL,因?yàn)榘琺ysql庫(kù)的權(quán)限表,導(dǎo)入完成需要執(zhí)行FLUSH PRIVILEGES;命令
            第一種方法:
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8 < db.all.sql
            
            第二種方法:
            登錄MySQL,執(zhí)行source命令,后面的文件名要用絕對(duì)路徑.
            ......
            mysql> source /tmp/db.all.sql;
            
          2. 恢復(fù)某個(gè)庫(kù)的數(shù)據(jù)(mysql庫(kù)的user表)
            第一種方法:
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8 mysql < db.table.sql
            
            第二種方法:
            登錄MySQL,執(zhí)行source命令,后面的文件名要用絕對(duì)路徑.
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
            ......
            mysql> use mysql;
            mysql> source /tmp/db.table.sql;
            
          3. 恢復(fù)MySQL服務(wù)器上面的txt格式文件(需要FILE權(quán)限,各數(shù)據(jù)值之間用"制表符"分隔)
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
            ......
            mysql> use mysql;
            mysql> LOAD DATA INFILE '/tmp/mysql_user.txt' INTO TABLE user ;
            
          4. 恢復(fù)MySQL服務(wù)器上面的csv格式文件(需要FILE權(quán)限,各數(shù)據(jù)值之間用"逗號(hào)"分隔)
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
            ......
            mysql> use mysql;
            mysql> LOAD DATA INFILE '/tmp/mysql_user.csv' INTO TABLE user FIELDS TERMINATED BY ',';
            
          5. 恢復(fù)本地的txt或csv文件到MySQL
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
            ......
            mysql> use mysql;
            # txt
            mysql> LOAD DATA LOCAL INFILE '/tmp/mysql_user.csv' INTO TABLE user;
            # csv
            mysql> LOAD DATA LOCAL INFILE '/tmp/mysql_user.csv' INTO TABLE user FIELDS TERMINATED BY ',';
            

          注意事項(xiàng)

          1. 關(guān)于MySQL連接
            -u$USER 用戶(hù)名
            -p$PASSWD 密碼
            -h127.0.0.1 如果連接遠(yuǎn)程服務(wù)器,請(qǐng)用對(duì)應(yīng)的主機(jī)名或者IP地址替換
            -P3306 端口
            --default-character-set=utf8 指定字符集
          2. 關(guān)于mysql參數(shù)
            --skip-column-names 不顯示數(shù)據(jù)列的名字
            -B 以批處理的方式運(yùn)行mysql程序.查詢(xún)結(jié)果將顯示為制表符間隔格式.
            -e 執(zhí)行命令后,退出
          3. 關(guān)于mysqldump參數(shù)
            -A 全庫(kù)備份
            --routines 備份存儲(chǔ)過(guò)程和函數(shù)
            --default-character-set=utf8 設(shè)置字符集
            --lock-all-tables 全局一致性鎖
            --add-drop-database 在每次執(zhí)行建表語(yǔ)句之前,先執(zhí)行DROP TABLE IF EXIST語(yǔ)句
            --no-create-db 不輸出CREATE DATABASE語(yǔ)句
            --no-create-info 不輸出CREATE TABLE語(yǔ)句
            --databases 將后面的參數(shù)都解析為庫(kù)名
            --tables 第一個(gè)參數(shù)為庫(kù)名 后續(xù)為表名
          4. 關(guān)于LOAD DATA語(yǔ)法
            如果LOAD DATA語(yǔ)句不帶LOCAL關(guān)鍵字,就在MySQL的服務(wù)器上直接讀取文件,且要具有FILE權(quán)限.
            如果帶LOCAL關(guān)鍵字,就在客戶(hù)端本地讀取數(shù)據(jù)文件,通過(guò)網(wǎng)絡(luò)傳到MySQL.
            LOAD DATA語(yǔ)句,同樣被記錄到binlog,不過(guò)是內(nèi)部的機(jī)制.

          mysqldump:數(shù)據(jù)庫(kù)備份程序

           

          3種方式來(lái)調(diào)用mysqldump

          mysqldump [options] db_name [tables]
          mysqldump [options] ---database DB1 [DB2 DB3...]
          mysqldump [options] --all--database

          如果沒(méi)有指定任何表或使用了---database--all--database選項(xiàng),則轉(zhuǎn)儲(chǔ)整個(gè)數(shù)據(jù)庫(kù)。

           

          備份一個(gè)數(shù)據(jù)庫(kù).

          mysqldump -uroot -p123456 mysql > mysql_backup.sql

          這里備份了database mysql的結(jié)構(gòu)和數(shù)據(jù),生成的sql文件不會(huì)有創(chuàng)建database mysql的語(yǔ)句。

           

          可以用一個(gè)命令備份mysql,test多個(gè)數(shù)據(jù)庫(kù):

          mysqldump -u root -p123456 --database mysql test > my_databases.sql

          生成的sql文件有創(chuàng)建database mysql和test的語(yǔ)句

           

          備份所有數(shù)據(jù)庫(kù)

          mysqldump -u root -p123456  --all-databases > all_databases.sql

           

          導(dǎo)出mysql這個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)

           mysqldump -u root -p123456 -d --add-drop-table mysql > mysql_define.sql

           

          導(dǎo)出一個(gè)數(shù)據(jù)所有數(shù)據(jù)并用gz壓縮

          mysqldump -u root -p123456 mysql | gzip > mysql.sql.gz

           

           

          可以這樣將轉(zhuǎn)儲(chǔ)文件讀回到服務(wù)器:

          mysql db_name < backup-file.sql
          mysql -e "source /path-to--backup/backup-file.sql" db_name

          或者從gz文件中還原

          gunzip -f < mysql.sql.gz | mysql -u root -p123456 test

           更多參考 http://dev.mysql.com/doc/refman/5.1/zh/client-side-scripts.html#mysqldump

           

          SELECT...INTO OUTFILE

          SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被選擇的行寫(xiě)入一個(gè)文件中,該文件被創(chuàng)建到服務(wù)器主機(jī)上。

          SELECT...INTO OUTFILELOAD DATA INFILE的補(bǔ)語(yǔ);用于語(yǔ)句的exort_options部分的語(yǔ)法包括部分FIELDSLINES子句,這些子句與LOAD DATA INFILE語(yǔ)句同時(shí)使用。

          在下面的例子中,生成一個(gè)文件,各值用逗號(hào)隔開(kāi)。這種格式可以被許多程序使用

          SELECT * INTO OUTFILE '/tmp/result.txt' 
          FIELDS TERMINATED BY ',' 
          OPTIONALLY ENCLOSED BY '"' 
          LINES TERMINATED BY '\n'
          FROM mysql.user;

          將mysql數(shù)據(jù)庫(kù)的user表的數(shù)據(jù)導(dǎo)出到/tmp/result.txt

          SELECT...INTO OUTFILE只能導(dǎo)出數(shù)據(jù),不能導(dǎo)出結(jié)構(gòu),一般和load data聯(lián)合使用。

          更多參考 http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#select

           

          LOAD DATA INFILE

          LOAD DATA INFILE語(yǔ)句用于高速地從一個(gè)文本文件中讀取行,并裝入一個(gè)表中。文件名稱(chēng)必須為一個(gè)文字字符串。

          character_set_database系統(tǒng)變量指示的字符集被用于解釋文件中的信息。

          LOAD DATA LOCAL INFILE '/tmp/result.txt' INTO TABLE test.user
          FIELDS TERMINATED BY ',' 
          OPTIONALLY ENCLOSED BY '"' 
          LINES TERMINATED BY '\n'

          把/tmp/result.txt的數(shù)據(jù)導(dǎo)入到test數(shù)據(jù)庫(kù)的user表。

           

          更多參考 http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#load-data





          posted on 2015-02-09 10:52 xzc 閱讀(662) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): mysql
          主站蜘蛛池模板: 铁岭市| 大丰市| 镶黄旗| 广平县| 蒙城县| 松桃| 吉水县| 北流市| 黎平县| 如皋市| 高密市| 鲁山县| 玛多县| 兴义市| 博野县| 玛曲县| 中宁县| 平凉市| 乌恰县| 九龙县| 同心县| 富民县| 阳山县| 巩义市| 吉水县| 苍南县| 阿图什市| 阳曲县| 凭祥市| 隆回县| 玉龙| 攀枝花市| 仪征市| 隆林| 新野县| 湟中县| 枞阳县| 麟游县| 靖远县| 抚宁县| 高青县|