MySQL數據導出與導入

發一篇基礎的,關於MySQL數據導出導入的文章,目的有二:

1.備忘

2.供開發人員測試

工具

mysql/source 導入
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,不過是內部的機制.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章