Debian
使用 cron 備份數據庫
我正在嘗試設置一個 cron 作業,以便每天備份我的數據庫。這是我在 crontab 文件中寫的內容:
25 18 * * * root mysqldump -u root -p myPassWord --all-databases | gzip > /var/backup/database_`date '+%m-%d-%Y'`.sql.gz
由於在 18:25 沒有發生任何事情,我查看了我的
/var/log/syslog
文件(伺服器在 Debian 下),這是我發現的:Jan 24 18:25:01 ns311475 /USR/SBIN/CRON[16252]: (root) CMD (/usr/local/ispconfig/server/server.sh 2>&1 > /dev/null | while read line; do echo `/bin/date` "$line" >> /var/log/ispconfig/cron.log; done) Jan 24 18:25:01 ns311475 /USR/SBIN/CRON[16253]: (getmail) CMD (/usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null) Jan 24 18:25:01 ns311475 dovecot: imap-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=127.0.0.1, lip=127.0.0.1, secured, session=<3xFlL2kNAAB/AAAB> Jan 24 18:25:01 ns311475 dovecot: pop3-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=127.0.0.1, lip=127.0.0.1, secured, session=<rhRlL2kNvwB/AAAB> Jan 24 18:25:01 ns311475 postfix/smtpd[16279]: connect from localhost.localdomain[127.0.0.1] Jan 24 18:25:01 ns311475 postfix/smtpd[16279]: lost connection after CONNECT from localhost.localdomain[127.0.0.1] Jan 24 18:25:01 ns311475 postfix/smtpd[16279]: disconnect from localhost.localdomain[127.0.0.1]
我不明白第一行,我認為其餘的人正在嘗試通過電子郵件發送問題,但我什麼也沒得到。
Debian 有一個軟體包供您處理 MySQL 數據的轉儲、壓縮和旋轉。您可以使用以下命令安裝它:
$ sudo apt-get install automysqlbackup
在此之後,每天、每周和每月的轉儲將放置在*/var/lib/automysqlbackup*
閱讀精美的手冊:
man 5 crontab
: 在那裡你會看到“%”對於 cron 有特殊的含義。那正在破壞您的預期命令。
除此之外,這是啟動 mySQL 備份的一種非常糟糕的方式:
- 您的 root-DB-password 將出現在每個本地使用者或每個具有 snmp 讀取權限的使用者都可以查看的程序列表中
- 您不應該無緣無故地在 shell 中啟動子 shell。請改用“$(命令)”。
- gzip 將只使用一個 CPU。所以那部分會減慢你的整個備份
你應該:
- 將您的 root-DB 密碼放入根文件夾中的文件(.mysql - 我不記得該文件的確切語法和名稱)中,只能由 root 訪問。這將使用 mySQL 的密碼啟用自動 root 登錄
- 將您正在執行的操作放入 /usr/local/sbin 上的自己的腳本中(可能也僅對 root 和受信任的組可讀)
- 通過 cron 呼叫該腳本。
- 使用該腳本中所有命令的完整路徑。Cron 可能無法在設置了所有“常用”路徑的環境中執行
- 使用
pgzip
或如果您有可用空間,請在備份完成後壓縮