1. 程式人生 > >MySQL資料匯出與匯入

MySQL資料匯出與匯入

工具

mysql
mysqldump

應用舉例

匯出
  1. 匯出全庫備份到本地的目錄
  2. 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

    匯出指定庫到本地的目錄(例如mysql庫)
  3. mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --databases mysql > db.sql

    匯出某個庫的表到本地的目錄(例如mysql庫的user表)
  4. mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --tables mysql user> db.table.sql

    匯出指定庫的表(僅資料)到本地的目錄(例如mysql庫的user表,帶過濾條件)
  5. 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

    匯出某個庫的所有表結構
  6. mysqldump -u$USER -p$PASSWD -h127.0.0.1 -P3306 --routines --default-character-set=utf8 --no-data --databases mysql > db.nodata.sql

    匯出某個查詢sql的資料為txt格式檔案到本地的目錄(各資料值之間用"製表符"分隔)
  7. 例如sql為'select user,host,password from mysql.user;'
  8. 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

    匯出某個查詢sql的資料為txt格式檔案到MySQL伺服器.
  9. 登入MySQL,將預設的製表符換成逗號.(適應csv格式檔案).
    指定的路徑,mysql要有寫的許可權.最好用tmp目錄,檔案用完之後,再刪除!
  10. SELECT user,host,password FROM mysql.user INTO OUTFILE '/tmp/mysql_user.csv' FIELDS TERMINATED BY ',';

    匯入
  1. 恢復全庫資料到MySQL,因為包含mysql庫的許可權表,匯入完成需要執行FLUSH PRIVILEGES;命令
  2. 第一種方法:
    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;
  3. 恢復某個庫的資料(mysql庫的user表)
  4. 第一種方法:
    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;

    恢復MySQL伺服器上面的txt格式檔案(需要FILE許可權,各資料值之間用"製表符"分隔)
  5. 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 ;

    恢復MySQL伺服器上面的csv格式檔案(需要FILE許可權,各資料值之間用"逗號"分隔)
  6. 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 ',';

    恢復本地的txt或csv檔案到MySQL
  7. 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,不過是內部的機制.
  5. 轉自http://blog.chinaunix.net/uid-16844903-id-3411118.html