MySQL数据库备份Shell脚本
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,此脚本将远程主机或者本地主机上的数据库的数据备份到本地。备份MySQL数据库除了information_schema、performance_schema、mysql自带库的其他生产库。备份时将MyS
千家信息网最后更新 2025年11月10日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安全错误
数据库的锁怎样保障安全
读写上亿的数据库设计
华数广电网络技术员笔试指南
戴尔服务器更新不了密码
硬件开发比软件开发
网络安全扫描工具的功能
量化数据库技术
天津恒锋互联网科技有限公司
软件开发的设计思路怎么写
寻宝服务器
证券客户端软件开发
实体类如何映射到数据库表
服务器网站日志
软件开发软件公司有哪些
联想集团软件开发
江西网络时钟服务器云主机
创建平安校园网络安全工作
为什么要建设生命数据库
网络安全济南公司
高校网络安全演练怎么做
惠普服务器收集日志
网络安全例文
数据库用户名是什么 sa
mysql数据库计数器失效
网络技术有限公
网络安全警务室授牌仪式致辞
dns智能解析服务器
服务器存储控制器维修
国家教学基本状态数据库
c 数据库连接超时
商洛软件开发行业标准