mysql备份
侧边栏壁纸
  • 累计撰写 18 篇文章
  • 累计收到 3 条评论

mysql备份

无冕の神
2026-02-03 / 0 评论 / 1 阅读 / 正在检测是否收录...

备份种类

冷备份
数据库状态:备份时数据库完全关闭(离线状态),不接受任何用户访问(读 / 写均被禁止)。
适用场景:
非核心业务系统,可接受长时间停机(如夜间维护窗口)。
数据量较小,备份耗时短的场景。
对备份一致性要求极高(离线状态下数据无变动,天然一致)。

温备份
数据库状态:备份时数据库运行,但仅允许读操作,禁止写操作(或写操作被阻塞 / 延迟)。
适用场景:
可接受短时间写操作中断的业务(如中小型网站的非高峰时段)。
数据量中等,备份耗时可控(通常几分钟到几十分钟)。

热备份
数据库状态:备份时数据库正常运行,允许同时进行读和写操作,几乎不影响业务。
适用场景:
核心业务系统(如电商、金融),要求 7x24 小时不间断运行。
数据量大,无法接受停机或写阻塞的场景。
实际生产中,常结合多种备份方式(如热备份 + 定期冷备份)提高数据安全性。

逻辑备份
基于数据的逻辑结构(如表、记录、字段)进行备份,通过应用程序(如数据库客户端)提取数据并转换为通用格式
(如 SQL 语句、CSV 文件),备份的是 “可读的逻辑内容”。

物理备份
直接对存储数据的物理介质(如磁盘、分区、文件系统)进行复制,备份的是数据的原始二进制形式,不依赖数据库
或应用程序的逻辑结构。

全量备份
指完整备份整个数据集,即一次性复制目标系统中所有需要备份的数据(如整个数据库、文件夹或磁盘),无论数据
是否发生过变化。

增量备份
指仅备份自上一次备份(可以是全量或增量备份)后发生变化的数据,不重复备份未修改的内容。
例如:周一做全量备份,周二仅备份周一到周二新增或修改的文件,周三仅备份周二到周三变化的文件。

musqldump命令

参数    解释
-B:可以同时接多个库名,备份多个库
-A:备份所有的数据库
--triggers:默认启用,除非使用 --skip-triggers,否则触发器会自动备份
-R:用于备份数据库中的存储过程和存储函数,默认情况下,mysqldump 不会备份存储过程和函数。
-F:刷新binlog,在定期备份场景中(如每日全量备份),使每次备份对应一个新的二进制日志起点
-d:用于仅备份数据库的表结构(schema),不包含表中的实际数据
-t:用于仅备份数据库表中的数据(记录),不包含表结构(schema)
-x:是在备份过程中对所有数据库的所有表施加读锁(READ LOCAL),以保证备份数据的一致性
    备份 MyISAM 等不支持事务的存储引擎,若备份时不锁定表,可能导致备份数据不完整
--single-transaction:快照备份
    mysqldump 会先启动一个事务(START TRANSACTION WITH CONSISTENT SNAPSHOT),基于 InnoDB 的多版
        本并发控制(MVCC)机制,创建一个数据的一致性快照
    备份过程中,所有操作都基于这个快照进行,即使其他会话修改了数据,也不会影响备份内容,确保备份文件是
        一个 “时间点一致” 的数据副本
    备份期间不锁定表,其他会话可以正常执行读写操作(INSERT、UPDATE、DELETE 等),对业务影响极小
    备份 InnoDB 存储引擎的表,这是最主要的场景。InnoDB 支持事务和 MVCC,--single-transaction 能完美利用
        这些特性实现 “热备份”(不中断业务)
--master-data:会记录备份时的二进制日志位置,且都会自动触发日志刷新(相当于-F选项),确保日志起点的准确性
    --master-data=1:生成未注释的 CHANGE MASTER TO 命令
    --master-data=2:生成注释掉的 CHANGE MASTER TO 命令,更常用,因为它仅记录信息而不改变数据库状态
    

备份所有数据库
[root@server1 ~]# mysqldump -uroot -p123456 -A > /backup/full.sql

备份单个库
[root@server1 ~]# mysqldump -uroot -p123456 test > /backup/test.sql

备份单个表
[root@server1 ~]# mysqldump -uroot -p123456 world city > /backup/city.sql

备份多个库
[root@server1 ~]# mysqldump -uroot -p123456 -B db01 db02 > /backup/db01_db02.sql

使用gzip压缩备份数据
[root@server1 ~]# mysqldump -B test | gzip> test_db_bak.sql.gz

备份多个表
mysqldump 数据库名 表名1 表名2 … > 备份文件名

常用全量热备份语句
[root@server1 ~]# mysqldump -uroot -p123456 -A -R --triggers --master-data=2 --single-transaction |gzip > /tmp/full_$(date +%F).sql.gz

Xtrabackup安装

安装 Percona 仓库
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm

启用相关仓库
percona-release enable-only tools release

安装适合当前系统的 xtrabackup
yum install -y percona-xtrabackup-24

Xtrabackup:

热备支持
    对 InnoDB 表:备份时无需锁表(FLUSH TABLES WITH READ LOCK仅在备份非 InnoDB 表时短暂生效),
        不影响业务读写,属于真正的热备。
    对 MyISAM/CSV 等非事务表:仍需加读锁(温备),但锁表时间极短(仅复制表文件的瞬间),
        相比原生cp命令锁表备份更友好。

全量备份
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp /backup/full

重新准备一下文件
[root@db01 full]# innobackupex --user=root --password=123 --apply-log /backup/full

将数据目录准备为空的,并且数据库实例是关闭的,进行数据恢复
[root@db01 mysql]# innobackupex --copy-back /backup/full

增量备份
[root@db01 ~]# innobackupex --user=root --password=123 --no-timestamp --incremental --incremental-basedir=/backup/full/ /backup/inc1

0

评论 (0)

取消