mariadb数据库备份与恢复-数据一条都不能少

yumo6661个月前 (03-27)技术文章18

数据库备份与恢复是数据安全的最后一道防线。其必要性不仅在于防御风险,更是持续服务和数据资产保值的核心保障。数据面临的威胁:

  • 硬件故障:硬盘损坏、服务器宕机等物理问题可能导致数据无法访问。
  • 软件缺陷:数据库软件或应用系统的漏洞可能破坏数据完整性。
  • 人为误操作:误删表(如 DROP TABLE)、错误更新(如 UPDATE 不加条件)等操作难以回滚。

一、备份方法

1. 逻辑备份(mysqldump)

适用场景:中小型数据库、需跨版本迁移、恢复单个表。
步骤

# 备份单个数据库
mysqldump -u 用户名 -p 数据库名 > backup.sql

# 备份所有数据库(含系统库)
mysqldump -u 用户名 -p --all-databases > full_backup.sql

# 仅备份表结构(不含数据)
mysqldump -u 用户名 -p --no-data 数据库名 > schema.sql

# 压缩备份文件
mysqldump -u 用户名 -p 数据库名 | gzip > backup.sql.gz

参数说明
--single-transaction:InnoDB 表使用事务保证备份一致性(适合在线备份)。
--routines:包含存储过程和函数。
--events:包含事件调度器任务。


2. 物理备份(文件系统快照)

适用场景:大型数据库、快速备份恢复。
工具mariabackup(MariaDB 官方工具,支持热备份)。
步骤

# 安装 mariabackup
sudo apt-get install mariadb-backup

# 全量备份
sudo mariabackup --backup --target-dir=/path/to/backup --user=用户名 --password=密码

# 准备备份(使数据一致)
sudo mariabackup --prepare --target-dir=/path/to/backup

3. 增量备份

适用场景:减少全量备份频率,节省存储空间。
步骤

# 首次全量备份
mariabackup --backup --target-dir=/backup/full

# 增量备份(基于全量备份)
mariabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/full

# 合并增量备份到全量
mariabackup --prepare --apply-log-only --target-dir=/backup/full
mariabackup --prepare --target-dir=/backup/full --incremental-dir=/backup/inc1

二、恢复方法

1. 从逻辑备份恢复

# 恢复单个数据库
mysql -u 用户名 -p 数据库名 < backup.sql

# 恢复所有数据库
mysql -u 用户名 -p < full_backup.sql

# 解压后恢复
gunzip < backup.sql.gz | mysql -u 用户名 -p 数据库名

2. 从物理备份恢复

使用 mariabackup 恢复。

# 恢复备份
sudo systemctl stop mariadb
sudo rm -rf /var/lib/mysql/*
sudo mariabackup --copy-back --target-dir=/path/to/backup
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mariadb

3. 时间点恢复(Point-in-Time Recovery)

适用场景:恢复误删数据到指定时间点(需启用二进制日志)。
步骤

# 1. 恢复最近的全量备份
mysql -u root -p < full_backup.sql

# 2. 重放二进制日志到误操作前
mysqlbinlog --start-datetime="2024-05-29 00:00:00" --stop-datetime="2024-05-29 14:30:00" /var/lib/mysql/mariadb-bin.000001 | mysql -u root -p

三、自动化备份

1. 定时任务(Cron)

# 编辑 cron 任务
crontab -e

# 每天凌晨2点全量备份
0 2 * * * /usr/bin/mysqldump -u 用户名 -p密码 数据库名 > /backup/daily_backup.sql

# 每周日凌晨2点压缩备份
0 2 * * 7 gzip /backup/daily_backup.sql

2. 备份验证

# 检查备份文件完整性
grep "Dump completed" backup.sql

# 模拟恢复测试(可选)
mysql -u root -p test_db < backup.sql

四、注意事项

  • 备份存储
  • 异地保存至少3份备份(本地、云存储、离线介质)。
  • 加密敏感备份文件(如使用 openssl enc)。
  • 一致性
  • 备份期间避免执行 ALTER TABLE 等DDL操作。InnoDB 表使用 --single-transaction 参数。
  • 监控
  • 定期检查备份日志和文件大小。使用监控工具(如 Nagios)报警备份失败。

相关文章

一种 SQL Server 数据库恢复方案:解密、恢复并导出 MDF/NDF/BAK文件

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份、数据取证、数据迁移解决方案,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。天津鸿萌科贸发展...

数据库数据恢复—Sql Server数据库文件丢失如何恢复数据?

数据库数据恢复环境:5块硬盘组建一组RAID5阵列,划分LUN供windows系统服务器使用。windows系统服务器内运行了Sql Server数据库,存储空间在操作系统层面划分了三个逻辑分区。数据...

遭遇删库跑路不要慌,这几个数据恢复方式可以参考一下。

23号19点,微盟遭遇核心运维人员删库跑路事件。造成微盟服务器故障,大积服务集群群无法响应,生产环境及数据遭受微盟研发中心运维部核心运维人员贺某的严重破坏。我们不知道贺某经历了什么,冒着重大信息犯罪干...

如果数据库误操作, 如何执行数据恢复?

如果数据库出现误操作,导致数据被删除或修改,可以通过以下步骤进行数据恢复:停止MySQL服务:在误操作发生后,立即停止MySQL服务,防止数据被覆盖。找到备份数据:如果有备份,可以通过备份文件进行数据...

如何在Chrome上查找删除的历史记录(iOS、Android和PC恢复指南)

我们都经历过这样的情况:试图找到我们前段时间从 Chrome 阅读的一篇文章,却发现我们的浏览历史记录已被删除。这可能会令人沮丧,但是,我们随时为您提供帮助!本指南涵盖了有关如何在 Chrome 上检...

删库之后不要着急跑路,教你神不知鬼不觉找回数据

在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。在 mysql 数据库中,我们知道 binlog 日志记录了我们对数据库的所有操作,所以...