文章目录Ubuntu 通过Shell脚本自动备份数据库1. 创建mysql备份账户2. 创建备份脚本2.1. 方式1密码单独存放推荐1) 将账号密码存储到mysql配置文件中2)新建shell脚本 dbbackup.sh2.2. 方式2命令行使用密码3. 赋予文件权限以及测试shell脚本4. 编辑定时任务5. 验证定时任务设置6. Linux crontab 命令语法格式Ubuntu 通过Shell脚本自动备份数据库1. 创建mysql备份账户-- 创建专用备份账号如果尚未创建CREATEUSERbackup_userlocalhostIDENTIFIEDBYstrong_password;-- 授予基础权限GRANTSELECT,SHOWVIEW,TRIGGER,LOCKTABLES,PROCESSON*.*TObackup_userlocalhost;-- 如果数据库含事件调度GRANTEVENTONmy_db.*TObackup_userlocalhost;FLUSHPRIVILEGES;2. 创建备份脚本2.1. 方式1密码单独存放推荐1) 将账号密码存储到mysql配置文件中# /etc/mysql/conf.d/backup.cnf文件中添加sudovim/etc/mysql/conf.d/backup.cnf[client]userbackup_user passwordstrong_password# socket /var/run/mysqld/mysqld.sock # Linux可能需要mysqld.sock路径也有所不同# 更改配置文件权限sudochmod600/etc/mysql/conf.d/backup.cnf2)新建shell脚本 dbbackup.sh#!/bin/bash# 设置备份文件的保存目录backup_dir/data/backup/mysqldata# 设置备份文件的登录凭证mysql_dbnamemy_db# 设置备份文件的名称和格式(以日期命名)backup_file$(date%Y-%m-%d-%H-%M-%S).sql.gz# 宿主机直接部署# 方式1备份某个数据库mysqldump$mysql_dbname|gzip$backup_dir/$backup_file# 方式2备份所有数据库mysqldump --all-databases|gzip$backup_dir/$backup_file# docker容器部署# 方式1备份某个数据库dockerexecmysql_container mysqldump$mysql_dbname|gzip$backup_dir/$backup_file# 方式2备份所有数据库dockerexecmysql_container mysqldump --all-databases|gzip$backup_dir/$backup_file# 删除30天前的备份文件find$backup_dir-name*.sql.gz-mtime30-execrm{}\;# 打印备份完成的信息echo MYSQL backup complete:$backup_dir/$backup_file2.2. 方式2命令行使用密码直接新建shell脚本 dbbackup.sh将密码写在文件中#!/bin/bash# 设置备份文件的保存目录backup_dir/data/backup/mysqldata# 设置备份文件的登录凭证mysql_userbackup_usermysql_passwordstrong_passwordmysql_host127.0.0.1mysql_dbnamemy_db# 设置备份文件的名称和格式(以日期命名)backup_file$(date%Y-%m-%d-%H-%M-%S).sql.gz# 使用mysqldump命令备份数据库mysqldump -u$mysql_user-p$mysql_password-h$mysql_host$mysql_dbname|gzip$backup_dir/$backup_file# docker容器使用mysqldump命令备份数据库dockerexecmysql_container mysqldump -u$mysql_user-p$mysql_password-h$mysql_host$mysql_dbname|gzip$backup_dir/$backup_file# 删除30天前的备份文件find$backup_dir-name*.sql.gz-mtime30-execrm{}\;# 打印备份完成的信息echo MYSQL backup complete:$backup_dir/$backup_file# 可以一句话搞定# /usr/bin/mysqldump -ubackup_user -pstrong_password -h 127.0.0.1 my_db |gzip /backup/mysqldata/date %Y-%m-%d-%H-%M-%S.sql.gz3. 赋予文件权限以及测试shell脚本# 创建备份文件夹(保证mysqldump有访问权限)sudomkdir-p/data/backup/mysqldata# 移动shell脚本到备份文件夹sudomvdbbackup.sh /opt# 赋予dbbackup.sh文件可执行权限sudochmodx /opt/dbbackup.sh# 测试dbbackup.sh脚本执行[这里的脚本用户组权限要和backup.cnf文件权限保持一致]sudosh/opt/dbbackup.sh MYSQL backup complete: /data/backup/mysqldata/2024-10-15-11-34-26.sql.gz4. 编辑定时任务# 编辑定时任务系统跳出编辑器选择界面选择常用的编辑器打开定时任务# 这里的用户定时器要与dbbackup.sh脚本权限一致否则会无权限执行sudocrontab-e# 加入以下代码表示每天凌晨3点执行sh文件00 03 * * *bash/opt/dbbackup.sh# 代表意义 分钟 小时 日期 月份 周# 数字范围 0-59 0-23 1-31 1-12 0-65. 验证定时任务设置# 重启cron服务sudosystemctl restartcron# centossudosystemctl restart crond# 检查cron服务状态sudosystemctl statuscron# 查看定时任务列表sudocrontab-l# 出现下面这行说明设置成功00 03 * * *bash/opt/dbbackup.sh6. Linux crontab 命令语法crontab[-uuser]file或crontab[-uuser]{-l|-r|-e}说明crontab 是用来让使用者在固定时间或固定间隔执行程序之用换句话说也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话就是表示设定自己的时程表。参数说明-e : 执行文字编辑器来设定时程表内定的文字编辑器是 Vi/Vim如果你想用别的文字编辑器则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)-r : 删除目前的时程表-l : 列出目前的时程表查看当前用户的 crontab 文件crontab-l编辑当前用户的 crontab 文件crontab-e删除当前用户的 crontab 文件crontab-r列出某个用户的 crontab 文件需要有相应的权限crontab-uusername-l编辑某个用户的 crontab 文件需要有相应的权限crontab-uusername-e格式时间格式如下f1 f2 f3 f4 f5 program其中 f1 是表示分钟f2 表示小时f3 表示一个月份中的第几日f4 表示月份f5 表示一个星期中的第几天。program 表示要执行的程序。当 f1 为 * 时表示每分钟都要执行 programf2 为 * 时表示每小时都要执行程序其馀类推当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行f2 为 a-b 时表示从第 a 到第 b 小时都要执行其馀类推当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次f2 为 */n 表示每 n 小时个时间间隔执行一次其馀类推当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行其馀类推* * * * * - - - - -|||||||||----- 星期中星期几(0-6)(星期天 为0)|||---------- 月份(1-12)||--------------- 一个月中的第几天(1-31)|-------------------- 小时(0-23)------------------------- 分钟(0-59)时间格式设置时间设置含义* * * * *每分钟执行一次0 * * * *每小时的第 0 分钟执行一次0 0 * * *每天的午夜0 点执行一次0 0 * * 0每周日的午夜0 点执行一次0 0 1 * *每个月的第一天午夜0 点执行一次0 0 L * *每个月的最后一天午夜0 点执行一次0 0 1 1 *每年的第一天午夜0 点执行一次0 0 * * 3每周三的午夜0 点执行一次0 0 1,15 * *每个月的第 1 和第 15 天午夜0 点执行一次0 0 * * FRI每周五的午夜0 点执行一次0 0 * * 5每周五的午夜0 点执行一次0 8-17 * * *每天的上午 8 点到下午 5 点每小时执行一次0 12 * * MON每周一的中午12 点执行一次0 0 15 * *每个月的第 15 天午夜0 点执行一次0 0 * * 3每周三的午夜0 点执行一次0 8-17 * * *每天的上午 8 点到下午 5 点每小时执行一次0 0 * * 1-5每个工作日的午夜0 点执行一次0 0 1 * FRI每个月的第一个星期五午夜0 点执行一次0 0 1,15 * *每个月的第 1 和第 15 天午夜0 点执行一次0 0 15 1 *每年的 1 月 15 日午夜0 点执行一次0 0 * * 7每周日的午夜0 点执行一次0 0 * * 5每周五的午夜0 点执行一次
Ubuntu 通过Shell脚本自动备份数据库
发布时间:2026/6/4 19:59:14
文章目录Ubuntu 通过Shell脚本自动备份数据库1. 创建mysql备份账户2. 创建备份脚本2.1. 方式1密码单独存放推荐1) 将账号密码存储到mysql配置文件中2)新建shell脚本 dbbackup.sh2.2. 方式2命令行使用密码3. 赋予文件权限以及测试shell脚本4. 编辑定时任务5. 验证定时任务设置6. Linux crontab 命令语法格式Ubuntu 通过Shell脚本自动备份数据库1. 创建mysql备份账户-- 创建专用备份账号如果尚未创建CREATEUSERbackup_userlocalhostIDENTIFIEDBYstrong_password;-- 授予基础权限GRANTSELECT,SHOWVIEW,TRIGGER,LOCKTABLES,PROCESSON*.*TObackup_userlocalhost;-- 如果数据库含事件调度GRANTEVENTONmy_db.*TObackup_userlocalhost;FLUSHPRIVILEGES;2. 创建备份脚本2.1. 方式1密码单独存放推荐1) 将账号密码存储到mysql配置文件中# /etc/mysql/conf.d/backup.cnf文件中添加sudovim/etc/mysql/conf.d/backup.cnf[client]userbackup_user passwordstrong_password# socket /var/run/mysqld/mysqld.sock # Linux可能需要mysqld.sock路径也有所不同# 更改配置文件权限sudochmod600/etc/mysql/conf.d/backup.cnf2)新建shell脚本 dbbackup.sh#!/bin/bash# 设置备份文件的保存目录backup_dir/data/backup/mysqldata# 设置备份文件的登录凭证mysql_dbnamemy_db# 设置备份文件的名称和格式(以日期命名)backup_file$(date%Y-%m-%d-%H-%M-%S).sql.gz# 宿主机直接部署# 方式1备份某个数据库mysqldump$mysql_dbname|gzip$backup_dir/$backup_file# 方式2备份所有数据库mysqldump --all-databases|gzip$backup_dir/$backup_file# docker容器部署# 方式1备份某个数据库dockerexecmysql_container mysqldump$mysql_dbname|gzip$backup_dir/$backup_file# 方式2备份所有数据库dockerexecmysql_container mysqldump --all-databases|gzip$backup_dir/$backup_file# 删除30天前的备份文件find$backup_dir-name*.sql.gz-mtime30-execrm{}\;# 打印备份完成的信息echo MYSQL backup complete:$backup_dir/$backup_file2.2. 方式2命令行使用密码直接新建shell脚本 dbbackup.sh将密码写在文件中#!/bin/bash# 设置备份文件的保存目录backup_dir/data/backup/mysqldata# 设置备份文件的登录凭证mysql_userbackup_usermysql_passwordstrong_passwordmysql_host127.0.0.1mysql_dbnamemy_db# 设置备份文件的名称和格式(以日期命名)backup_file$(date%Y-%m-%d-%H-%M-%S).sql.gz# 使用mysqldump命令备份数据库mysqldump -u$mysql_user-p$mysql_password-h$mysql_host$mysql_dbname|gzip$backup_dir/$backup_file# docker容器使用mysqldump命令备份数据库dockerexecmysql_container mysqldump -u$mysql_user-p$mysql_password-h$mysql_host$mysql_dbname|gzip$backup_dir/$backup_file# 删除30天前的备份文件find$backup_dir-name*.sql.gz-mtime30-execrm{}\;# 打印备份完成的信息echo MYSQL backup complete:$backup_dir/$backup_file# 可以一句话搞定# /usr/bin/mysqldump -ubackup_user -pstrong_password -h 127.0.0.1 my_db |gzip /backup/mysqldata/date %Y-%m-%d-%H-%M-%S.sql.gz3. 赋予文件权限以及测试shell脚本# 创建备份文件夹(保证mysqldump有访问权限)sudomkdir-p/data/backup/mysqldata# 移动shell脚本到备份文件夹sudomvdbbackup.sh /opt# 赋予dbbackup.sh文件可执行权限sudochmodx /opt/dbbackup.sh# 测试dbbackup.sh脚本执行[这里的脚本用户组权限要和backup.cnf文件权限保持一致]sudosh/opt/dbbackup.sh MYSQL backup complete: /data/backup/mysqldata/2024-10-15-11-34-26.sql.gz4. 编辑定时任务# 编辑定时任务系统跳出编辑器选择界面选择常用的编辑器打开定时任务# 这里的用户定时器要与dbbackup.sh脚本权限一致否则会无权限执行sudocrontab-e# 加入以下代码表示每天凌晨3点执行sh文件00 03 * * *bash/opt/dbbackup.sh# 代表意义 分钟 小时 日期 月份 周# 数字范围 0-59 0-23 1-31 1-12 0-65. 验证定时任务设置# 重启cron服务sudosystemctl restartcron# centossudosystemctl restart crond# 检查cron服务状态sudosystemctl statuscron# 查看定时任务列表sudocrontab-l# 出现下面这行说明设置成功00 03 * * *bash/opt/dbbackup.sh6. Linux crontab 命令语法crontab[-uuser]file或crontab[-uuser]{-l|-r|-e}说明crontab 是用来让使用者在固定时间或固定间隔执行程序之用换句话说也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话就是表示设定自己的时程表。参数说明-e : 执行文字编辑器来设定时程表内定的文字编辑器是 Vi/Vim如果你想用别的文字编辑器则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)-r : 删除目前的时程表-l : 列出目前的时程表查看当前用户的 crontab 文件crontab-l编辑当前用户的 crontab 文件crontab-e删除当前用户的 crontab 文件crontab-r列出某个用户的 crontab 文件需要有相应的权限crontab-uusername-l编辑某个用户的 crontab 文件需要有相应的权限crontab-uusername-e格式时间格式如下f1 f2 f3 f4 f5 program其中 f1 是表示分钟f2 表示小时f3 表示一个月份中的第几日f4 表示月份f5 表示一个星期中的第几天。program 表示要执行的程序。当 f1 为 * 时表示每分钟都要执行 programf2 为 * 时表示每小时都要执行程序其馀类推当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行f2 为 a-b 时表示从第 a 到第 b 小时都要执行其馀类推当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次f2 为 */n 表示每 n 小时个时间间隔执行一次其馀类推当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行其馀类推* * * * * - - - - -|||||||||----- 星期中星期几(0-6)(星期天 为0)|||---------- 月份(1-12)||--------------- 一个月中的第几天(1-31)|-------------------- 小时(0-23)------------------------- 分钟(0-59)时间格式设置时间设置含义* * * * *每分钟执行一次0 * * * *每小时的第 0 分钟执行一次0 0 * * *每天的午夜0 点执行一次0 0 * * 0每周日的午夜0 点执行一次0 0 1 * *每个月的第一天午夜0 点执行一次0 0 L * *每个月的最后一天午夜0 点执行一次0 0 1 1 *每年的第一天午夜0 点执行一次0 0 * * 3每周三的午夜0 点执行一次0 0 1,15 * *每个月的第 1 和第 15 天午夜0 点执行一次0 0 * * FRI每周五的午夜0 点执行一次0 0 * * 5每周五的午夜0 点执行一次0 8-17 * * *每天的上午 8 点到下午 5 点每小时执行一次0 12 * * MON每周一的中午12 点执行一次0 0 15 * *每个月的第 15 天午夜0 点执行一次0 0 * * 3每周三的午夜0 点执行一次0 8-17 * * *每天的上午 8 点到下午 5 点每小时执行一次0 0 * * 1-5每个工作日的午夜0 点执行一次0 0 1 * FRI每个月的第一个星期五午夜0 点执行一次0 0 1,15 * *每个月的第 1 和第 15 天午夜0 点执行一次0 0 15 1 *每年的 1 月 15 日午夜0 点执行一次0 0 * * 7每周日的午夜0 点执行一次0 0 * * 5每周五的午夜0 点执行一次