1. 程式人生 > >Linux下實現Mysql定時任務備份資料

Linux下實現Mysql定時任務備份資料

建立備份目錄

本例項將建立目錄放置於/mnt目錄下,可根據具體情況放置於其他目錄:

cd /mnt
mkdir dbback
pwd
/mnt/dbback

建立shell指令碼

指令碼名稱可根據自己規範進行自定義:

vim bcmysql.sh

進入編輯器,輸入以下內容:

#!/bin/bash
mysqldump -uusername -ppassword demo > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql

如果需要本分檔案進行壓縮,可輸入下面命令:

#!/bin/bash
mysqldump -uusername -ppassword demo | gzip > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql.gz

在具體操作中,需要將username,password和demo分別替換成對應的資料庫使用者名稱、密碼和資料庫名。

新增可執行許可權

chmod u+x bcmysql.sh

新增完執行許可權之後,執行此指令碼,可能會出現如下異常:

mysqldump: [Warning] Using a password on the command line interface can be insecure.

這個問題應該是在MySQL5.6+版本的時候就有出現,可能是為了確保資料庫的安全性採用的保護機制。在本例項中使用的mysql版本為5.7.22,雖然有警告資訊,但可以成功備份資料。

修改mysql配置檔案

針對上面的問題,某些版本可能無法成功備份,另外也不建議將資料庫密碼配置在指令碼中,則可直接修改mysql的配置檔案。一般情況下,mysql的配置檔案在/etc/my.cnf。

vim /etc/my.cnf

在此檔案內新增mysqldump的配置如下:

[mysqldump]
user=your_backup_user_name
password=your_backup_password

替換掉對應的使用者名稱和密碼,並修改bcmysql.sh指令碼中的命令,取消使用者名稱和密碼引數,無需重啟mysql,直接執行指令碼即可看到備份結果。

demo_20181114_193425.sql

問題一

當使用vim檢視匯出的sql檔案內容時,會發現中文有亂碼。此問題有兩種情況引起,第一種就是資料庫本身字符集為latain1,則此時需要指定字符集,在執行的引數中新增如下引數:

--default-character-set=gbk

當然如果是utf8則將gbk修改為utf8。檢視資料庫字符集的命令如下:

show variables like '%char%'; 
-- 查詢結果
character_set_client	utf8
character_set_connection	utf8
character_set_database	utf8mb4
character_set_filesystem	binary
character_set_results	utf8
character_set_server	utf8
character_set_system	utf8
character_sets_dir	/usr/local/mysql/share/charsets/

如果將字符集正確修改,依然有亂碼,則可嘗試新增如下引數:

--hex-blob

仔細分析一下表結構,可能表結構中有blob型別,這個引數的含義是用16進位制的方式匯出BINARY, VARBINARY, BLOB型別的資料。修改後的命令如下:

mysqldump --default-character-set=utf8 --hex-blob demo > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql

新增計劃任務

檢測或安裝crontab

執行crontab命令如果報command not found,就表明沒有安裝。

# crontab
-bash: crontab: command not found

如果未安裝,可以通過yum命令進行安裝:

# yum -y install vixie-cron

雖然crontab不支援-h或-help命令,但可以通過此命令檢查是否安裝成功:

[[email protected] ~]# crontab -help
crontab:無效選項 -- h
crontab: usage error: unrecognized option
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x <mask>  enable debugging

Default operation is replace, per 1003.2

新增計劃任務

通過上面的命令引數,我們可以看到修改crontab的命令,執行命令:

crontab -e

進入crontab的編輯操作頁面,可以像vi、vim一樣編輯其中的內容。在其中新增如下命令:

*/1 * * * * /mnt/dbback/bcmysql.sh

此行命令的作用是每隔一分鐘執行一次bcmysql.sh。等待一分鐘之後通過ls命令檢視是否生成備份檔案。發現已經可以正常生成檔案。當然,我們並不需要每分鐘就備份一次,因此把命令改為如下:

0 1 * * * /mnt/dbback/bcmysql.sh

每天凌晨1點執行一次備份操作。

日誌檢視

如果執行失敗了,則可檢視任務日誌:

# tail -f /var/log/cron

小結

至此,一個簡單版本的Linux下實現Mysql定時任務備份資料功能已經實現。當然也可以在此版本基礎上進行目錄控制,歷史記錄刪除等擴充套件。

原文連結:https://www.choupangxia.com/topic/detail/77