首先登陸mysql:
mysql -u root -p 注意:不是系統root的密碼,mysql安裝好后默認root密碼為空
>set password for 'root'@'localhost' = password('*****'); --修改root用戶的本地密碼
>grant all on zabbix.* to backup@'localhost' identified by "123456"; ---創建備份zabbix數據庫的用戶和密碼,授權了對zabbix數據庫的所有權限
退出數據庫,我們編輯/etc/my.cnf,在[client]模塊下添加用戶名和密碼如下:
host=localhost
user=backup
password='123456'
準備工作做好后來寫腳本:
------------------------mysql_backup.sh--------------------------------------
#!/bin/bash
#auto backup mysql db --說明信息
#from net video 2017 --說明信息
#define backup path --第一步做好參數定義準備工作,有利于后面代碼的簡潔
BAK_DIR=/data/backup/`date +%Y%m%d`
MYSQLDB=zabbix
MYSQLCMD=/usr/bin/mysqldump
#以上的參數第一個是指定備份路徑,第二個是備份的數據庫名,第三個是備份的執行程序
#Juge the exec user author
if [ $UID -ne 0 ];then
echo "Must to be use root for exec shell."
exit
fi
#以上的語句主要是用于判斷是否用root用戶執行
#Juge if backup exists
if [ ! -d $BAK_DIR ];then
mkdir -p $BAK_DIR
echo -e "\033[32mThe $BAK_DIR Creat Successfully!\033[0m"
else
echo "This $BAK_DIR is exists..."
fi
#以上的語句是判斷備份的目錄是否存在,如果不存在則創建并提示創建成功
#Mysql backup command
$MYSQLCMD --defaults-extra-file=/etc/my.cnf -d $MYSQLDB >$BAK_DIR/$MYSQLDB.sql
#這條語句就是執行備份的,--defaults-extra-file應用文件中的mysql用戶和密碼,-d參數,只導出表結構
#Juge Success or Failed
if [ $? -eq 0 ];then
echo -e "\033[32mThe Mysql Backup $MYSQLDB Successfully!\033[0m"
else
echo -e "\033[32mThe Mysql Backup $MYSQLDB Failed,Please check.\033[0m"
fi
#以上的語句只是一個提示備份成功與否的信息if [ $? -eq 0 ]判斷以上的代碼是否執行有誤
在執行腳本前先用命令檢測腳本:sh -n auto_mysql_backup.sh
為了測試效果,我們先來查看一下備份目錄下是否有該文件,可以看到沒有出現20170405這樣的目錄

sh auto_mysql_backup.sh 執行腳本

可以看到提示說創建20170405的目錄成功并備份成,我們去目錄下看看呢?

以上可以看到備份zabbix數據庫成功。
備注:在以上的腳本中我們可以修改MYSQLDB為一個手動輸入的參數,這樣使得我們的腳本更智能
crontab -e
0 0 * * * /bin/bash /data/sh/auto_mysql_backup.sh >>/tmp/mysql_back.log
將該腳本寫入crontab中每天都去執行,在以后的文章中再寫一個增量備份的,更智能化。
在數據庫中授權MYDB數據庫給backup用戶 grant all on MYDB.* to backup@'localhost' identified by "123456";
對以上文檔稍作修改如下:
-------------------------auto_mysql_backup02.sh---------------------------------------
#!/bin/bash
#auto backup database
#from net video 2017
BAK_DIR=/data/backup/`date +%Y%m%d`
MYSQLDB=$1
MYSQLCMD=/usr/bin/mysqldump
if [ $UID -ne 0 ];then
echo "Must to be use root for exec shell."
exit
fi
#增加的代碼如下
if [ -z "$1" ];then
echo -e "\033[32mUsage:\nPlease Enter DataBase that you will backup \n-------------------------------\n\nUsage: { $0 mysql } \033[0m"
exit
fi
if [ ! -d $BAK_DIR ];then
mkdir -p $BAK_DIR
echo -e "\033[32mThe $BAK_DIR Creat Successfully!\033[0m"
else
echo "This $BAK_DIR is exists..."
fi
#Mysql BACKUP COMMAND
$MYSQLCMD --defaults-extra-file=/etc/my.cnf -d $MYSQLDB >$BAK_DIR/$MYSQLDB.sql
if [ $? -eq 0 ];then
echo -e "\033[32mThe Mysql Backup $MYSQLDB Successfully!\033[0m"
else
echo -e "\033[32mThe Mysql Backup $MYSQLDB Failed,Please check.\033[0m"
fi
---------------------------------------------------------------------------------------------------
sh auto_mysql_backup02.sh MYDB --這樣就可以備份指定的數據庫了,只要授權給了backup用戶,這里的授權用戶我們也可以做成輸入參數$2來處理。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。