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

yumo66610个月前 (03-27)技术文章147

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

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

MySQL数据库是一种关系型数据库。MySQL数据库相比较其他数据库有以下特点:体积小、速度快、性价比高。MySQL数据库的源码开放,且支持绝大多数操作系统,便于搭建和维护,所以MySQL数据库被广泛...

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

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