一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - 分享一個自動編寫MySQL數據庫備份腳本

分享一個自動編寫MySQL數據庫備份腳本

2022-02-20 21:35波波說運維 Mysql

其實主要是為了偷懶,所以就搞了一個自動編寫MySQL數據庫備份腳本,每次寫備份腳本傳參就可以了,僅供參考。

其實主要是為了偷懶,所以就搞了一個自動編寫MySQL數據庫備份腳本,每次寫備份腳本傳參就可以了,僅供參考。

1. MySQL備份模板(上傳到下載平臺)

  1. #!/bin/bash
  2. #################################
  3. # copyright by hwb
  4. # DATE:2020-12-03
  5. # 用途:MYSQL備份模板
  6. #################################
  7.  
  8. #定義
  9. db_host=localhost
  10. db_port=3306
  11. db_name=mysql_prod
  12. db_user=root
  13. db_pwd=password
  14. backup_path="/data/backup"
  15.  
  16. # view,function,procedure,event,trigger
  17. output_type='view,function,procedure,event,trigger'
  18. today=`date +"%Y%m%d-%H%M%S"`
  19. data_file=$backup_path/$db_name$today.sql
  20. object_file="${backup_path}/obj_${db_name}$today.sql"
  21. log_file="/home/scripts/mysql_backup.log"
  22. mysql_cmd="mysql -u${db_user} -p${db_pwd} -h${db_host} -P${db_port} "
  23. mysqldump_cmd="mysqldump -u${db_user} -p${db_pwd} -h${db_host} -P${db_port} $db_name "
  24.  
  25.  
  26. #調用函數庫
  27. [ -f /etc/init.d/functions ] && source /etc/init.d/functions
  28. export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  29. source /etc/profile
  30.  
  31. #Require root to run this script.
  32. [ $(id -u) -gt 0 ] && echo "請用root用戶執行此腳本!" && exit 1
  33.  
  34.  
  35. [ -d $backup_path ] || mkdir -p $backup_path
  36.  
  37.  
  38. #[ ! -n "$5" ] && echo -e " Usage: $0 IP 端口 實例名 用戶名 '密碼' " && exit 1
  39.  
  40.  
  41. function mysql_backup()
  42. {
  43. echo ""
  44. echo -e "***********************************************mysql數據庫備份****************************************************"
  45.  
  46. echo -e "**************備份數據庫數據到$data_file**************"
  47. #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
  48. $mysqldump_cmd --single_transaction -R -E --flush-logs --master-data=2 --set-gtid-purged=OFF > $data_file
  49.  
  50. if [ $? -eq 0 ];then
  51. action "[$today]>>>完成數據庫${db_name}數據備份" /bin/true
  52. echo "[$today]>>>完成數據庫${db_name}數據備份" >> ${log_file}
  53. else
  54. action "[$today]>>>數據庫${db_name}備份失敗,請檢查相關配置!" /bin/false
  55. echo "[$today]>>>數據庫${db_name}備份失敗,請檢查相關配置!" >> ${log_file}
  56. exit 1
  57. fi
  58.  
  59.  
  60. echo -e "*******備份${db_name}函數、視圖等定義到$object_file***********"
  61. cat > $object_file<<EOF
  62. ouput object‘s definition for database "$db_name"
  63. ouput time: $(date "+%Y-%m-%d %H:%M:%S")
  64. ouput object type: $output_type
  65. EOF
  66. echo "">> $object_file
  67. echo "">> $object_file
  68.  
  69. # 視圖
  70. if [[ $output_type == *"view"* ]]
  71. then
  72. echo "-- ------------------------------------------------------------" >> $object_file
  73. echo "-- views" >> $object_file
  74. echo "-- ------------------------------------------------------------" >> $object_file
  75. #讓 MySQL不輸出列名 可以用-N 或者--skip-column-names參數
  76. $mysql_cmd --skip-column-names
  77. -e "select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views where table_schema='$db_name'" |
  78. sed 's/;/\G/g' | $mysql_cmd $db_name |
  79. sed 's/Create View: /kk_begin /g' | sed 's/[ ]*character_set_client:/; kk_end/g' |
  80. sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin|kk_end.*//g;p}' >> $object_file
  81. fi
  82.  
  83. # 函數
  84. if [[ $output_type == *"function"* ]]
  85. then
  86. echo "-- ------------------------------------------------------------" >> $object_file
  87. echo "-- function" >> $object_file
  88. echo "-- ------------------------------------------------------------" >> $object_file
  89. $mysql_cmd --skip-column-names
  90. -e "select concat('SHOW CREATE FUNCTION ',routine_schema,'.',routine_name,';') from information_schema.routines where routine_schema='$db_name' and ROUTINE_TYPE='FUNCTION'" |
  91. sed 's/;/\G/g' | $mysql_cmd $db_name |
  92. sed 's/Create Function: /kk_begin delimiter $$ /g' | sed 's/[ ]*character_set_client:/$$ delimiter ; kk_end/g' |
  93. sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin|kk_end.*//g;p}' >> $object_file
  94. fi
  95.  
  96. # 存儲過程
  97. if [[ $output_type == *"procedure"* ]]
  98. then
  99. echo "-- ------------------------------------------------------------" >> $object_file
  100. echo "-- procedure" >> $object_file
  101. echo "-- ------------------------------------------------------------" >> $object_file
  102. $mysql_cmd --skip-column-names
  103. -e "select concat('SHOW CREATE PROCEDURE ',routine_schema,'.',routine_name,';') from information_schema.routines where routine_schema='$db_name' and ROUTINE_TYPE='PROCEDURE'" |
  104. sed 's/;/\G/g' | $mysql_cmd $db_name |
  105. sed 's/Create Procedure: /kk_begin delimiter $$ /g' | sed 's/[ ]*character_set_client:/$$ delimiter ; kk_end/g' |
  106. sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin|kk_end.*//g;p}' >> $object_file
  107. fi
  108.  
  109. # 事件
  110. if [[ $output_type == *"event"* ]]
  111. then
  112. echo "-- ------------------------------------------------------------" >> $object_file
  113. echo "-- event" >> $object_file
  114. echo "-- ------------------------------------------------------------" >> $object_file
  115. $mysql_cmd --skip-column-names
  116. -e "select concat('SHOW CREATE EVENT ',EVENT_SCHEMA,'.',EVENT_NAME,';') from information_schema.events where EVENT_SCHEMA='$db_name'" |
  117. sed 's/;/\G/g' | $mysql_cmd |
  118. sed 's/Create Event: /kk_begin delimiter $$ /g' | sed 's/[ ]*character_set_client:/$$ delimiter ; kk_end/g' |
  119. sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin|kk_end.*//g;p}' >> $object_file
  120. fi
  121.  
  122. # 觸發器
  123. if [[ $output_type == *"trigger"* ]]
  124. then
  125. echo "-- ------------------------------------------------------------" >> $object_file
  126. echo "-- trigger" >> $object_file
  127. echo "-- ------------------------------------------------------------" >> $object_file
  128. $mysql_cmd --skip-column-names
  129. -e "select concat('SHOW CREATE TRIGGER ',TRIGGER_SCHEMA,'.',TRIGGER_NAME,';') from information_schema.triggers where TRIGGER_SCHEMA='$db_name';" |
  130. sed 's/;/\G/g' | $mysql_cmd $db_name|
  131. sed 's/SQL Original Statement: /kk_begin delimiter $$ /g' | sed 's/[ ]*character_set_client:/$$ delimiter ; kk_end/g' |
  132. sed -n '/kk_begin/{:a;N;/kk_end/!ba;s/.*kk_begin|kk_end.*//g;p}' >> $object_file
  133. fi
  134.  
  135. # ^M, you need to type CTRL-V and then CTRL-M
  136. sed -i "s/^M//g" $object_file
  137.  
  138. #清理過期備份
  139. find ${backup_path} -mtime +10 -type f -name '*.sql' -exec rm -f {} ;
  140.  
  141. if [ $? -eq 0 ];then
  142. action "[$today]>>>完成數據庫${db_name}過期備份清理" /bin/true
  143. echo "[$today]>>>完成數據庫${db_name}過期備份清理" >> ${log_file}
  144. else
  145. action "[$today]>>>數據庫${db_name}過期備份清理失敗,請檢查相關配置!" /bin/false
  146. echo "[$today]>>>數據庫${db_name}過期備份清理失敗,請檢查相關配置!" >> ${log_file}
  147. exit 1
  148. fi
  149.  
  150. echo -e "**********************************************完成${db_name}數據庫備份**********************************************"
  151. cat > /tmp/mysql_backup.log << EOF
  152. mysql地址:${db_host}
  153. mysql端口:${db_port}
  154. mysql實例名:${db_name}
  155. 數據備份文件:${data_file}
  156. 定義備份文件:${object_file}
  157. EOF
  158. cat /tmp/mysql_backup.log
  159. echo -e "e[1;31m 以上信息保存在/tmp/mysql_backup.log文件下 e[0m"
  160. echo -e "*******************************************************************************************************************"
  161. echo ""
  162. }
  163.  
  164.  
  165. mysql_backup

分享一個自動編寫MySQL數據庫備份腳本

2. 自動編寫MySQL數據庫備份腳本

  1. #!/bin/bash
  2. ###################################################################
  3. # copyright by hwb
  4. # DATE: 2020-12-04
  5. # 用途:自動編寫MySQL備份腳本
  6. ###################################################################
  7.  
  8. #腳本外變量
  9. mysql_path="/home/scripts"
  10. script_name="mysql_backup.sh"
  11. mysql_date=`date +"%Y-%m-%d-%H:%M:%S"`
  12. #腳本內變量
  13. db_host="localhost"
  14. db_port="53306"
  15. db_name="dbname"
  16. db_user="root"
  17. db_pwd="xxxx"
  18. backup_path="/data/backup"
  19. bk_backup_path=`echo $backup_path | sed 's:/:\/:g'`
  20. bk_db_pwd=`echo $db_pwd | sed 's:/:\/:g'`
  21.  
  22. #調用函數庫
  23. [ -f /etc/init.d/functions ] && source /etc/init.d/functions
  24. export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  25. source /etc/profile
  26.  
  27.  
  28. #root用戶執行腳本
  29. [ $(id -u) -gt 0 ] && echo "請用root用戶執行此腳本!" && exit 1
  30.  
  31.  
  32. #判斷目錄是否存在
  33. [ -d $mysql_path ] || mkdir -p $mysql_path
  34. [ -d $backup_path ] || echo "mysql數據庫備份目錄[$backup_path]不存在,請確認參數是否正確!"
  35. [ -d $backup_path ] || exit 1
  36.  
  37.  
  38. function bk_mysqlbackup(){
  39. echo ""
  40. echo -e "**************************自動配置mysql數據庫備份腳本[$mysql_path/$script_name]**************************"
  41. echo ""
  42. echo -e " Usage: $0 "
  43. echo ""
  44.  
  45. [ -f $mysql_path/$script_name ] && echo "${mysql_path}已存在腳本[${script_name}],請檢查相關配置!" && exit 1
  46.  
  47. wget https://app.fslgz.com/portal/api/public/fs/association/file/downLoad?uploadId=784001405093478400 -O /opt/mysql_backup_template.sh
  48. mv /opt/mysql_backup_template.sh $mysql_path/$script_name
  49.  
  50. #處理windows傳linux的腳本格式問題(注意空格位置不能多不能少)
  51. vi +':w ++ff=unix' +':q' ${mysql_path}/${script_name}
  52.  
  53. sed -i "s/localhost/${db_host}/g" $mysql_path/$script_name
  54. sed -i "s/3306/${db_port}/g" $mysql_path/$script_name
  55. sed -i "s/mysql_prod/${db_name}/g" $mysql_path/$script_name
  56. sed -i "s/root/${db_user}/g" $mysql_path/$script_name
  57. sed -i "s/password/${bk_db_pwd}/g" $mysql_path/$script_name
  58. sed -i "s#/data/backup#${bk_backup_path}#g" $mysql_path/$script_name
  59.  
  60. action "完成mysql備份腳本[$mysql_path/$script_name]編寫!" /bin/true
  61. chmod u+x $mysql_path/$script_name
  62.  
  63. #配置定時任務
  64. echo "30 11 * * * /bin/bash ${mysql_path}/${script_name} " >> /var/spool/cron/root
  65.  
  66. if [ $? -eq 0 ];then
  67. echo ""
  68. action "[$mysql_date]>>>完成數據庫備份定時任務配置" /bin/true
  69. else
  70. echo ""
  71. action "[$mysql_date]>>>定時任務配置失敗,請檢查相關配置!" /bin/false
  72. fi
  73.  
  74. echo ""
  75. echo "|------------------------------------定時任務內容------------------------------------|"
  76. crontab -l
  77. echo ""
  78. echo "|---------------mysql備份腳本[$mysql_path/$script_name]內容如下---------------|"
  79. cat $mysql_path/$script_name
  80. echo -e "************************************完成mysql數據庫備份腳本配置*****************************************"
  81. echo ""
  82. }
  83.  
  84.  
  85. bk_mysqlbackup

分享一個自動編寫MySQL數據庫備份腳本

3. 基于藍鯨平臺測試自動編寫備份腳本

測試成功..

分享一個自動編寫MySQL數據庫備份腳本

4. 測試備份的腳本是否有效

成功完成備份..

分享一個自動編寫MySQL數據庫備份腳本

原文地址:https://www.toutiao.com/i6902767275703845379/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产欧美一区二区三区免费看 | xxxxx性13一14 | 人妖巨茎video| bl文全肉高h湿被灌尿 | 午夜福利在线观看6080 | 免费日批| gay18高中生白袜xnxx动漫 | 日本视频二区 | 好奇害死猫在线观看 | 高清国产在线 | 国产精品探花一区在线观看 | 精品国产原创在线观看视频 | 欧美高清无砖专区欧美精品 | 国产精品高清视亚洲一区二区 | 欧美视频在线播放观看免费福利资源 | 丝瓜草莓香蕉绿巨人幸福宝 | 秋霞理论最新三级理论最 | 波多野结衣同性系列698 | 久久re6热在线视频 久久AV喷吹AV高潮欧美 | 暖暖 免费 高清 中文 日本 | 国产a毛片在线 | 啊啊啊好大好爽视频 | 国产日韩一区二区 | 国产免费看片 | 午夜欧美精品久久久久久久久 | 青青青久在线视频免费观看 | 亚洲国产成人99精品激情在线 | 午夜香蕉成视频人网站高清版 | free性丰满hd性欧美厨房 | 国产激情一区二区三区成人91 | 女教师雪白老汉 | 午夜伦伦电影理论片费看 | 国产欧美一区二区精品久久久 | 韩国一级淫片特黄特刺激 | 欧美国产日韩综合 | 黑帮大佬与我的365天2标清中文 | 波多野结衣在线中文字幕 | 99热这里只精品99re66 | 俺去俺来也www色官网免费的 | 成人在线观看一区 | 色聚网久久综合 |