Mysql

Mysql select 以’killed’結尾

  • November 17, 2016

好的,我確信這會變得很愚蠢,但是我是一個愚蠢的 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 *.

我看到兩個問題

  1. 您應該指定目標數據庫
  2. 您應該提供密碼

例如

  • 使用者是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

引用自:https://dba.stackexchange.com/questions/58386