Debian

使用 cron 備份數據庫

  • January 24, 2015

我正在嘗試設置一個 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或如果您有可用空間,請在備份完成後壓縮

引用自:https://unix.stackexchange.com/questions/180846