導出數據
今天從Mysql的某個庫中導出一個表大概有20分鍾吧,等了一會終於導出成功了。查看一下文件的大小:
[tidb@:vg_adn_CkhsTest ~]$du -h ./creative_output.sql 41G ./creative_output.sql
這個文件是相當大的,有41G左右。
導出的命令很簡單:mysqldump -hhost -uname -ppwd 表名 > xxx.sql
就這樣就導出來的,我們只需要等結果就可以。
如果我們想導出一個數據庫,那就要使用:mysqldump -hhost -uname -ppwd --database 庫名 > xxx.sql。也就是說多加了一個參數。
導入數據
使用mysqldump導出的數據,我們打開查看一下會發現是含有表結構的,並不是說像Csv那樣的純文本數據,因此使用source命令到導入數據即可。
由於本人搞混了幾個備份和恢復數據的命令,導致本來就很快搞定的事情,花了幾個小時。雖然踩了不少坑,但還是有收獲的。
注意:mysqldump導出的數據是含有表結構的數據,除此之外還含有mysql的一些狀態參數等。並不是純文本數據。所以這里我一開始使用了load data命令來導入數據,發現總是出錯的。且先不說load data命令的參數挺多的。
使用load data參數導入數據的時候,要確認一下導入的文件是不是純文本文件,load data只適合導入一下類似與csv類型的文本。這種類型的文本只有數據,所以你要先創建好數據庫后還要創建好表的結構,我這次就是又去嘗試創建表結構后去導入數據,在這個過程中其中我心里面就覺得怪怪的,因為我之前也做過對表的備份,那個時候我並沒有建表,而是直接將表導入數據庫就可以了,但是怎么導入的我就是想不起來。后來去網上查找一下發現有個load data命令可以導入,所以我就一直在踩坑。一直在load data命令里面錯誤循環。
所以在這里糾正一下,mysqldump導出的數據使用mysql命令(客戶端未登錄數據庫)或者source命令(客戶端鏈接mysql后)來導入數據。
1、首先出現錯誤:
# mysqlimport -uabc -p'123' -h db1 -P 3306 DB a.txt mysqlimport: Error: 1290, The MySQL server is running with the --secure-file-priv option so it cannot execute this statement, when using table:
是因為mysql限制了導入數據的目錄,修改一下就可以了。
我們來查看--secure-file-priv參數
> show global variables like 'secure_file_priv'; +------------------+-----------+ | Variable_name | Value | +------------------+-----------+ | secure_file_priv | /dev/null | +------------------+-----------|
此參數不是動態參數。需要添加配置文件,重啟服務才可以生效。
1)不限制導入導出
2)限制在特定目錄下
# cat /etc/my.cnf
[mysqld]
secure_file_priv = /tmp
--只允許/tmp目錄下的數據文件可以導入,其他目錄下的文件沒有權限導入。
2、在load data的時候,也出現了一些錯誤:比如:
>load data .........................
error(2013):Lost connection to MySQL server during query
像這種錯誤就是客戶端連接mysql數據庫延時的錯誤。再深入一點就是說sql語句操作的時間過長,查詢或導入的語句過大導致的。
我們可以這樣子做:
先查看max_allowed_packet的值是多少:
show VARIABLES like '%max_allowed_packet%';
如果你覺得比較小,那么在mysql客戶端中對max_allowed_packet等幾項設置較大的值。以KB為單位
比如:
set global max_allowed_packet = 50000000
set global wait_timeout=2880000
set global interactive_timeout = 2880000
這三個中我們要先設置第一個,先把第一個設置的值大一點,上面的這個例子是我已經設置過了,你的查出來可能不會有這么大,因為我的文件就是40多個G ,因此我設置成了50G的大小,一般根據文件大小來設置。
如果第一個設置了之后還是出現同樣的問題,那就把剩下的兩個值也設置的大一點。注意:我上面是自己已經設置的比較大。
最后,你設置完之后要退出客戶端重新連接一下才會生效(並不是重啟mysql數據庫),再次連接之后你會發現這個值就變成了你修改的那個值。不過重啟過mysql之后這個值就會重新還原,因此如果你想要永久生效,最好在配置文件中添加這三個參數。
對我來說,本來導入的數據就不應該使用load data命令來導入,出現了上面的情況,因此修改了參數還是沒有解決,而且,我的系統報錯非常快,就是當你執行load data命令后,馬上返回錯誤,這一點大家要注意,根本就沒有超過延遲時間可就報錯了,這本身就很可疑。
本次實驗額參考了兩位博主:
https://blog.csdn.net/lovemysea/article/details/79121154
https://www.aliyun.com/jiaocheng/1125866.html
參考連接:http://blog.51cto.com/11580138/1931925