今天遇到一個很傻逼的問題,有人登上開發服務器,不知是有意仍是無意;把mysql裏面的庫所有刪除了。。。那我的結果如何,咱們就不做討論了。。。沒辦法我只能寫個shell腳本,用crontab跑下定時;作些簡單的數據備份了,順便寫個筆記
其實很簡單mysql
這裏有幾個問題須要注意的:linux
固然數據備份,你能夠選擇對應的時間段,按照對應的業務的狀況定義備份的週期,又或者若是 mysql服務器上庫多,根據不一樣業業務,不一樣時間段備份;這也是能夠的。。。看具體業務狀況咯!web
由於個人只是開發和測試用,數據量不會很大,因此影響就能夠忽略了,只要在你們都下班了後備份就不要緊了(因此我定的是:天天深夜12點備份,一個月後吧上個月的清理了)sql
mysqldump 所須要的權限說明:shell
下面是用戶建立預計(有不懂的能夠另行google,就很少展開了):服務器
create user dumper@'127.0.0.1'; grant select on tempdb.* to dumper@'127.0.0.1'; grant show view on tempdb.* to dumper@'127.0.0.1'; grant lock tables on tempdb.* to dumper@'127.0.0.1'; grant trigger on tempdb.* to dumper@'127.0.0.1';
#!/bin/sh # Database info DB_USER="dumper" DB_PASS="..." DB_HOST="..." # Database array DB_NAME=("hotel" "food" "foodweb") # Others vars BIN_DIR="/usr/bin" #the mysql bin path BCK_DIR="/home/mysql-backups" #the backup file directory DATE=`date +%F` # create file mkdir $BCK_DIR/$DATE # TODO # /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql for var in ${DB_NAME[@]}; do $BIN_DIR/mysqldump --opt --single-transaction --master-data=2 -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/$DATE/db_$var.sql done
參數說明: 測試
--master-data[=#] google
在備份導出的文件裏追加二進制binlog文件的位置和名稱
若是值等於1,就會添加一個CHANGE MASTER語句
若是值等於2,就會在CHAGE MASTER語句前添加註釋(不起做用了唄~)
這個參數會--lock-all-tables鎖表,除非你指定了--single-transaction
這種狀況下,鎖表只會在dump開始的時候持續一小段時間,照理說 在dump的時候,任何動做都會影響到binlog文件 dump結束以後,選項會自動關閉鎖表功能code
--single-transactioncrontab
以事務的形式執行
#!/bin/sh find /home/mysql-backups -mtime +30 -name "*.*" -exec rm -Rf {} \;
說明:
crontab -e
0 0 * * * /home/sh/mysql-backups/dump.sh 0 0 1 * * /home/sh/mysql-backups/del.sh