MySQL生产环境数据库备份标准脚本 原创 Linux平台 2023年5月4日 10:36 夏至未至 1602 当前内容 9257 字,在路上,马上到,马上到 ### 目录 [TOC] ### 脚本特点 #### 优点 1. 脚本逻辑清晰易懂 2. 配置简单,快速部署 3. 支持配置定时备份(天、周、月,小时、分级别配置定时) 4. 备份信息连续记录到日志,方便查阅 5. 支持删除多少天以前备份副本,减少磁盘空间浪费 #### 缺点 1. 使用 mysqldump 备份,需要配置环境变量(如果mysqldump需要用绝对路径的情况,就需要配置环境变量),如需配置环境变量,[可参考这里](https://www.codecomeon.com/posts/37/ "可参考这里")。 ### 使用步骤 #### 创建系统级备份用户 如果是生产机,建议创建一个系统用户,专门用户备份,也为安全考虑,这里以 backup 用户为例: [root@localhost /]# adduser backup [root@localhost /]# [root@localhost /]# ll /home total 0 drwx------. 3 backup backup 78 Mar 1 23:21 backup [root@localhost /]# #### 创建脚本工作目录 创建脚本工作目录,并给 backup 属主和属组: [root@localhost /]# mkdir mysqlbackup [root@localhost /]# [root@localhost /]# chown backup:backup mysqlbackup/ [root@localhost /]# [root@localhost /]# ll total 72 ... drwxr-xr-x. 2 backup backup 6 Mar 1 23:29 mysqlbackup ... [root@localhost /]# #### 备份环境检查 由于是使用 mysqldump 备份,需要在系统备份用户下检查 mysqldump 是否可用: [root@localhost /]# su - backup Last login: Mon Mar 1 23:27:47 PST 2022 on pts/0 [backup@localhost ~]$ [backup@localhost ~]$ cd /mysqlbackup/ [backup@localhost mysqlbackup]$ ll total 0 [backup@localhost mysqlbackup]$ mysqldump --version mysqldump Ver 10.13 Distrib 5.7.37, for Linux (x86_64) [backup@localhost mysqlbackup]$ 如上,即 mysqldump 已经配置环境变量,如果报错,如找不到此工具,[需要配环境变量](https://www.codecomeon.com/posts/37/ "需要配环境变量")。 #### 创建备份脚本 在系统备份用户下创建备份脚本,名为:mysql_full_backup.sh,复制文末脚本内容,插入脚本: [backup@localhost mysqlbackup]$ touch mysql_full_backup.sh [backup@localhost mysqlbackup]$ [backup@localhost mysqlbackup]$ ll total 0 -rw-rw-r--. 1 backup backup 2240 Mar 1 23:37 mysql_full_backup.sh [backup@localhost mysqlbackup]$ 如果因为拷贝导致编码格式错乱,脚本运行报错,试试以下命令,改变文件编码: :set ff=unix > 需要在 vi 或 vim 在 查看模式下输入需要在 vi 或 vim 在 查看模式下输入。 #### 备份脚本配置 #========================================================# #------------------1. 连接数据库参数配置-----------------# # 备份数据库实例用户 DB_USER_NAME=root # 数据库实例密码 DB_PASSWORD=123456 # 数据库实例端口号 DB_PORT=3306 # 据库实例IP DB_HOST=localhost #-------------------2. 造数据参数配置---------------------# # 备份文件存放路径(默认为当前路径) BACKUP_DATA_PATH=$CURRENT_PATH # 备份日志存放路径(默认为当前路径) BACKUP_LOG_PATH=$CURRENT_PATH # 保留副本多少天以内的(即删除多少天以前的副本:默认删除30天前) KEEP_DATA_TIME=30 #------------------自定义配置结束,其他勿动---------------# #=========================================================# 其中需要配置的分为两类: 1. 连接数据库参数配置:连接数据的参数,根即账号、密码、端口号、IP 2. 造数据参数配置:备份数据存放路径(默认就当前目录)、备份过程信息存放路径(默认当前目录)、备份副本保留天数(默认保留30天的,30天以前的删除) ### 执行效果 #### 单次备份效果 [backup@localhost mysqlbackup]$ ll total 4 -rw-rw-r--. 1 backup backup 2240 Mar 1 23:37 mysql_full_backup.sh [backup@localhost mysqlbackup]$ [backup@localhost mysqlbackup]$ sh mysql_full_backup.sh [backup@localhost mysqlbackup]$ [backup@localhost mysqlbackup]$ ll total 332 -rw-rw-r--. 1 backup backup 330310 Mar 1 23:42 20220301234741.sql.tgz -rw-rw-r--. 1 backup backup 371 Mar 1 23:42 mysql_backup_info.log -rw-rw-r--. 1 backup backup 2240 Mar 1 23:37 mysql_full_backup.sh [backup@localhost mysqlbackup]$ [backup@localhost mysqlbackup]$ cat mysql_backup_info.log ====================开始备份==================== 备份开始时间:2022年03月01日 23:47:41 mysqldump: [Warning] Using a password on the command line interface can be insecure. 备份结果文件:20220301234741.sql.tgz 备份结束时间:2022年03月01日 23:47:41 ====================结束备份==================== [backup@localhost mysqlbackup]$ #### 多次备份效果 [backup@localhost mysqlbackup]$ sh mysql_full_backup.sh [backup@localhost mysqlbackup]$ [backup@localhost mysqlbackup]$ sh mysql_full_backup.sh [backup@localhost mysqlbackup]$ [backup@localhost mysqlbackup]$ ll total 980 -rw-rw-r--. 1 backup backup 330311 Mar 1 23:47 20220301234741.sql.tgz -rw-rw-r--. 1 backup backup 330310 Mar 1 23:50 20220301235055.sql.tgz -rw-rw-r--. 1 backup backup 330311 Mar 1 23:51 20220301235107.sql.tgz -rw-rw-r--. 1 backup backup 1113 Mar 1 23:51 mysql_backup_info.log -rw-rw-r--. 1 backup backup 2240 Mar 1 23:37 mysql_full_backup.sh [backup@localhost mysqlbackup]$ [backup@localhost mysqlbackup]$ cat mysql_backup_info.log ====================开始备份==================== 备份开始时间:2022年03月01日 23:47:41 mysqldump: [Warning] Using a password on the command line interface can be insecure. 备份结果文件:20220301234741.sql.tgz 备份结束时间:2022年03月01日 23:47:41 ====================结束备份==================== ====================开始备份==================== 备份开始时间:2022年03月01日 23:50:55 mysqldump: [Warning] Using a password on the command line interface can be insecure. 备份结果文件:20220301235055.sql.tgz 备份结束时间:2022年03月01日 23:50:55 ====================结束备份==================== ====================开始备份==================== 备份开始时间:2022年03月01日 23:51:07 mysqldump: [Warning] Using a password on the command line interface can be insecure. 备份结果文件:20220301235107.sql.tgz 备份结束时间:2022年03月01日 23:51:08 ====================结束备份==================== [backup@localhost mysqlbackup]$ ### 副本恢复 解压 .tgz 压缩包,得到 .sql 文件,然后导入数据库即可,导入方法见:[MySQL命令行执行SQL脚本文件](https://www.codecomeon.com/posts/116/ "MySQL命令行执行SQL脚本文件") ### 定时备份 #### 定时配置 定时备份依赖于 Linux 系统工具 `crontab`,工具不细究,直接使用。 首先查看当前用户定时任务: [backup@localhost mysqlbackup]$ crontab -l no crontab for backup [backup@localhost mysqlbackup]$ 可见 backup 用户下没有定时任务,那就开始创建一个: [backup@localhost mysqlbackup]$ crontab -e vim 界面一样,插入如下语法即可: * * * * * sh /mysqlbackup/mysql_full_backup.sh 此定时的含义为,每分钟执行一次脚本,执行结果如下: [backup@localhost mysqlbackup]$ ll total 1952 -rw-r--r--. 1 backup backup 330309 Mar 2 00:09 20220302000901.sql.tgz -rw-r--r--. 1 backup backup 330305 Mar 2 00:10 20220302001001.sql.tgz -rw-r--r--. 1 backup backup 330309 Mar 2 00:11 20220302001101.sql.tgz -rw-r--r--. 1 backup backup 330307 Mar 2 00:12 20220302001201.sql.tgz -rw-r--r--. 1 backup backup 2226 Mar 2 00:14 mysql_backup_info.log -rw-rw-r--. 1 backup backup 2240 Mar 1 23:37 mysql_full_backup.sh [backup@localhost mysqlbackup]$ cat mysql_backup_info.log ====================开始备份==================== 备份开始时间:2022年03月02日 00:09:01 mysqldump: [Warning] Using a password on the command line interface can be insecure. 备份结果文件:20220302000901.sql.tgz 备份结束时间:2022年03月02日 00:09:02 ====================结束备份==================== ====================开始备份==================== 备份开始时间:2022年03月02日 00:10:01 mysqldump: [Warning] Using a password on the command line interface can be insecure. 备份结果文件:20220302001001.sql.tgz 备份结束时间:2022年03月02日 00:10:01 ====================结束备份==================== ====================开始备份==================== 备份开始时间:2022年03月02日 00:11:01 mysqldump: [Warning] Using a password on the command line interface can be insecure. 备份结果文件:20220302001101.sql.tgz 备份结束时间:2022年03月02日 00:11:02 ====================结束备份==================== ====================开始备份==================== 备份开始时间:2022年03月02日 00:12:01 mysqldump: [Warning] Using a password on the command line interface can be insecure. 备份结果文件:20220302001201.sql.tgz 备份结束时间:2022年03月02日 00:12:01 ====================结束备份==================== [backup@localhost mysqlbackup]$ #### 定时策略 `crontab -e` 还有很多种组合,下边举例说几个: 1. 每天 23:30 备份: 30 23 * * * sh /mysqlbackup/mysql_full_backup.sh 2. 每周六晚上 23:30 备份 30 23 * * 6 sh /mysqlbackup/mysql_full_backup.sh 3. 每周六、日的 23:30 备份 30 23 * * 6,0 sh /mysqlbackup/mysql_full_backup.sh ### 脚本源码 #********************************************************* #* Author : codecomeon #* Email : codecomeon@qq.com #* Site: : https://www.codecomeon.com/ #* Last modified : 2022-03-01 : 23:23:22 #* Description : MySQL整实例备份(备份所有数据库) #* ******************************************************* CURRENT_PATH=$(cd "$(dirname "$0")"; pwd) #========================================================# #------------------1. 连接数据库参数配置-----------------# # 备份数据库实例用户 DB_USER_NAME=root # 数据库实例密码 DB_PASSWORD=123456 # 数据库实例端口号 DB_PORT=3306 # 据库实例IP DB_HOST=localhost #-------------------2. 造数据参数配置---------------------# # 备份文件存放路径(默认为当前路径) BACKUP_DATA_PATH=$CURRENT_PATH # 备份日志存放路径(默认为当前路径) BACKUP_LOG_PATH=$CURRENT_PATH # 保留副本多少天以内的(即删除多少天以前的副本:默认删除30天前) KEEP_DATA_TIME=30 #------------------自定义配置结束,其他勿动---------------# #=========================================================# MYSQL_INFO_LOG=$BACKUP_LOG_PATH/mysql_backup_info.log if [ ! -f "$MYSQL_INFO_LOG" ]; then touch "$MYSQL_INFO_LOG" fi CUR_DATE=`date +%Y%m%d%H%M%S` BACKUP_BEGIN_TIME=`date +"%Y年%m月%d日 %H:%M:% ¥8.00 解锁全文 下载资源 本文标题: MySQL生产环境数据库备份标准脚本 本文作者: 夏至未至 发布时间: 2023年5月4日 10:36 最近更新: 2024年7月24日 10:59 原文链接: 许可协议: 署名-非商业性-禁止演绎 4.0 国际(CC BY-NC-ND 4.0) 请按协议转载并保留原文链接及作者 MySQL(28) 上一个 CentOS6 配置阿里云yum源 下一个 mount nfs 报错(已解决) 当前文章评论暂未开放,请移步至留言处留言。