Mysql
Mysql select 以’killed’結尾
好的,我確信這會變得很愚蠢,但是我是一個愚蠢的 n00b DBA。
我有一個大表,大約 1.63 億行,大約 44 GiB。在對 mysqldump 進行了一些備份實驗後,我嘗試在批處理模式下使用 select 建構一個製表符分隔的輸出。
我試過了
echo 'select * from node;' | mysql -u xx -p -B database > file
它以消息“Killed”終止。
所以我嘗試更多地批量登錄mysql,相同的查詢,相同的結果。
我嘗試以正常方式登錄,然後做
select * from node;
結果還是一樣:“被殺”。然而
create table temp_node (select * from node);
工作正常。
所以我顯然錯過了一些基本的東西,但Google搜尋並沒有幫助。同情n00b並告訴我發生了什麼?
請注意,問題不是關於執行命令本身,而是當我執行命令或
select * from node;
從mysql>
提示符執行時,mysql 會以“Killed”消息終止。哦,我怎樣才能導出那個該死的表以供以後載入?
好吧,我以為這是一條熟悉的資訊。那是來自LINUX的說法“程序記憶體不足”。
嗯,沒什麼好說的了。mysql 程序本身記憶體不足並被作業系統終止。我對實現沒有很好的感覺,但似乎它正在嘗試將整個表拉入記憶體以執行 select *.
我看到兩個問題
- 您應該指定目標數據庫
- 您應該提供密碼
例如
- 使用者是root
- 密碼是rootbeer
- 目標數據庫是 mydb
你應該像這樣執行它:
echo 'select * from node;' | mysql -uroot -prootpass -Dmydb -B > file
單獨使用
-p
會導致 mysql 在沒有開放機制讓您輸入密碼的情況下掛起。即使您可以輸入密碼,您仍然需要一個目標數據庫。另一種表達方式如下:
echo 'select * from mydb.node;' | mysql -uroot -prootpass -B > file
至於導出表,也許是做一個mysqldump
mysqldump -uroot -prootpass mydb node > node_table.sql
這將創建一個 SQL 腳本來刪除表、創建表、將數據插入表中並為其編制索引。
試一試 !!!
更新 2014-02-06 14:04 EST
建議
從此改變
echo 'select * from mydb.node;' | mysql -uroot -prootpass -B > file
對此
mysql -uroot -prootpass -ANe"select * from mydb.node" -B > file