分享一个自动编写MySQL数据库备份脚本,值得收藏

数据库 MySQL
其实主要是为了偷懒,所以就搞了一个自动编写MySQL数据库备份脚本,每次写备份脚本传参就可以了,仅供参考。

其实主要是为了偷懒,所以就搞了一个自动编写MySQL数据库备份脚本,每次写备份脚本传参就可以了,仅供参考。

1. MySQL备份模板(上传到下载平台)

#!/bin/bash 
################################# 
# copyright by hwb 
# DATE:2020-12-03 
# 用途:MYSQL备份模板 
################################# 
 
#定义 
db_host=localhost 
db_port=3306 
db_name=mysql_prod  
db_user=root 
db_pwd=password 
backup_path="/data/backup" 
 
# view,function,procedure,event,trigger 
output_type='view,function,procedure,event,trigger'  
today=`date +"%Y%m%d-%H%M%S"` 
data_file=$backup_path/$db_name$today.sql 
object_file="${backup_path}/obj_${db_name}$today.sql" 
log_file="/home/scripts/mysql_backup.log" 
mysql_cmd="mysql -u${db_user} -p${db_pwd} -h${db_host} -P${db_port} " 
mysqldump_cmd="mysqldump -u${db_user} -p${db_pwd} -h${db_host} -P${db_port} $db_name " 
 
 
#调用函数库 
[ -f /etc/init.d/functions ] && source /etc/init.d/functions 
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
source /etc/profile 
 
#Require root to run this script. 
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1 
 
 
[ -d $backup_path ] || mkdir -p $backup_path 
 
 
#[ ! -n "$5" ] && echo -e "\033[31m Usage: $0 IP 端口 实例名 用户名 '密码'  \033[0m" && exit 1 
 
 
function mysql_backup()  

  echo "" 
  echo -e "\033[33m***********************************************mysql数据库备份****************************************************\033[0m"  
   
  echo -e "\033[36m**************备份数据库数据到$data_file**************\033[0m" 
  #A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don't want to restore GTIDs, pass --set-gtid-purged=OFF. To make a complete dump, pass --all-databases --triggers --routines --events 
  $mysqldump_cmd --single_transaction -R -E --flush-logs --master-data=2 --set-gtid-purged=OFF > $data_file 
   
  if [ $? -eq 0 ];then 
    action "[$today]>>>完成数据库${db_name}数据备份" /bin/true 
    echo "[$today]>>>完成数据库${db_name}数据备份" >> ${log_file} 
  else  
    action "[$today]>>>数据库${db_name}备份失败,请检查相关配置!" /bin/false 
    echo "[$today]>>>数据库${db_name}备份失败,请检查相关配置!" >> ${log_file} 
    exit 1 
  fi 
   
   
  echo -e "\033[36m*******备份${db_name}函数、视图等定义到$object_file***********\033[0m" 
  cat > $object_file<<EOF 
ouput object‘s definition for database "$db_name" 
ouput time: $(date "+%Y-%m-%d %H:%M:%S") 
ouput object type: $output_type 
EOF 
  echo "">> $object_file 
  echo "">> $object_file 
  
  # 视图 
  if [[ $output_type == *"view"* ]] 
  then 
    echo "-- ------------------------------------------------------------" >> $object_file 
    echo "-- views" >> $object_file 
    echo "-- ------------------------------------------------------------" >> $object_file 
    #让 MySQL不输出列名 可以用-N 或者--skip-column-names参数 
    $mysql_cmd  --skip-column-names \ 
    -e "select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views where table_schema='$db_name'" |\ 
    sed 's/;/\\G/g' | $mysql_cmd $db_name |\ 
    sed 's/Create View: /kk_begin\n/g' | sed 's/[ ]*character_set_client:/;\nkk_end/g' |\ 
    sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}'  >> $object_file 
  fi 
  
  # 函数 
  if [[ $output_type == *"function"* ]] 
  then 
    echo "-- ------------------------------------------------------------" >> $object_file 
    echo "-- function" >> $object_file 
    echo "-- ------------------------------------------------------------" >> $object_file 
    $mysql_cmd --skip-column-names \ 
    -e "select concat('SHOW CREATE FUNCTION ',routine_schema,'.',routine_name,';') from information_schema.routines where routine_schema='$db_name' and ROUTINE_TYPE='FUNCTION'" |\ 
    sed 's/;/\\G/g' | $mysql_cmd $db_name |\ 
    sed 's/Create Function: /kk_begin\ndelimiter $$\n/g' | sed 's/[ ]*character_set_client:/$$ \ndelimiter ;\nkk_end/g' |\ 
    sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 
  fi 
  
  # 存储过程 
  if [[ $output_type == *"procedure"* ]] 
  then 
    echo "-- ------------------------------------------------------------" >> $object_file 
    echo "-- procedure" >> $object_file 
    echo "-- ------------------------------------------------------------" >> $object_file 
    $mysql_cmd --skip-column-names \ 
    -e "select concat('SHOW CREATE PROCEDURE ',routine_schema,'.',routine_name,';') from information_schema.routines where routine_schema='$db_name' and ROUTINE_TYPE='PROCEDURE'" |\ 
    sed 's/;/\\G/g' | $mysql_cmd  $db_name |\ 
    sed 's/Create Procedure: /kk_begin\ndelimiter $$\n/g' | sed 's/[ ]*character_set_client:/$$ \ndelimiter ;\nkk_end/g' |\ 
    sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 
  fi 
  
  # 事件 
  if [[ $output_type == *"event"* ]] 
  then 
    echo "-- ------------------------------------------------------------" >> $object_file 
    echo "-- event" >> $object_file 
    echo "-- ------------------------------------------------------------" >> $object_file 
    $mysql_cmd --skip-column-names \ 
    -e "select concat('SHOW CREATE EVENT ',EVENT_SCHEMA,'.',EVENT_NAME,';') from information_schema.events where EVENT_SCHEMA='$db_name'" |\ 
    sed 's/;/\\G/g' | $mysql_cmd |\ 
    sed 's/Create Event: /kk_begin\ndelimiter $$\n/g' | sed 's/[ ]*character_set_client:/$$ \ndelimiter ;\nkk_end/g' |\ 
    sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 
  fi 
  
  # 触发器 
  if [[ $output_type == *"trigger"* ]] 
  then 
    echo "-- ------------------------------------------------------------" >> $object_file 
    echo "-- trigger" >> $object_file 
    echo "-- ------------------------------------------------------------" >> $object_file 
    $mysql_cmd --skip-column-names \ 
    -e "select concat('SHOW CREATE TRIGGER ',TRIGGER_SCHEMA,'.',TRIGGER_NAME,';') from information_schema.triggers where TRIGGER_SCHEMA='$db_name';" |\ 
    sed 's/;/\\G/g' | $mysql_cmd $db_name|\ 
    sed 's/SQL Original Statement: /kk_begin\ndelimiter $$\n/g' | sed 's/[ ]*character_set_client:/$$ \ndelimiter ;\nkk_end/g' |\ 
    sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin\|kk_end.*//g;p}' >> $object_file 
  fi 
  
  # ^M, you need to type CTRL-V and then CTRL-M 
  sed -i "s/\^M//g" $object_file 
 
  #清理过期备份 
  find ${backup_path}  -mtime +10  -type f -name '*.sql' -exec rm -f {} \; 
   
  if [ $? -eq 0 ];then 
    action "[$today]>>>完成数据库${db_name}过期备份清理" /bin/true 
    echo "[$today]>>>完成数据库${db_name}过期备份清理" >> ${log_file} 
  else  
    action "[$today]>>>数据库${db_name}过期备份清理失败,请检查相关配置!" /bin/false 
    echo "[$today]>>>数据库${db_name}过期备份清理失败,请检查相关配置!" >> ${log_file} 
    exit 1 
  fi 
   
  echo -e "\033[33m**********************************************完成${db_name}数据库备份**********************************************\033[0m" 
cat > /tmp/mysql_backup.log  << EOF 
mysql地址:${db_host} 
mysql端口:${db_port} 
mysql实例名:${db_name} 
数据备份文件:${data_file} 
定义备份文件:${object_file} 
EOF 
  cat /tmp/mysql_backup.log 
  echo -e "\e[1;31m 以上信息保存在/tmp/mysql_backup.log文件下 \e[0m" 
  echo -e "\033[33m*******************************************************************************************************************\033[0m" 
  echo "" 

 
 
mysql_backup 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.

 分享一个自动编写MySQL数据库备份脚本,值得收藏

2. 自动编写MySQL数据库备份脚本

#!/bin/bash 
################################################################### 
# copyright by hwb 
# DATE: 2020-12-04 
# 用途:自动编写MySQL备份脚本 
################################################################### 
 
#脚本外变量 
mysql_path="/home/scripts" 
script_name="mysql_backup.sh" 
mysql_date=`date +"%Y-%m-%d-%H:%M:%S"` 
#脚本内变量 
db_host="localhost" 
db_port="53306" 
db_name="dbname"  
db_user="root" 
db_pwd="xxxx" 
backup_path="/data/backup" 
bk_backup_path=`echo $backup_path | sed 's:\/:\\\/:g'` 
bk_db_pwd=`echo $db_pwd | sed 's:\/:\\\/:g'` 
 
#调用函数库 
[ -f /etc/init.d/functions ] && source /etc/init.d/functions 
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 
source /etc/profile 
 
 
#root用户执行脚本 
[ $(id -u) -gt 0 ] && echo "请用root用户执行此脚本!" && exit 1 
 
 
#判断目录是否存在 
[ -d $mysql_path ] || mkdir -p $mysql_path 
[ -d $backup_path ] || echo "mysql数据库备份目录[$backup_path]不存在,请确认参数是否正确!" 
[ -d $backup_path ] || exit 1 
 
 
function bk_mysqlbackup(){ 
  echo "" 
  echo -e "\033[33m**************************自动配置mysql数据库备份脚本[$mysql_path/$script_name]**************************\033[0m" 
  echo "" 
  echo -e "\033[36m Usage: $0   \033[0m" 
  echo "" 
   
  [ -f $mysql_path/$script_name ] && echo "${mysql_path}已存在脚本[${script_name}],请检查相关配置!" && exit 1 
 
  wget https://app.fslgz.com/portal/api/public/fs/association/file/downLoad?uploadId=784001405093478400 -O /opt/mysql_backup_template.sh 
  mv /opt/mysql_backup_template.sh  $mysql_path/$script_name 
   
  #处理windows传linux的脚本格式问题(注意空格位置不能多不能少) 
  vi +':w ++ff=unix' +':q' ${mysql_path}/${script_name} 
   
  sed  -i "s/localhost/${db_host}/g" $mysql_path/$script_name 
  sed  -i "s/3306/${db_port}/g" $mysql_path/$script_name 
  sed  -i "s/mysql_prod/${db_name}/g" $mysql_path/$script_name 
  sed  -i "s/root/${db_user}/g" $mysql_path/$script_name 
  sed  -i "s/password/${bk_db_pwd}/g" $mysql_path/$script_name 
  sed  -i "s#\/data\/backup#${bk_backup_path}#g" $mysql_path/$script_name 
 
  action "完成mysql备份脚本[$mysql_path/$script_name]编写!" /bin/true 
  chmod u+x $mysql_path/$script_name 
   
  #配置定时任务 
  echo "30 11 * * * /bin/bash  ${mysql_path}/${script_name} " >> /var/spool/cron/root 
   
  if [ $? -eq 0 ];then 
    echo "" 
    action "[$mysql_date]>>>完成数据库备份定时任务配置" /bin/true 
  else  
    echo "" 
    action "[$mysql_date]>>>定时任务配置失败,请检查相关配置!" /bin/false 
  fi 
   
  echo "" 
  echo  "|------------------------------------定时任务内容------------------------------------|"  
  crontab -l 
  echo "" 
  echo  "|---------------mysql备份脚本[$mysql_path/$script_name]内容如下---------------|"  
  cat  $mysql_path/$script_name 
  echo -e "\033[33m************************************完成mysql数据库备份脚本配置*****************************************\033[0m" 
  echo "" 

 
 
bk_mysqlbackup 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.

分享一个自动编写MySQL数据库备份脚本,值得收藏

3. 基于蓝鲸平台测试自动编写备份脚本

测试成功..

分享一个自动编写MySQL数据库备份脚本,值得收藏

4. 测试备份的脚本是否有效

成功完成备份..

分享一个自动编写MySQL数据库备份脚本,值得收藏

 

 

责任编辑:赵宁宁 来源: 今日头条
相关推荐

2019-08-12 08:47:14

脚本语言数据库MySQL

2019-07-17 07:07:54

MySQL数据库索引

2019-10-12 00:39:23

MySQL数据库Oracle

2019-12-02 08:58:09

SQL脚本语言MySQL

2019-07-31 08:03:45

Oracle数据库巡检脚本

2019-12-10 08:06:16

数据库1NF数据库范式

2011-03-30 13:57:41

MySQL数据库自动备份

2019-10-31 08:22:39

shell脚本Linux

2019-08-13 11:53:01

脚本语言AWKBash

2011-05-16 09:32:33

mysql数据库备份

2018-12-12 19:10:01

Oracle数据库自动备份

2021-01-08 16:27:52

SQL数据库开发

2010-05-20 15:22:37

2014-07-08 09:27:24

SQLSERVER脚本

2013-05-24 13:24:46

Mysql数据库自动备份

2010-03-02 16:33:14

linux数据备份

2019-09-10 07:58:01

字符集MySQL数据库

2018-06-07 09:22:16

LinuxMysql备份

2021-09-22 09:55:20

LinuxMySQL数据库

2011-08-24 15:16:37

Oracle数据库自动备份
点赞
收藏

51CTO技术栈公众号