shell學習之自動備份mysql數據庫


首先登錄mysql:mysql

mysql -u root -p 注意:不是系統root的密碼,mysql安裝好後默認root密碼爲空sql

>set password for 'root'@'localhost' = password('*****'); --修改root用戶的本地密碼shell

>grant all on zabbix.* to backup@'localhost' identified by "123456"; ---建立備份zabbix數據庫的用戶和密碼,受權了對zabbix數據庫的全部權限數據庫


退出數據庫,咱們編輯/etc/my.cnf,在[client]模塊下添加用戶名和密碼以下:bash

host=localhostide

user=backup測試

password='123456'spa


準備工做作好後來寫腳本:blog

------------------------mysql_backup.sh--------------------------------------crontab

#!/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這樣的目錄

wKioL1jkxQfDrh1yAAAhPDyYKdg902.png-wh_50

sh auto_mysql_backup.sh 執行腳本

wKiom1jkxeCxtfpoAAAdDl-JZ2o305.png-wh_50

能夠看到提示說建立20170405的目錄成功並備份成,咱們去目錄下看看呢?

wKiom1jkxlGCqhGpAAAeQBH7Dy8519.png-wh_50

以上能夠看到備份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來處理。

相關文章
相關標籤/搜索