一、新建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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。