如何在Linux环境下编写脚本实现MySQL每日自动备份?

风浩君_7203

风浩君_7203

2026-06-26

758人浏览

原创

mysqldump 备份必须加 --single-transaction 保证 innodb 一致性,搭配 --routines、--triggers,显式指定库名;用 systemd timer 替代 crontab,依赖 mysql 服务;备份压缩校验、分层保留;密码存 ~/.my.cnf 并设 chmod 600;定期验证恢复。

如何在linux环境下编写脚本实现mysql每日自动备份?

备份脚本里 mysqldump 的关键参数必须加 --single-transaction

不加这个参数,备份时遇到写入操作容易产生不一致快照,尤其在业务高峰期。InnoDB 表虽支持事务,但 mysqldump 默认不启用事务一致性导出——它会逐表 dump,中间若有 DML 操作,备份出来的 SQL 可能跨事务状态。

实操建议:

  • --single-transaction 仅对 InnoDB 有效,MyISAM 表仍需配合 --lock-all-tables(但会锁库,慎用)
  • 务必搭配 --routines 和 --triggers,否则存储过程和触发器不会被导出
  • 避免用 --all-databases 直接备份全部库,权限不足或含系统库(如 information_schema)会报错;推荐显式指定库名:mysqldump -u root -p'pwd' --single-transaction --routines --triggers myapp_db > /backup/myapp_db_$(date +\%Y\%m\%d).sql

定时任务用 crontab 还是 systemd timer?选后者更可靠

crontab 在系统重启后自动生效,但无法感知 MySQL 服务是否就绪;systemd timer 可设依赖关系,且支持日志追踪、失败重试。

实操建议:

  • 写一个 service 文件 /etc/systemd/system/mysql-backup.service,ExecStart 指向你的备份脚本路径
  • 配套 timer 文件 mysql-backup.timer,用 OnCalendar=daily 并加上 Requires=mysql.service 和 After=mysql.service
  • 运行 systemctl daemon-reload && systemctl enable mysql-backup.timer && systemctl start mysql-backup.timer
  • 检查状态:用 systemctl list-timers 看下次触发时间,journalctl -u mysql-backup.service 查错误

备份文件保留策略别只靠 find -mtime +7 -delete

直接删旧文件风险高:磁盘满、误删、没校验备份有效性就删了,恢复时才发现 SQL 文件损坏或为空。

Linux installer
Linux installer

先解析安全源,运行本地CLI安装、启动、卸载Linux桌面应用。用户请求时使用。

下载

实操建议:

  • 先用 gzip 压缩备份文件,节省空间同时自带校验(解压失败即知损坏)
  • 保留前 7 天 + 每月 1 号的完整备份,用日期判断:if [[ $(date +\%d) == "01" ]]; then keep_flag="monthly"; else keep_flag="daily"; fi
  • 清理前先 head -n 20 /backup/*.sql.gz | grep -q "MySQL dump" || echo "警告:疑似空或损坏"
  • 删除动作加 -v 参数并记录到日志,例如:find /backup -name "*.sql.gz" -mtime +7 -print -delete >> /var/log/mysql-backup-clean.log 2>&1

密码不能硬编码在脚本里,用 ~/.my.cnf 配置文件更安全

脚本里写 -p'your_password' 或 export MYSQL_PWD=xxx 都会在进程列表(ps aux)中暴露密码,且 git 提交易泄露。

实操建议:

  • 创建 ~/.my.cnf,内容为:
[client]
user = backup_user
password = your_strong_password
host = localhost
  • 权限必须设为 chmod 600 ~/.my.cnf,否则 mysqldump 会拒绝读取
  • 创建专用账号,最小权限原则:GRANT SELECT, LOCK TABLES, SHOW VIEW, TRIGGER ON myapp_db.* TO 'backup_user'@'localhost';
  • 脚本里直接调用 mysqldump myapp_db > ...,无需再传用户密码参数
  • 真正麻烦的不是写脚本,是验证备份可恢复——每周至少手动 mysql -D test_restore 试一次,否则你永远不知道那个 gzip 文件到底有没有用。

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    mysql linux

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    mysql修改数据表名
    mysql修改数据表名

    MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

    2023.06.20

    2093

    6

    MySQL创建存储过程
    MySQL创建存储过程

    存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

    2023.06.21

    1279

    5

    mongodb和mysql的区别
    mongodb和mysql的区别

    mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.07.18

    755

    5

    mysql密码忘了怎么查看
    mysql密码忘了怎么查看

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    2023.07.19

    2812

    5

    mysql创建数据库
    mysql创建数据库

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    2023.07.25

    4688

    4

    mysql默认事务隔离级别
    mysql默认事务隔离级别

    MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

    2023.08.08

    1079

    3

    sqlserver和mysql区别
    sqlserver和mysql区别

    SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    2023.08.11

    4951

    4

    mysql忘记密码
    mysql忘记密码

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

    2023.08.14

    4402

    7

    mysql事务隔离级别
    mysql事务隔离级别

    mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

    2023.08.16

    5774

    11

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    PostgreSQL vs MySQL
    PostgreSQL vs MySQL

    共1课时 | 180人学习

    使用phpenv集成环境安装极致CMS
    使用phpenv集成环境安装极致CMS

    共2课时 | 287人学习