我們先看一下對比
直接navicat進行數據查找
Mysql服務中直接導出
直接在數據庫服務器上將數據導出成固定文件,並指定格式,gbk格式是可以被csv文件識別的,不會亂碼 默認不加格式是utf-8的
SELECT * FROM waybill where created >='2020-11-01' and created <'2020-12-01' INTO OUTFILE '/var/lib/mysql-files/11month.csv' character set gbk FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' ;
如果導出來的文件太大,EXCEL打不開,EXCEL最高支持一百零幾萬的數據打開,超過的會被舍棄,這里可以用命令進行拆分成多個文件
Linux split命令用於將一個文件分割成數個。
該指令將大文件分割成較小的文件,在默認情況下將按照每1000行切割成一個小文件。
split -50000 11month.csv
這樣會把這個文件按照每五萬行拆成一個文件,xaa,xab這樣的文件,可以自己給后綴名。
遇到的問題及解決
mysql> SELECT * FROM config_value INTO OUTFILE '/tmp/runoob.txt' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
這需要看一下mysql 是否允許你自定義文件存儲,不允許就按照它指定的目錄存儲即可 為null即表示你可以隨意存儲
SHOW VARIABLES LIKE "secure_file_priv";
將切割后的文件,即可從服務器上down下來
擴展
使用 SELECT ... INTO OUTFILE 語句導出數據
以下實例中我們將數據表 runoob_tbl 數據導出到 /tmp/runoob.txt 文件中:
mysql> SELECT * FROM runoob_tbl
-> INTO OUTFILE '/tmp/runoob.txt';
你可以通過命令選項來設置數據輸出的指定格式,以下實例為導出 CSV 格式:
mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/runoob.txt'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '"'
-> LINES TERMINATED BY '\r\n';
在下面的例子中,生成一個文件,各值用逗號隔開。這種格式可以被許多程序使用。
SELECT a,b,a+b INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
SELECT ... INTO OUTFILE 語句有以下屬性:
LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。為了將一個數據庫的數據寫入一個文件,使用SELECT ... INTO OUTFILE,為了將文件讀回數據庫,使用LOAD DATA INFILE。
SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被選擇的行寫入一個文件中。該文件被創建到服務器主機上,因此您必須擁有FILE權限,才能使用此語法。
輸出不能是一個已存在的文件。防止文件數據被篡改。
你需要有一個登陸服務器的賬號來檢索文件。否則 SELECT ... INTO OUTFILE 不會起任何作用。
在UNIX中,該文件被創建后是可讀的,權限由MySQL服務器所擁有。這意味着,雖然你就可以讀取該文件,但可能無法將其刪除。