当前位置:首页 > 技术分析 > 正文内容

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

ruisui884周前 (03-31)技术分析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)报警备份失败。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3205.html

标签: 数据库导出
分享给朋友:

“mariadb数据库备份与恢复-数据一条都不能少” 的相关文章

智能计费、综合管控,爱博精电帮您快速构建水电费预付费管理系统

近年来,随着企业经营管理意识的加强,商业建筑的物业管理部门对于水电费的收缴越来越重视,在实际运营中,因为服务、管理或其他方面的纠纷,商户拖欠电费的情况时有发生,管理部门为了消除收费难、垫付水电费过多、偷窃电等诸多难题,急需改变传统水电费收缴方式。但是常规的水电预付费改造面临着改造难度大、改造周期长、...

vue:组件中之间的传值

一、父子组件之间的传值----props/$emit1、父组件向子组件传值--props2.子组件想父组件传值-this.$emit('select',item)二、父组件向下(深层)子组件传值----provide/injectprovide:Object | () => O...

vue中组件之间的通信方式

** 1.1 父子组件**a. 父向子传数据: 第1种: 父通过属性传值,子组件通过props接收数据(注:props传过来的数据是单向的,不可以进行修改)第2种:子组件可以通过$parent来获取父组件里的数据和调用父组件的方法(注:数据是双向的,还要注意如用了UI组件并且在该UI组件里重新定义一...

面试被逼疯:聊聊Python Import System?

面试官一个小时逼疯面试者:聊聊Python Import System?对于每一位Python开发者来说,import这个关键字是再熟悉不过了,无论是我们引用官方库还是三方库,都可以通过import xxx的形式来导入。可能很多人认为这只是Python的一个最基础的常识之一,似乎没有可以扩展的点了,...

抖音 Android 性能优化系列:启动优化实践

启动性能是 APP 使用体验的门面,启动过程耗时较长很可能使用户削减使用 APP 的兴趣,抖音通过对启动性能做劣化实验也验证了其对于业务指标有显著影响。抖音有数亿的日活,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减,因此,启动性能的优化成为了抖音 Android 基础技术团队在体验优化方向...

我的VIM配置

写一篇关于VIM配置的文章,记录下自己的VIM配置,力求简洁实用。VIM的配置保存在文件~/.vimrc中(Windows下是C:\Users\yourname \_vimrc)。VIM除了自身可配置项外,还可插件扩展。VIM的插件一般用vundle或vim-plug来管理,但我力求简单,不打算装太...