1. 程式人生 > >【MySQL】Django自動備份MySQL資料庫

【MySQL】Django自動備份MySQL資料庫

使用命令列備份和在Django中使用Python呼叫命令列進行備份:

使用命令列備份

錯誤的輸入:

mysqldump -u root -p mysql book_info > /home/python/newtest/book_info_$(date +%Y%m%d_%H%M%S).sql

這樣會提示輸入密碼,輸入密碼後會有錯誤資訊:

Enter password: 
mysqldump: Couldn't find table: "book_info"

正確的輸入:

直接將使用者名稱,密碼直接挨著-u,-p輸入.

mysqldump -uroot -pmysql book_info > /home/python/newtest/book_info_$(
date +%Y%m%d_%H%M%S).sql

這樣輸入會提示

[Warning] Using a password on the command line interface can be insecure.

意思是說,在命令列介面上直接使用密碼可能不安全。但是這樣是可以輸出所需要結果.

mysqldump -uusername -ppassword database_name > /pwd/database_name.sql

使用$(date +%Y%m%d_%H%M%S)

使用這個,作用類似於時間戳,為了保證不會重名覆蓋,具體使用在下面有寫.

django自動備份:

使用Python呼叫命令列:

使用Python來執行命令列,可以使用os.system()
雖然這樣得不到返回值,但這裡也不需要返回值,所以可以使用這個.

import os
def database_backup():
    os.system('mysqldump -uroot -pmysql book_info > /home/python/newtest/book_info_$(date +%Y%m%d_%H%M%S).sql')

自動備份django-crontab:

關於django-crontab的使用,在另外一篇中寫過
https://blog.csdn.net/lvluobo/article/details/80979038

(date +%Y%m%d-%H%M%S)

在命令列輸入的時候,是可以得到
形如

20180718-112157

是可以修改顯示格式的,使用_等等都可以,但是%d %H必須有連線,不能為空格

值得注意的是:

vim zhidezhuyideshi_$(date+%Y%m%d_%H%M%S)

會提示:

date+%Y%m%d_%H%M%S:未找到命令

創建出來的檔案,也沒有時間作為字尾

zhidezhuyideshi_

正確的做法為:

vim zhidezhuyideshi_$(date +%Y%m%d_%H%M%S)

創建出來的檔案:

zhidezhuyideshi_20180718_113009

date後面需要加一個空格..

恢復資料庫

恢復資料庫,先進入指定資料庫(如果沒有,就建立一個同名數據庫),在mysql中執行命令:source /絕對路徑/SQL檔案