如何在Linux中配置定时自动备份MySQL Linux编写数据库备份脚本的方法

星明酱_4945

星明酱_4945

2026-06-07

357人浏览

原创

--single-transaction是mysqldump针对innodb表实现无锁一致性备份的核心参数,通过mvcc创建事务快照,全程不阻塞写入;但遇myisam表、长事务或冲突参数(如--lock-tables)会退化为锁表,必须配合--skip-lock-tables、--routines、--events及--set-gtid-purged=off等使用,并通过~/.my.cnf安全存密、gzip压缩、时间戳命名和自动清理保障生产可用性。

如何在linux中配置定时自动备份mysql linux编写数据库备份脚本的方法

MySQL备份脚本必须用mysqldump加--single-transaction

直接执行mysqldump不加参数,对InnoDB表可能产生不一致快照——尤其在有长事务或写入密集时。用--single-transaction能保证导出期间数据逻辑一致,且不锁表(MyISAM表除外,它会自动退化为--lock-tables)。别信“加个-e就行”这种说法,mysqldump默认没开事务一致性。

实操建议:

  • 务必指定--skip-lock-tables配合--single-transaction,避免误触发表级锁
  • 加上--routines和--events,否则存储过程、事件不会被导出
  • 用--set-gtid-purged=OFF防止GTID环境导出失败(常见于MySQL 5.7+主从场景)
  • 示例命令:mysqldump --single-transaction --skip-lock-tables --routines --events --set-gtid-purged=OFF -u root -p'password' mydb > /backup/mydb_$(date +\%F).sql

crontab里不能直接写密码,要用~/.my.cnf配认证

把密码明文写进crontab或脚本里,等于把数据库凭据挂在系统日志和进程列表上——ps aux一眼就能看到。Linux下唯一安全的做法是用~/.my.cnf文件存认证信息,并严格限制权限。

实操建议:

  • ~/.my.cnf必须chmod 600 ~/.my.cnf,否则mysqldump会拒绝读取
  • 内容只保留[client]段,不要加[mysql]或[mysqld]等无关节区
  • 字段名必须是user和password,不能写成username或pwd
  • 示例配置:
    [client]
    user = backup_user
    password = your_strong_password

备份文件要压缩、带时间戳、自动清理旧文件

每天全量导出SQL文本,不压缩的话,一个月就占几个GB;不加时间戳,恢复时根本分不清哪份是昨天的;不清理,磁盘迟早爆满——这三件事必须在脚本里一并解决,不能靠人工补救。

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载

实操建议:

  • 用gzip压缩,不是bzip2或xz:压缩比够用,CPU开销小,解压兼容性好
  • 文件名用$(date +\%Y\%m\%d_\%H\%M),避免空格和特殊字符影响后续脚本处理
  • 用find /backup -name "mydb_*.sql.gz" -mtime +7 -delete删7天前的,别用rm -f /backup/*.gz这种暴力清空
  • 完整脚本片段:
    #!/bin/bash
    DB_NAME="mydb"
    BACKUP_DIR="/backup"
    DATE=$(date +\%Y\%m\%d_\%H\%M)
    mysqldump --single-transaction --skip-lock-tables --routines --events --set-gtid-purged=OFF $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
    find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete

crontab执行失败最常见原因是环境变量缺失

你在终端能跑通的脚本,放进crontab就报command not found或mysqldump: command not found,基本就是PATH问题。crontab默认PATH极短(通常是/usr/bin:/bin),而mysqldump常装在/usr/local/mysql/bin/或/opt/mysql/bin/。

实操建议:

  • 在crontab里显式声明PATH:PATH=/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/bin
  • 或者直接在脚本开头写export PATH="/usr/local/mysql/bin:$PATH"
  • 加日志重定向:0 2 * * * /path/to/backup.sh >> /var/log/mysql-backup.log 2>&1,否则失败无声无息
  • 测试是否生效:先手动运行env -i PATH="$PATH" /path/to/backup.sh,模拟cron环境

备份脚本真正难的不是语法,而是让mysqldump在无人值守时每次都能拿到一致快照、不泄露密码、不撑爆磁盘、不出PATH错误——这些点漏掉任意一个,都可能让“自动备份”变成“自动失效”。

相关专题

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

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

2023.06.20

2193

6

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

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

2023.06.21

1339

5

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

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

2023.07.18

795

5

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

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

2023.07.19

3012

5

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

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

2023.07.25

5068

4

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

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

2023.08.08

1139

3

sqlserver和mysql区别
sqlserver和mysql区别

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

2023.08.11

5331

4

mysql忘记密码
mysql忘记密码

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

2023.08.14

4682

7

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

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

2023.08.16

6174

11

热门下载

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

精品课程

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

共1课时 | 184人学习