CentOS 7 MySQL自動備份shell腳本 (附帶 --master-data, -e的做用)

一、新建shell腳本

vim /shell_jiaoben/mysqlBackup.sh
#!/bin/bash

# 如下配置信息請本身修改
mysql_user="root" #MySQL備份用戶
mysql_password="123456" #MySQL備份用戶的密碼
mysql_host="192.168.163.12"
mysql_port="3306"
mysql_charset="utf8" #MySQL編碼
backup_db_arr=("test") #要備份的數據庫名稱,多個用空格分開隔開 如("db1" "db2" "db3")
backup_location=/opt/data/mysql  #備份數據存放位置,末尾請不要帶"/",此項能夠保持默認,程序會自動建立文件夾
expire_backup_delete="ON" #是否開啓過時備份刪除 ON爲開啓 OFF爲關閉
expire_days=3 #過時時間天數 默認爲三天,此項只有在expire_backup_delete開啓時有效

# 本行開始如下不須要修改
backup_time=`date +%Y%m%d%H%M`  #定義備份詳細時間
backup_Ymd=`date +%Y-%m-%d` #定義備份目錄中的年月日時間
backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天以前的日期
backup_dir=$backup_location/$backup_Ymd  #備份文件夾全路徑
welcome_msg="Welcome to use MySQL backup tools!" #歡迎語

# 判斷MYSQL是否啓動,mysql沒有啓動則備份退出
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 1] -o [$mysql_listen == 0] ]; then
        echo "ERROR:MySQL is not running! backup stop!"
        exit
else
        echo $welcome_msg
fi

# 鏈接到mysql數據庫,沒法鏈接則備份退出
/opt/mysql/bin/mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end

flag=`echo $?`
if [ $flag != "0" ]; then
        echo "ERROR:Can't connect mysql server! backup stop!"
        exit
else
        echo "MySQL connect ok! Please wait......"
        # 判斷有沒有定義備份的數據庫,若是定義則開始備份,不然退出備份
        if [ "$backup_db_arr" != "" ];then
                #dbnames=$(cut -d ',' -f1-5 $backup_database)
                #echo "arr is (${backup_db_arr[@]})"
                for dbname in ${backup_db_arr[@]}
                do
                        echo "database $dbname backup start..."
                        `mkdir -p $backup_dir`
                        `/opt/mysql/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset --master-data=1 | gzip > $backup_dir/$dbname-$backup_time.sql.gz`
                        flag=`echo $?`
                        if [ $flag == "0" ];then
                                echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
                        else
                                echo "database $dbname backup fail!"
                        fi

                done
        else
                echo "ERROR:No database to backup! backup stop"
                exit
        fi
        # 若是開啓了刪除過時備份,則進行刪除操做
        if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
                 #`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
                 `find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
                 echo "Expired backup data delete complete!"
        fi
        echo "All database backup success! Thank you!"
        exit
fi

 二、修改shell腳本屬性,賦予執行權限

chmod 600 /shell_jiaoben/mysqlBackup.sh
chmod +x /shell_jiaoben/mysqlBackup.sh

三、定時執行腳本 

#######2019-04-11 數據庫備份#############
5 0 * * * /shell_jiaoben/mysqlBackup.sh

四、MySQL恢復

mysql -uroot -p databse < backup.sql

在腳本中加了參數mysqldump --master-data=2 --single-transaction mysql

 

mysql數據庫中-e是什麼意思?-e參數使用詳解

能夠用shell腳本操做mysql數據庫,使用mysql的-e參數能夠執行各類sql的(建立,刪除,增,刪,改、查)等各類操做 。linux

用法sql

mysql -hhostname -Pport -uusername -ppassword -e 相關mysql的sql語句,不用在mysql的提示符下運行mysql,便可以在shell中操做mysql的方法。shell

 

#!/bin/bash
 
HOSTNAME="192.168.111.84"                                           #數據庫信息
PORT="3306"
USERNAME="root"
PASSWORD=""
 
DBNAME="test_db_test"                                                       #數據庫名稱
TABLENAME="test_table_test"                                            #數據庫中表的名稱
 
  
 
#建立數據庫
create_db_sql="create database IF NOT EXISTS ${DBNAME}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e"${create_db_sql}"
 
  
 
#建立表
create_table_sql="create table IF NOT EXISTS ${TABLENAME} (  name varchar(20), id int(11) default 0 )"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${create_table_sql}"
 
  
 
#插入數據
insert_sql="insert into ${TABLENAME} values('billchen',2)"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${insert_sql}"
 
  
 
#查詢
select_sql="select * from ${TABLENAME}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${select_sql}"
 
  
 
#更新數據
update_sql="update ${TABLENAME} set id=3"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${update_sql}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${select_sql}"
 
  
 
#刪除數據
delete_sql="delete from ${TABLENAME}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${delete_sql}"
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} ${DBNAME} -e"${select_sql}"

mysql -e中 v的做用數據庫

用 mysql -e 生成結果導入指定文件時:vim

● 若要同時顯示語句自己:-vbash

● 若要增長查詢結果行數:-vvoracle

● 若要增長執行時間:-vvv測試

在一些監控腳本中能夠用來簡化代碼編碼

㈠ 不帶 v 測試:  
   
[mysql@even ~]$ mysql -uroot -poracle -e "SELECT VERSION();SELECT NOW()" > /home/mysql/test.sql  
[mysql@even ~]$ cat /home/mysql/test.sql  
VERSION()  
5.5.16-log  
NOW()  
2013-05-08 18:06:35 
   
   
㈡ 帶一個 v 測試:  
   
[mysql@even ~]$ mysql -uroot -poracle -e  "SELECT VERSION();SELECT NOW()" -v  > /home/mysql/test02.sql  
[mysql@even ~]$ cat /home/mysql/test02.sql  
--------------  
SELECT VERSION()  
--------------  
   
VERSION()  
5.5.16-log  
--------------  
SELECT NOW()  
--------------  
   
NOW()  
2013-05-08 18:08:40 
   
   
㈢ 帶兩個 v 測試:  
   
[mysql@even ~]$ mysql -uroot -poracle -e  "SELECT VERSION();SELECT NOW()" -vv  > /home/mysql/test03.sql  
[mysql@even ~]$ cat /home/mysql/test03.sql  
--------------  
SELECT VERSION()  
--------------  
   
VERSION()  
5.5.16-log  
1 row in set  
   
--------------  
SELECT NOW()  
--------------  
   
NOW()  
2013-05-08 18:14:05 
1 row in set  
   
Bye  
   
   
㈢ 帶三個 v 測試:  
   
   
[mysql@even ~]$ mysql -uroot -poracle -e  "SELECT VERSION();SELECT NOW()" -vvv  > /home/mysql/test04.sql  
[mysql@even ~]$ cat /home/mysql/test04.sql  
--------------  
SELECT VERSION()  
--------------  
   
+------------+  
| VERSION()  |  
+------------+  
| 5.5.16-log |  
+------------+  
1 row in set (0.00 sec)  
   
--------------  
SELECT NOW()  
--------------  
   
+---------------------+  
| NOW()               |  
+---------------------+  
| 2013-05-08 18:14:49 |  
+---------------------+  
1 row in set (0.00 sec)  
   
Bye

 

本文分享 CSDN - 阿……莫西林。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索