mysql数据库自动备份
时间: 2023-09-12 13:12:33 浏览: 102
Mysql数据库自动备份
MySQL 数据库自动备份可以通过使用 cron 作业或者 MySQL 事件计划器实现。下面是两种实现方式:
1. 使用 cron 作业:
- 创建一个 shell 脚本,用于备份 MySQL 数据库。例如,名为 backup.sh:
```sh
#!/bin/bash
# MySQL数据库备份脚本
# 配置数据库连接参数
DB_USER="root"
DB_PASS="password"
DB_NAME="mydatabase"
# 配置备份目录和文件名
BACKUP_DIR="/path/to/backup/dir"
BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}-$(date +%Y-%m-%d-%H-%M-%S).sql.gz"
# 执行备份命令
mysqldump -u${DB_USER} -p${DB_PASS} ${DB_NAME} | gzip > ${BACKUP_FILE}
```
- 赋予脚本执行权限:
```sh
chmod +x backup.sh
```
- 编辑 cron 作业表,添加一个定时任务:
```sh
crontab -e
```
- 在编辑器中添加以下行,表示每天凌晨 3 点执行一次备份:
```sh
0 3 * * * /path/to/backup.sh
```
- 保存并退出编辑器。
2. 使用 MySQL 事件计划器:
- 创建一个存储过程,用于备份 MySQL 数据库。例如,名为 backup_proc:
```sql
DELIMITER $$
CREATE PROCEDURE `backup_proc`()
BEGIN
-- 配置数据库连接参数
SET @DB_USER := 'root';
SET @DB_PASS := 'password';
SET @DB_NAME := 'mydatabase';
-- 配置备份目录和文件名
SET @BACKUP_DIR := '/path/to/backup/dir';
SET @BACKUP_FILE := CONCAT(@BACKUP_DIR, '/', @DB_NAME, '-', DATE_FORMAT(NOW(), '%Y-%m-%d-%H-%i-%s'), '.sql.gz');
-- 执行备份命令
SET @CMD := CONCAT('mysqldump -u', @DB_USER, ' -p', @DB_PASS, ' ', @DB_NAME, ' | gzip > ', @BACKUP_FILE);
PREPARE stmt FROM @CMD;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
```
- 创建一个 MySQL 事件计划器,以每天凌晨 3 点执行一次备份:
```sql
CREATE EVENT `backup_event`
ON SCHEDULE
EVERY 1 DAY
STARTS '2022-01-01 03:00:00'
DO
CALL backup_proc();
```
- 修改事件计划器的开始时间和执行间隔,以适应实际需求。
无论使用哪种方式,都应该注意备份文件的定期清理,以避免占用过多的磁盘空间。可以通过设置 cron 作业或 MySQL 事件计划器来定期删除过期的备份文件。
阅读全文