MariaDB在Linux上的备份恢复方法
导读:MariaDB在Linux上的备份恢复方法 一 备份恢复总览与选择 在Linux上,MariaDB常用两类备份方式: 逻辑备份:使用mysqldump导出为SQL脚本,便于跨平台与跨版本迁移,适合中小型库或需要按库/表选择性恢复的场景。...
MariaDB在Linux上的备份恢复方法
一 备份恢复总览与选择
- 在Linux上,MariaDB常用两类备份方式:
- 逻辑备份:使用mysqldump导出为SQL脚本,便于跨平台与跨版本迁移,适合中小型库或需要按库/表选择性恢复的场景。
- 物理备份:使用mariabackup(MariaDB官方热备工具,源自Percona XtraBackup)直接拷贝数据文件,适合大体量、要求高可用与快速恢复的场景。
- 二者对比要点:
- 逻辑备份:输出为文本SQL,可移植性强、在线可备,但备份/恢复速度相对较慢,且默认不包含配置与日志文件。
- 物理备份:文件级拷贝,更紧凑、速度更快,可包含InnoDB日志,通常要求更严格的目录/权限一致性,恢复时要求数据目录为空并做“准备”。
二 使用mysqldump进行逻辑备份与恢复
- 常用备份命令
- 备份单个库:
- mysqldump -u用户名 -p密码 db_name > /path/db.sql
- 备份多个库:
- mysqldump -u用户名 -p密码 --databases db1 db2 > /path/multi.sql
- 备份所有库(含mysql系统库):
- mysqldump -u用户名 -p密码 --all-databases > /path/all.sql
- 压缩备份(节省空间):
- mysqldump -u用户名 -p密码 db_name | gzip > /path/db.sql.gz
- 备份单个库:
- 常用恢复命令
- 恢复单个库(需先建库):
- mysql -u用户名 -p密码 -e “CREATE DATABASE IF NOT EXISTS db_name; ”
- mysql -u用户名 -p密码 db_name < /path/db.sql
- 恢复压缩备份:
- gunzip < /path/db.sql.gz | mysql -u用户名 -p密码 db_name
- 从“所有库”备份中仅恢复某一个库:
- mysql -u用户名 -p密码 db_name < /path/all.sql
- 恢复单个库(需先建库):
- 实用选项与权限
- 一致性/锁表:–single-transaction(InnoDB一致性快照,避免全表锁)、–lock-all-tables(所有库表锁,适合MyISAM/混合)
- 结构/数据:–no-data(仅结构)、–add-drop-table(导入前DROP TABLE)
- 需要的权限:至少具备对目标库的SELECT、SHOW VIEW、TRIGGER权限。
三 使用mariabackup进行物理热备与恢复
- 安装与全量备份
- 安装:yum install -y MariaDB-backup(或对应平台的mariadb-backup包)
- 全量备份:mariabackup --backup --user root --password pwd --target-dir /backup/base
- 增量备份
- 第一次增量(基于全量):mariabackup --backup --user root --password pwd --target-dir /backup/inc1 --incremental-basedir /backup/base
- 第二次增量(基于上一次增量):mariabackup --backup --user root --password pwd --target-dir /backup/inc2 --incremental-basedir /backup/inc1
- 恢复步骤(示例:全量+若干增量)
- 准备全量:mariabackup --prepare --target-dir /backup/base
- 依次“准备”并合并增量:
- mariabackup --prepare --target-dir /backup/base --incremental-dir /backup/inc1
- mariabackup --prepare --target-dir /backup/base --incremental-dir /backup/inc2
- 停止数据库并清空数据目录(务必先备份原数据!),然后拷贝回数据:
- mariabackup --copy-back --target-dir /backup/base
- 修正权限并启动:
- chown -R mysql:mysql /var/lib/mysql
- systemctl start mariadb
- 说明
- 物理恢复要求目标数据目录为空;–prepare阶段会回放redo日志,确保一致性;–copy-back将备份文件复制回数据目录。
四 自动化与定期备份示例
- 示例脚本(按天全量,保留7天,压缩存储)
- 备份脚本 /opt/mysql_backup.sh:
- #!/bin/bash
BACKUP_DIR=“/backup/mariadb”
mkdir -p $BACKUP_DIR
mysqldump -uroot -ppwd --all-databases | gzip > $BACKUP_DIR/full_$(date +%Y%m%d%H%M%S).sql.gz
find $BACKUP_DIR -type f -name “*.sql.gz” -mtime +7 -delete
- #!/bin/bash
- 赋权与定时:
- chmod +x /opt/mysql_backup.sh
- crontab -e 添加:0 2 * * * /opt/mysql_backup.sh
- 备份脚本 /opt/mysql_backup.sh:
- 提示
- 生产环境建议将凭据写入配置文件(如.my.cnf)并使用凭据文件或专用备份账号,避免命令行明文密码;增量备份可按“上次备份目录”自动推导,减少维护成本。
五 实践注意事项与恢复验证
- 一致性选择:InnoDB优先使用**–single-transaction获取一致性快照;MyISAM或需强一致时可用–lock-all-tables**(会阻塞写入)。
- 权限与安全:mysqldump备份账号至少需SELECT/SHOW VIEW/TRIGGER;备份文件含敏感信息,注意传输与存储加密及访问控制。
- 物理恢复要点:恢复前停止MariaDB、备份原数据目录、确保目标目录为空,恢复后chown -R mysql:mysql并启动服务。
- 时间点恢复(PITR):启用二进制日志(在/etc/my.cnf的[mysqld]中设置log_bin并重启),全量/增量备份后,利用mysqlbinlog对binlog进行回放至指定时间点或位置。
- 验证:恢复后登录数据库检查库表数量、数据量、主外键约束与关键业务查询,必要时抽样校验。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MariaDB在Linux上的备份恢复方法
本文地址: https://pptw.com/jishu/775445.html
