為解決mysql數據安全問題,使用linux自帶的定時任務執行腳本,腳本調用mysqldump命令備份數據庫。
所用到的技術點:
mysqldump命令
crontab定時任務
實現備份腳本
1、 創建備份目錄
例如
cd /data/mide/data_bak
mkdir mysql_bak
2、 創建腳本文件
touch autobackup_mysql.sh
vi autobackup_mysql.sh
文件內容如下:
以上腳本目的是調用mysqldump命令備份mide數據庫到指定的sql文件,文件名使用了格式化的日期。導出後使用tar命令將文件打包壓縮,然後刪除sql文件,最終結果如下:
4、 測試腳本
腳本編寫後不要直接寫定時任務,先測試腳本
./autobackup_mysql.sh
查看生成的結果文件是否正確
5、mysqldump也可以直接生成壓縮文件,這裡並沒有使用而是分開操作了。效果是一樣的
實現定時任務
數據庫的備份一般都使用定時任務,在夜裡系統使用量小的時候自動執行。我們這裡使用linux自帶的crontab程序編寫定時任務。
關於crontab的使用查看補充內容
1、 編寫定時任務執行上一步的備份腳本
執行crontab -e
此命令會自動進入vi編輯狀態,輸入以下內容:
2、 esc退出編輯狀態,:wq保存並退出文件
3、 查看任務是否已添加
執行crontab -l
看到剛才輸入的內容說明任務添加成功
4、 重啟crontab服務即可
5、 為了驗證定時任務是否可用成功運行,可用先把定時任務的時間指定在未來幾分鐘之後,然後等待查看是否執行並生成備份文件,如果沒問題再把時間改為凌晨三點
6、 修改完crontab的定時任務需要重啟才能生效
7、 確定定時任務是開機自啟動的
補充
mysqldump
mysqldump常用於MySQL數據庫邏輯備份。
A. 最簡單的用法:
mysqldump -uroot -pPassword [database name] > [dump file]
上述命令將指定數據庫備份到某dump文件(轉儲文件)中,比如:
mysqldump -uroot -p123 test > test.dump
生成的test.dump文件中包含建表語句(生成數據庫結構哦)和插入數據的insert語句。
B. --opt
如果加上--opt參數則生成的dump文件中稍有不同:
建表語句包含drop table if exists tableName
insert之前包含一個鎖表語句lock tables tableName write,insert之後包含unlock tables
C. 跨主機備份
使用下面的命令可以將host1上的sourceDb複製到host2的targetDb,前提是host2主機上已經創建targetDb數據庫:
mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb
-C指示主機間的數據傳輸使用數據壓縮
%1. 只備份表結構
mysqldump --no-data --databases mydatabase1 mydatabase2 mydatabase3 > test.dump
將只備份表結構。--databases指示主機上要備份的數據庫。如果要備份某個MySQL主機上的所有數據庫可以使用--all-databases選項,如下:
mysqldump --all-databases > test.dump
E. 從備份文件恢復數據庫
mysqldump [database name] < [backup file name]
更多mysqldump命令的參數和用法可以參考官方文檔說明:
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
crontab
cron服務是Linux的內置服務,但它不會開機自動啟動。可以用以下命令啟動和停止服務:
/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload
以上1-4行分別為啟動、停止、重啟服務和重新加載配置。
要把cron設為在開機的時候自動啟動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可
查看當前用戶的crontab,輸入 crontab -l;
編輯crontab,輸入 crontab -e
刪除crontab,輸入 crontab -r
添加任務
crontab -e
0 */1 * * * command
0 */2 * * * command
查詢任務是否加了:
crontab -l -u root #查看root用戶
0 */1 * * * command
0 */2 * * * command
時間格式說明:
基本格式 :
* * * * * command
分 時 日 月 周 命令
第1列表示分鐘1~59 每分鐘用*或者 */1表示
第2列表示小時1~23(0表示0點)
第3列表示日期1~31
第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)
第6列要運行的命令
crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重啟apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重啟apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每週六、週日的1 : 10重啟apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啟apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重啟apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小時重啟apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11點到早上7點之間,每隔一小時重啟apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4號與每週一到週三的11點重啟apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一號的4點重啟apache
如果發現服務器沒有安裝crontab軟件,可以使用以下命令安裝(centos環境下):
安裝crontab:
[root@CentOS ~]# yum install vixie-cron
[root@CentOS ~]# yum install crontabs
說明:
vixie-cron軟件包是cron的主程序;
crontabs軟件包是用來安裝、卸裝、或列舉用來驅動 cron 守護進程的表格的程序。
閱讀更多 JAVA周老師 的文章