一、新建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源创计划”,欢迎正在阅读的你也加入,一块儿分享。