匯出到檔案

  1. 登入 mariadb。
    [root@kvm3 ~]# mycli -uroot -p123qwe
    Connecting to socket /var/lib/mysql/mysql.sock, owned by user mysql
    MariaDB 10.5.16
    mycli 1.26.1
    Home: http://mycli.net
    Bug tracker: https://github.com/dbcli/mycli/issues
    Thanks to the contributor - Jerome Provensal
    
  2. 使用 dyw 資料庫。
    MariaDB root@(none):(none)> use dyw;
    You are now connected to database "dyw" as user "root"
    Time: 0.002s
    
  3. 使用語法 SELECT ... INTO OUTFILE 匯出資料到檔案 animals.tex。
    MariaDB root@(none):dyw> select * from animals into outfile '/tmp/animals.txt';
    Query OK, 4 rows affected
    Time: 0.028s
    
  4. 再執行一次,出現檔案已經存在的錯誤訊息,也就是要存入的檔案不能已存在,這是為了避免使用者製造嚴重的損壞。
    MariaDB root@(none):dyw> select * from animals into outfile '/tmp/animals.txt';
    (1086, "File '/tmp/animals.txt' already exists")
    
  5. 使用語法 SELECT ... INTO OUTFILE 並指定格式匯出資料到檔案 animals1.txt。
    MariaDB root@(none):dyw> select * from animals into outfile '/tmp/animals1.txt' f
                          -> ields terminated by ',' enclosed by '"' lines terminated
                          ->  by '\r\n';
    Query OK, 4 rows affected
    Time: 0.013s
    MariaDB root@(none):dyw> quit;
    Goodbye!
    
  6. 為了安全起見 mariadb 將 into outfile 存檔 /tmp/animals.txt,實際存在路徑是 /tmp/systemd-private-xxxx-mariadb.service-xxxx/tmp/animals.txt。
  7. 在路徑 /tmp/systemd-private-* 中找到 animals.txt。
    [root@kvm3 ~]# find /tmp/systemd-private-* -name animals.txt
    /tmp/systemd-private-0a153b804a324bf49246a6dd422cc22b-mariadb.service-3gFnjh/tmp/animals.txt
    
  8. 將路徑 /tmp/systemd-private-* 中找到的 animals.txt,以 cat 命令顯示內容。
    [root@kvm3 ~]# find /tmp/systemd-private-* -name animals.txt -exec cat {} \;
    1	dog	4
    2	cat	4
    3	chicken	2
    15	bird	2
    
  9. 將路徑 /tmp/systemd-private-* 中找到的 animals1.txt,以 cat 命令顯示內容。
    [root@kvm3 ~]# find /tmp/systemd-private-* -name animals1.txt -exec cat {} \;
    "1","dog","4"
    "2","cat","4"
    "3","chicken","2"
    "15","bird","2"
    
  10. 如果要將匯出的檔案存到系統實際的 /tmp 目錄,必須修改 mariadb.service,設定 privateTmp=false,重新載入 daemon,重新啟動 mariadb.service。
    [root@kvm3 ~]# grep PrivateTmp /etc/systemd/system/multi-user.target.wants/mariadb.service
    PrivateTmp=false
    [root@kvm3 ~]# systemctl daemon-reload 
    [root@kvm3 ~]# systemctl restart mariadb.service