隨筆-314  評論-209  文章-0  trackbacks-0
          轉自:http://blog.chinaunix.net/uid-16844903-id-3411118.html

          工具

          mysql
          mysqldump

          應用舉例

          導出
          1. 導出全庫備份到本地的目錄
            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. 導出指定庫到本地的目錄(例如mysql庫)
            mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --databases mysql > db.sql
            
            
          3. 導出某個庫的表到本地的目錄(例如mysql庫的user表)
            mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --tables mysql user> db.table.sql
            
            
          4. 導出指定庫的表(僅數據)到本地的目錄(例如mysql庫的user表,帶過濾條件)
            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. 導出某個庫的所有表結構
            mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --no-data --databases mysql > db.nodata.sql
            
            
          6. 導出某個查詢sql的數據為txt格式文件到本地的目錄(各數據值之間用"制表符"分隔)
            例如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. 導出某個查詢sql的數據為txt格式文件到MySQL服務器.
            登錄MySQL,將默認的制表符換成逗號.(適應csv格式文件).
            指定的路徑,mysql要有寫的權限.最好用tmp目錄,文件用完之后,再刪除!
            SELECT user,host,password FROM mysql.user INTO OUTFILE '/tmp/mysql_user.csv' FIELDS TERMINATED BY ',';
            
          導入
          1. 恢復全庫數據到MySQL,因為包含mysql庫的權限表,導入完成需要執行FLUSH PRIVILEGES;命令
            第一種方法:
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8 < db.all.sql
            
            第二種方法:
            登錄MySQL,執行source命令,后面的文件名要用絕對路徑.
            ......
            mysql> source /tmp/db.all.sql;
            
          2. 恢復某個庫的數據(mysql庫的user表)
            第一種方法:
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8 mysql < db.table.sql
            
            第二種方法:
            登錄MySQL,執行source命令,后面的文件名要用絕對路徑.
            mysql -u$USER -p$PASSWD -h127.0.0.1 -P3306 --default-character-set=utf8
            ......
            mysql> use mysql;
            mysql> source /tmp/db.table.sql;
            
          3. 恢復MySQL服務器上面的txt格式文件(需要FILE權限,各數據值之間用"制表符"分隔)
            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. 恢復MySQL服務器上面的csv格式文件(需要FILE權限,各數據值之間用"逗號"分隔)
            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. 恢復本地的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 ',';
            

          注意事項

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

          mysqldump:數據庫備份程序

           

          3種方式來調用mysqldump

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

          如果沒有指定任何表或使用了---database--all--database選項,則轉儲整個數據庫。

           

          備份一個數據庫.

          mysqldump -uroot -p123456 mysql > mysql_backup.sql

          這里備份了database mysql的結構和數據,生成的sql文件不會有創建database mysql的語句。

           

          可以用一個命令備份mysql,test多個數據庫:

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

          生成的sql文件有創建database mysql和test的語句

           

          備份所有數據庫

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

           

          導出mysql這個數據庫的結構

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

           

          導出一個數據所有數據并用gz壓縮

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

           

           

          可以這樣將轉儲文件讀回到服務器:

          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可以把被選擇的行寫入一個文件中,該文件被創建到服務器主機上。

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

          在下面的例子中,生成一個文件,各值用逗號隔開。這種格式可以被許多程序使用

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

          將mysql數據庫的user表的數據導出到/tmp/result.txt

          SELECT...INTO OUTFILE只能導出數據,不能導出結構,一般和load data聯合使用。

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

           

          LOAD DATA INFILE

          LOAD DATA INFILE語句用于高速地從一個文本文件中讀取行,并裝入一個表中。文件名稱必須為一個文字字符串。

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

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

          把/tmp/result.txt的數據導入到test數據庫的user表。

           

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





          posted on 2015-02-09 10:52 xzc 閱讀(662) 評論(0)  編輯  收藏 所屬分類: mysql
          主站蜘蛛池模板: 湟源县| 普定县| 和龙市| 囊谦县| 平谷区| 兴业县| 辽中县| 体育| 抚顺市| 凤台县| 电白县| 常熟市| 洮南市| 安图县| 综艺| 秦安县| 红桥区| 河曲县| 达拉特旗| 布尔津县| 民和| 扎囊县| 玛纳斯县| 夏津县| 五家渠市| 京山县| 正蓝旗| 紫金县| 克拉玛依市| 宁都县| 尖扎县| 平阳县| 洪江市| 固安县| 莆田市| 吉安市| 金乡县| 信丰县| 盐城市| 开化县| 东丰县|