2012-06-25 131 views
2
print 'restore db1' 
run_command('pg_restore -i -h localhost -p 5432 -U postgres -d db1 -v "/var/lib/project/backup/db1.backup" -c') 
print '--- wait 3 seconds' 
time.sleep(3) 

print 'restore db2' 
run_command('pg_restore -i -h localhost -p 5432 -U postgres -d db2 -v "/var/lib/project/backup/db2.backup" -c') 
print '--- wait 3 seconds' 
time.sleep(3) 

print 'restoring mongodb' 
run_command('/var/lib/project/bbds/mongodb-linux/bin/mongorestore /var/lib/project/backup/dump --drop') 
print '--- wait 3 seconds' 
time.sleep(3) 

我的run_command基本上取自this有時我的pg_restore或mongorestore卡住了

在我的控制檯:

python ignition.py --load-fixtures 
For safety, this process will run for about one minute. 
setup LDAP 
restore db1 
['pg_restore', '-i', '-h', 'localhost', '-p', '5432', '-U', 'postgres', '-d', 'db1', '-v', '/var/lib/project/backup/db1.backup', '-c'] 
Password: 

這正好卡輸入密碼後。事後沒有任何反應。我不確定它是否資源繁忙。 pg_restore仍然按照ps au|grep pg_restore運行,而mongorestore不是。所以它必須堅持第一次恢復。我不認爲它的內存已滿,因爲我的虛擬機只有512MB,並且它一直都是滿的,並且總是使用交換內存。

我們怎麼知道它在做什麼?有時它會恢復mongo。所有這些操作都可能導致問題。 我應該如何解決這個問題?

謝謝。


當我殺的過程中,我得到這個回溯:http://pastebin.com/Cnv9P6HW 重新啓動電腦將「解決」問題。它將允許我毫無問題地運行腳本。但這並不穩定。有時候我們會遲到。

回答

2

您對pg_restoremongorestore的使用似乎是獨立的。我會嘗試:

  • 直接在命令行中運行的每個命令(即不通過Python do_command()
  • 將這些成單獨的腳本中,這樣就可以計算出該命令是掛

你提只有512MB內存,並始終使用交換表明此虛擬機上沒有足夠的可用內存。 「卡住」究竟意味着什麼?如果虛擬機實際上被楔住並需要重新啓動,那麼很可能已經用完了RAM和交換。如果您仍然可以登錄,但恢復腳本似乎運行時間超過預期時間,我會嘗試使用performance monitoring tools(如iostatvmstat)瞭解資源使用情況。

+0

謝謝。在進一步調查您提供的其他建議之前,我會先做出迴應。我已經檢查過'free -m'並且swap沒有滿,所以它看起來好像不是很奇怪。它可能是數據庫被另一個進程鎖定?我試圖'strace' pg_restore。它掛在那裏。看到這裏(http://blog.kimiensoftware.com/2011/06/pg_restore-hanging-on-remote-create-index-344)它沒有說'投票'或任何東西。只要掛在'過程32305附加 - 中斷退出'行謝謝。 – CppLearner

+0

@CppLearner:你有沒有試過在PostgreSQL郵件列表上提問?一些更多的細節會有幫助,例如:你的O/S,pg_restore/pg_dump的特定版本(即'pg_restore --version','pg_dump --version')和使用的pg_dump選項。我還沒有遇到同樣的問題,pg_restore顯然神祕地掛起。 – Stennie

+0

@CppLearner:另一個建議嘗試...查看您是否可以在pg_restore運行時查看正在執行的查詢(http://chrismiles.info/systemsadmin/databases/articles/viewing-current-postgresql-queries/)(或「掛起」)。 – Stennie