MySQL数据库备份Shell脚本
发表于:2024-12-05 作者:千家信息网编辑
千家信息网最后更新 2024年12月05日,此脚本将远程主机或者本地主机上的数据库的数据备份到本地。备份MySQL数据库除了information_schema、performance_schema、mysql自带库的其他生产库。备份时将MyS
千家信息网最后更新 2024年12月05日MySQL数据库备份Shell脚本
此脚本将远程主机或者本地主机上的数据库的数据备份到本地。
备份MySQL数据库除了information_schema、performance_schema、mysql自带库的其他生产库。
备份时将MySQL数据库中的每一个库都进行备份(穷举),生成一个包含数据结构和数据的备份文件和一个仅包含数据结构的备份文件。
通常此脚本将结合crontab一起使用,crontab的使用方法已经在脚本中列出。
允许用户修改的变量如下:
mysql_host=127.0.0.1 # 主机地址mysql_port=3306 # 主机端口号mysql_username=dev # 备份时使用的用户名mysql_password=dev # 备份时使用的用户名的密码mysql_basedir=/usr/local/mysql # mysqlbase目录,如果是自定义安装的mysql,则修改此处,使用软件包安装的mysql则无需修改此处save_old_backups_for_days=5 # 保存备份文件的天数mysql_backup_dir=/data/backup/db/mysql # mysql备份路径
脚本内容如下:
#!/usr/bin/env bash# Function description:# Backup MySQL databases for each, backup schema and schema with data in one action.# Usage:# bash BackupMysqlByDate.sh# Birth Time:# 2016-06-24 17:44:43.895515929 +0800# Author:# Open Source Software written by 'Guodong Ding'# Blog: http://dgd2010.blog.51cto.com/# Github: https://github.com/DingGuodong# Others:# crontabs -- configuration and scripts for running periodical jobs# SHELL=/bin/bash# PATH=/sbin:/bin:/usr/sbin:/usr/bin# MAILTO=root# HOME=/# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed# m h dom mon dow command# execute on 11:59 per sunday# 59 11 * * */0 /path/to/BackupMysqlByDate.sh >/tmp/log_backup_mysql_$(date +"\%Y\%m\%d\%H\%M\%S").log# or# execute on 23:59 per day# 59 23 * * * /path/to/BackupMysqlByDate.sh >/tmp/log_backup_mysql_$(date +"\%Y\%m\%d\%H\%M\%S").logUSER="`id -un`"LOGNAME="$USER"if [ $UID -ne 0 ]; then echo "WARNING: Running as a non-root user, \"$LOGNAME\". Functionality may be unavailable. Only root can use some commands or options"fiold_PATH=$PATHdeclare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"mysql_host=127.0.0.1mysql_port=3306mysql_username=devmysql_password=devmysql_basedir=/usr/local/mysqlsave_old_backups_for_days=5mysql_bin_mysql=${mysql_basedir}/bin/mysqlmysql_bin_dump=${mysql_basedir}/bin/mysqldumpmysql_backup_dir=/data/backup/db/mysqldate_format_type_dir=$(date +%Y-%m-%d)date_format_type_file=$(date +%Y%m%d%H%M%S)echo "--------------------------------"echo "=> do backup scheduler start at $(date +%Y%m%d%H%M%S)"# TODO, check user privileges# check user if have 'RELOAD,EVENT' privileges,etc# backup role# GRANT ALTER,ALTER ROUTINE,CREATE,CREATE ROUTINE,CREATE TEMPORARY TABLES,CREATE VIEW,DELETE,DROP,EXECUTE,INDEX,INSERT,LOCK TABLES,SELECT,UPDATE,SHOW VIEW,RELOAD,EVENT ON *.* TO 'dev'@"%";# FLUSH PRIVILEGES;[ -d ${mysql_basedir} ] && mysql_datadir=${mysql_basedir}/data || mysql_datadir=/var/lib/mysql[ -x ${mysql_bin_mysql} ] || mysql_bin_mysql=mysql[ -x ${mysql_bin_dump} ] || mysql_bin_dump=mysqldump[ -d ${mysql_backup_dir}/${date_format_type_dir} ] || mkdir -p ${mysql_backup_dir}/${date_format_type_dir}mysql_databases_list=""if [ -d ${mysql_datadir} ]; then mysql_databases_list=`ls -p ${mysql_datadir} | grep / |tr -d /`else mysql_databases_list=$(${mysql_bin_mysql} -h${mysql_host} -P${mysql_port} -u${mysql_username} -p${mysql_password}\ -e "show databases;" |& grep -Eiv '(^database$|information_schema|performance_schema|^mysql$)')fisaved_IFS=$IFSIFS=' '$'\t'$'\n'for mysql_database in ${mysql_databases_list};do ${mysql_bin_dump} --host=${mysql_host} --port=${mysql_port} --user=${mysql_username} --password=${mysql_password}\ --routines --events --triggers --single-transaction --flush-logs \ --ignore-table=mysql.event --databases ${mysql_database} |& \ gzip > ${mysql_backup_dir}/${date_format_type_dir}/${mysql_database}-backup-${date_format_type_file}.sql.gz [ $? -eq 0 ] && echo "${mysql_database} backup successfully! " || \ echo "${mysql_database} backup failed! " /bin/sleep 2 ${mysql_bin_dump} --host=${mysql_host} --port=${mysql_port} --user=${mysql_username} --password=${mysql_password}\ --routines --events --triggers --single-transaction --flush-logs \ --ignore-table=mysql.event --databases ${mysql_database} --no-data |& \ gzip > ${mysql_backup_dir}/${date_format_type_dir}/${mysql_database}-backup-${date_format_type_file}_schema.sql.gz [ $? -eq 0 ] && echo "${mysql_database} schema backup successfully! " || \ echo "${mysql_database} schema backup failed! " /bin/sleep 2doneIFS=${saved_IFS}save_days=${save_old_backups_for_days:-10}need_clean=$(find ${mysql_backup_dir} -mtime +${save_days} -exec ls '{}' \;) if [ ! -z ${need_clean} ]; then find ${mysql_backup_dir} -mtime +${save_days} -exec rm -rf '{}' \; echo "$need_clean have been cleaned! " else echo "nothing can be cleaned, skipped! " fiecho "=> do backup scheduler finished at $(date +%Y%m%d%H%M%S)"echo -e "\n\n\n"declare -x PATH=${old_PATH}
tag:mysqldump,备份MySQL数据库,MySQL数据库备份,mysql备份,mysql备份脚本
--end--
备份
数据
数据库
脚本
主机
文件
用户
数据结构
用户名
结构
使用方法
内容
变量
口号
地址
天数
密码
数据备份
方法
目录
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
巴中应用软件开发费用预算
湖南正博网络技术
我的世界吃鸡服务器如何进入
数据库应用管理的好处
员工管理数据库表设计
要保证数据库的数据独立性
服务器内存条插上去不识别
msde数据库win7
ftp怎么传到linux服务器
网络安全事件有什么危害
win10安装db2数据库
信息化软件开发价格信息
生化危机6如何连接服务器
oracle配置数据库连接文件
香港李凯软件开发
山西开源软件开发择优推荐
互联网软件开发怎么赚钱
rock linkin数据库
广东会计软件开发计划
服务器配置评估模板
spark服务器注册udf
网警不履行网络安全义务
互联网与智能科技
网络安全购物普法方案
互联网平安科技集团怎么样
dw cc 数据库插件
wap 服务器
cs软件开发是做什么的
什么是服务器主板的外部接口
php连接mdb数据库