MySQL定時備份數據

MySQL定時備份數據

為解決mysql數據安全問題,使用linux自帶的定時任務執行腳本,腳本調用mysqldump命令備份數據庫。

所用到的技術點:

mysqldump命令

crontab定時任務

實現備份腳本

1、 創建備份目錄

例如

cd /data/mide/data_bak

mkdir mysql_bak

2、 創建腳本文件

touch autobackup_mysql.sh

vi autobackup_mysql.sh

文件內容如下:

MySQL定時備份數據

以上腳本目的是調用mysqldump命令備份mide數據庫到指定的sql文件,文件名使用了格式化的日期。導出後使用tar命令將文件打包壓縮,然後刪除sql文件,最終結果如下:

MySQL定時備份數據

4、 測試腳本

腳本編寫後不要直接寫定時任務,先測試腳本

./autobackup_mysql.sh

查看生成的結果文件是否正確

5、mysqldump也可以直接生成壓縮文件,這裡並沒有使用而是分開操作了。效果是一樣的

實現定時任務

數據庫的備份一般都使用定時任務,在夜裡系統使用量小的時候自動執行。我們這裡使用linux自帶的crontab程序編寫定時任務。

關於crontab的使用查看補充內容

1、 編寫定時任務執行上一步的備份腳本

執行crontab -e

此命令會自動進入vi編輯狀態,輸入以下內容:

MySQL定時備份數據

2、 esc退出編輯狀態,:wq保存並退出文件

3、 查看任務是否已添加

執行crontab -l

MySQL定時備份數據

看到剛才輸入的內容說明任務添加成功

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 守護進程的表格的程序。


分享到:


相關文章: