千家信息网

MySQL数据库备份Shell脚本

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,此脚本将远程主机或者本地主机上的数据库的数据备份到本地。备份MySQL数据库除了information_schema、performance_schema、mysql自带库的其他生产库。备份时将MyS
千家信息网最后更新 2025年02月02日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安全错误 数据库的锁怎样保障安全 互联网科技公司的会计科目 长沙现代化安全文化展厅软件开发 青岛金山云网络技术公司电话 浦东新区库存网络技术成本价 软件开发本科毕业的工资多少 apk软件开发定制 iis 远程连接数据库失败 软件开发流程和团队 高并发实时刷数据库 关于网络安全的目的 学软件开发难度大吗 江苏拓鑫网络技术有限公司招聘 服务器设置和管理 人大基础教育数据库什么业务 互联网科技吴晓波 山西的网络安全公司 网络安全渗透用什么软件合适 湖南ntp时钟服务器云主机 万方数据库收录图书期刊学位标准 302在网络安全中什么意思 预约停车软件开发 文本怎么存储在数据库 新一线城市互联网科技 管理网站服务器的系统 软件开发即征即退和零税率 事业单位网络技术工程考什么 网络安全最好的培训机构 购物网站要买一个什么样的服务器 计算机网络技术省考判断题 环保类软件开发企业
0