Mysql 数据库与恢复

一、备份核心概念与分类

(一)按备份方式划分

  1. 逻辑备份

导出数据库的SQL语句、表结构和数据,生成可读的SQL文件,不直接复制数据文件。

优点:跨平台、跨MySQL版本兼容性强,文件体积小,可读性高,可编辑修改;

缺点:备份与恢复速度较慢,大数据量场景效率低,适合中小型数据库。

代表工具:mysqldump、mysqlpump。

  1. 物理备份

直接复制MySQL的数据文件、日志文件等底层文件,相当于文件镜像拷贝。

优点:备份、恢复速度极快,适合大型数据库和生产环境高并发场景;

缺点:兼容性差,依赖MySQL版本和存储引擎,文件不可直接编辑,需专业工具操作。

代表工具:Percona XtraBackup、mysqlbackup。

(二)按备份状态划分

  1. 冷备份

关闭MySQL服务后进行备份,数据一致性最高,操作简单,但会导致业务停机,生产环境极少使用。

  1. 温备份

数据库运行中备份,会对表加读锁,阻塞数据写入,影响业务正常运行,仅适合低并发场景。

  1. 热备份

数据库正常对外提供服务时备份,无锁或低锁机制,不影响业务读写,是生产环境首选方式。

(三)按备份数据范围划分

  1. 全量备份

备份整个数据库的所有数据和结构,是备份的基础,恢复时只需最新全量文件。

优点:恢复简单快捷;缺点:备份耗时久、占用存储空间大。

  1. 增量备份

仅备份自上一次全量或增量备份后变更的数据,依赖二进制日志(binlog)实现。

优点:备份速度快、占用空间小;缺点:恢复需按顺序叠加全量+增量文件,操作复杂。

  1. 差异备份

备份自上一次全量备份后所有变更的数据,介于全量和增量之间,恢复比增量简单。

二、常用备份工具实操

(一)mysqldump(逻辑备份,官方自带)

  1. 核心参数
  • -u :数据库用户名

  • -p :数据库密码

  • -h :数据库主机地址

  • --databases :指定备份多个数据库

  • --single-transaction :针对InnoDB引擎,实现热备份,保证数据一致性,不锁表

  • --lock-tables=false :关闭表锁,配合InnoDB使用

  • --default-character-set=utf8mb4 :指定字符集

  • > 备份文件路径.sql :导出备份文件

  1. 常用备份命令
  • 备份单个数据库

bash

mysqldump -u root -p --single-transaction --default-character-set=utf8mb4 test_db > /backup/test_db_$(date +%Y%m%d).sql

  • 备份多个数据库

bash

mysqldump -u root -p --single-transaction --databases db1 db2 > /backup/multi_db_$(date +%Y%m%d).sql

  • 备份所有数据库

bash

mysqldump -u root -p --single-transaction --all-databases > /backup/all_db_$(date +%Y%m%d).sql

  • 备份单张表

bash

mysqldump -u root -p --single-transaction test_db test_table > /backup/test_db_test_table_$(date +%Y%m%d).sql

(二)Percona XtraBackup(物理备份,生产推荐)

  1. 核心优势

支持InnoDB热备份,无锁、速度快,支持全量+增量备份,适合大数据量场景。

  1. 全量备份命令

bash

xtrabackup --user=root --password=123456 --backup --target-dir=/backup/full_$(date +%Y%m%d)

  1. 增量备份命令(基于全量备份)

bash

xtrabackup --user=root --password=123456 --backup --incremental-basedir=/backup/full_20240520 --target-dir=/backup/incr_$(date +%Y%m%d)

(三)binlog日志备份(增量备份核心)

binlog是MySQL二进制日志,记录所有数据增删改操作,用于实现时间点恢复(PITR),必须开启。

  1. 开启binlog

修改MySQL配置文件 my.cnf ,添加以下配置后重启服务:

ini

mysqld

log_bin=mysql-bin

binlog_format=ROW

server_id=1

expire_logs_days=7 # 日志自动清理天数

  1. 查看binlog日志

sql

SHOW BINARY LOGS; # 查看所有binlog文件

SHOW MASTER STATUS; # 查看当前正在写入的binlog

  1. 备份binlog日志

bash

cp /var/lib/mysql/mysql-bin.* /backup/binlog/

三、数据库恢复实操

(一)mysqldump备份文件恢复

  1. 命令行恢复

bash

mysql -u root -< /backup/test_db_20240520.sql

  1. MySQL客户端内恢复

sql

USE test_db;

SOURCE /backup/test_db_20240520.sql;

(二)物理备份(XtraBackup)恢复

  1. 准备备份文件(修复数据一致性)

bash

xtrabackup --prepare --target-dir=/backup/full_20240520

  1. 停止MySQL服务,清空数据目录

bash

systemctl stop mysqld

rm -rf /var/lib/mysql/*

  1. 恢复数据

bash

xtrabackup --copy-back --target-dir=/backup/full_20240520

  1. 修改文件权限,启动MySQL

bash

chown -R mysql:mysql /var/lib/mysql

systemctl start mysqld

(三)基于binlog的时间点恢复

  1. 先恢复全量备份,再通过binlog恢复增量数据

  2. 解析binlog日志,定位恢复位置

bash

mysqlbinlog --start-position=107 --stop-position=1000 /var/lib/mysql/mysql-bin.000001 | mysql -u root -p

  1. 按时间点恢复

bash

mysqlbinlog --start-datetime="2024-05-20 10:00:00" --stop-datetime="2024-05-20 18:00:00" /var/lib/mysql/mysql-bin.000001 | mysql -u root -p

四、备份与恢复注意事项

  1. 备份前检查:确认数据库正常运行,InnoDB引擎建议开启 --single-transaction ,避免锁表影响业务。

  2. 备份文件管理:备份文件命名包含日期时间,定期清理过期文件,备份文件需异地存储,防止服务器故障丢失。

  3. 恢复前测试:生产环境恢复前,先在测试环境验证备份文件有效性,避免备份文件损坏导致恢复失败。

  4. 权限控制:备份工具需具备数据库读写权限,恢复后检查文件权限,确保MySQL服务可正常读取数据文件。

  5. binlog安全:binlog日志和全量备份分开存储,定期备份binlog,避免日志损坏无法增量恢复。

  6. 存储引擎适配:MyISAM引擎不支持热备份,备份时需锁表;InnoDB引擎支持无锁热备份,优先使用。

五、生产环境备份策略

  1. 中小型数据库(<50G)

每日凌晨执行全量mysqldump备份,开启binlog日志备份,保留7天备份文件,每周做一次异地备份。

  1. 中大型数据库(50G-200G)

每周一次全量XtraBackup备份,每日一次增量备份,实时备份binlog,实现分钟级数据恢复。

  1. 大型数据库(>200G)

采用全量+增量+binlog组合备份,搭配主从复制,从库执行备份不影响主库业务,备份文件实时同步到远程存储服务器。

六、常见问题排查

  1. mysqldump备份慢:加大 --single-transaction 参数,关闭锁表,避开业务高峰期备份,优化数据库索引。

  2. 恢复失败:检查备份文件是否完整,字符集是否匹配,数据库用户权限是否足够,binlog日志是否完整。

  3. 物理备份恢复后无法启动:检查数据目录权限,确认MySQL版本和备份时一致,清理残留日志文件。

相关推荐
小镇敲码人1 小时前
MySQL事务介绍
android·数据库·mysql·adb
流星白龙3 小时前
【MySQL高阶】16.行结构
android·mysql·adb
kingwebo'sZone15 小时前
在Cent上安装Mysql 8.0的遇到的问题和解决办法
数据库·mysql·adb
流星白龙1 天前
【MySQL高阶】15.MySQL存储结构,页结构
android·mysql·adb
流星白龙1 天前
【MySQL高阶】17.InnoDB 内存结构
数据库·mysql·adb
码云骑士1 天前
Android ADB常用命令
android·adb
流星白龙2 天前
【MySQL高阶】7.MySQL日志
数据库·mysql·adb
流星白龙2 天前
【MySQL高阶】0.MySQL的安装
数据库·mysql·adb
流星白龙2 天前
【MySQL高阶】6.MySQL数据目录,日志
android·mysql·adb
流星白龙2 天前
【MySQL高阶】2.MySQL命令行客户端(2)
android·mysql·adb