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

yumo6664个月前 (03-27)技术文章42

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

  • 硬件故障:硬盘损坏、服务器宕机等物理问题可能导致数据无法访问。
  • 软件缺陷:数据库软件或应用系统的漏洞可能破坏数据完整性。
  • 人为误操作:误删表(如 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)报警备份失败。

相关文章

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

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

RTK数据丢失、数据误删怎么办?各品牌RTK数据恢复办法,值得收藏

你是不是也遇到过RTK作业后不小心数据丢失了、数据误删除了如果不找回来可能会影响到整个工程进度所以掌握RTK数据恢复办法就很有必要小编汇总了华测、中海达、科力达等品牌RTK数据恢复办法大家可以参考一下...

服务器数据恢复—Sql Server数据库数据恢复案例

服务器数据恢复环境:一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。在windows服务器内装有SqlServer数据库。存储空间LU...

sql误删除数据表的数据恢复

在数据管理的日常工作中,我们经常会面临一些突发情况,其中最令人头疼的莫过于误删除数据。对于使用SQL语言进行数据库操作的人员来说,这种情况尤其常见。我们要了解的是,SQL中并没有直接提供撤销或删除操作...

Oracle数据库的备份与恢复,实用易学简单,转发收藏备用

Oracle数据库非常强大,有其自己的备份与恢复机制,并且细分,只要配置合理,完全可以保证数据库的完整,免去运维人员的后顾之忧。Oracle数据库使用RMAN备份,需要把数据库的非归档模式改成归档模式...

如何在 iPhone 恢复出厂设置后恢复数据

如果您在 iPhone 上执行了出厂重置,您会发现它已删除所有旧数据。这对于清理杂乱和提高设备性能非常有用,但如果您忘记保存重要文件,那就是个坏消息。恢复出厂设置后可以恢复数据吗?是的!幸运的是,只要...