MySQL数据库的备份

本文详细介绍了数据库备份的三种主要方法:热备、冷备和温备,以及逻辑备份。热备在数据库运行中进行,不影响操作;冷备在数据库停止时进行,简单易恢复;温备则在运行中备份,但可能影响当前操作。逻辑备份生成可读的SQL文件,适用于升级和迁移,但恢复时间较长。此外,文章还讨论了完全备份、增量备份和日志备份的区别,并提供了mysqldump工具的使用示例和恢复方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据备份的方法来分,可以将备份分为:

备份方法概述
热备(Hot Backup)是指数据库运行中直接备份,对正在运行的数据库操作没有任何的影响
冷备(Cold Backup)是指备份操作是在数据库停止的情况下,这种备份最为简单,一般只需要复制相关的数据库物理文件即可
温备(Warm Backup)备份同样是在数据库运行中进行的,但是会对当前数据库的操作有所影响,如加一个全局锁以保证备份数据的一致性

按照备份后文件的内容来分,备份可以分为:

备份方法概述
逻辑备份逻辑备份中备份出的文件内容是可读的,一般是文本文件。内容一般是由一条条SQL语句,或者实际数据组成。如mysqldump和SELECT * INTO OUTFILE的方法。这类方法的好处是可以观察导出文件的内容,一般适用于数据库的升级、迁移等工作。但其缺点是回复所需要的时间往往较长
裸文件备份指复制数据库的物理文件,既可以是在数据库运行中复制(ibbackup、xtrabackup这类工具),也可以是在数据库停止运行时直接的数据文件复制。这类备份的恢复时间往往较逻辑备份短得多

按照备份数据库的内容来分,备份可以分为:

备份方法概述
完全备份指对数据库进行一个完整的备份
增量备份指在上次完全备份的基础上,对于更改的数据进行备份
日志备份指对MySQL数据库二进制日志的备份,通过对一个完全备份进行二进制日志的重做来完成数据库的point-in-time的恢复工作
冷备

对于InnoDB存储引擎的冷备非常简单,只需要备份MySQL数据库的frm文件,共享表空间文件,独立表空间文件(*.ibd),重做日志文件。另外建议定期备份MySQL数据库的配置文件my.cnf

冷备的优点:
  • 备份简单,只要复制相关文件即可
  • 备份文件易于在不同操作系统,不同MySQL版本上进行恢复
  • 恢复相当简单,只需要把文件恢复到指定位置即可
  • 恢复速度快,不需要执行任何SQL语句,也不需要重建索引
冷备的缺点:
  • InnoDB存储引擎冷备的文件通常比逻辑文件大很多,因为表空间中存放着很多其他数据,如undo段,插入缓冲等信息
  • 冷备也不总是可以轻易的跨平台。操作系统、MySQL版本、文件大小写敏感和浮点数格式都会成为问题
逻辑备份
mysqldump

mysqldump备份工具最初是由Igor Romanenko编写完成,通常用来完成转存数据库的备份及不同数据库之间的移植。
语法:

$ mysqldump [arguments] > file_name
参数作用用例
--all-databases备份所有的数据库$ mysqldump -all-databases > dump.sql
--databases备份指定的数据库$ mysqldump --databases db1 db2 db3 > dump.sql
--single-transaction对某个架构进行备份,在备份开始前,先执行START TRANSACTION命令,以此来获得备份一致性,备份时确保没有其他任何的DDL语句执行,一致性读并不能隔离DDL操作mysqldump --single-transaction test > test_backup.sql
--lock-tables在备份中,依次锁住每个架构下的所有表。当备份时只能对数据库进行读取操作,备份依然可以保证一致性。--lock-tables--single-transaction是互斥的,不能同时使用。该选项是依次对每个架构中的表上锁的,因此只能保证每个架构下表备份的一致性,而不能保证所有架构下表的一致性
--lock-all-tables在备份过程中,对所有架构中的所有表上锁,可以避免--lock-tables不能同时锁住所有表的问题
--add-drop-databaseCREATE DATABASE前先运行DROP DATABASE。这个参数需要和--all-databases或者--database选项一起使用。在默认情况下,导出的文本文件不会有CREATE DATABASE除非指定了这个参数
--master-data[=value]通过该参数产生的备份转存文件主要用来建立一个replication。当value的值为1时,转存文件中记录CHANGE MASTER语句。当value为2时,CHANGE MASTER语句被注释。在默认情况下,value值为空
--master-data会自动忽略--lock-tables选项。如果没有使用--single-transaction选项会自动使用--lock-all-tables选项
--events备份事件调度器
--routines备份存储过程和函数
--triggers备份触发器
--hex-blob将BINARY、VARBINARY、BLOG和BIT列类型被分为十六进制格式。
--tab=path产生TAB分割数据的数据文件。对于每张表mysqldump创建一个包含CREATE TABLE语句的table_name.sql文件,和包含数据的tbl_name.txt文件。可以使用--fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--line-terminated-by=...来改变默认的分隔符、换行符等
--where='where_condition'导出给定条件的数据
SELECT…INTO OUTFILE

语法如下:

SELECT [column 1],[column 2] ...
INTO
OUTFILE 'file_name'
[
    {FIELDS|COLUMNS}
    [TERMINATED BY 'string']
    [[OPTIONALLY] ENCLOSED BY 'char']
    [ESCAPED BY 'char']
]
[
    LINES
    [STARTING BY 'string']
    [TERMINATED BY 'string']
]
FROM TABLE WHERE ...
参数作用
FIELDS[TERMINATED BY 'string']表示每个列的分隔符
[[OPTIONALLY] ENCLOSED BY 'char']表示对于字符串的包含符
[ESCAPED BY 'char']表示转义符
[STARTING BY 'string']表示每行的开始符号
TERMINATED BY 'string'表示每行的结束符号

如果没有指定任何的FIELDS和LINES的选项,则默认使用:

FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n' STARTING BY ''
逻辑备份的恢复

mysqldump的恢复因为备份的文件就是导出的SQL语句,所以只需执行这个文件就可以:

$ mysql -uroot -p < test_backup.sql;
LOAD DATA INFILE

通过SELECT INTO OUTFILE方法导出的数据恢复可以用LOAD DATA INFILE进行导入:

LOAD DATA INTO TABLE a IGNORE 1 LINE '/home/mysql/a.txt'
[REPLACE|IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[
    {FIELDS|COLUMNS}
    [TERMINATED BY 'string']
    [[OPTIONALLY] ENCLOSED BY 'char']
    [ESCAPED BY 'char']
]
[
    LINES
    [STARTING BY 'string']
    [TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name=expr,...]

例:

mysql> load data infile '/home/mysql/a.txt' into table a;

为了加快InnoDB存储引擎的导入,导入过程忽略外键检查,可以使用如下方式:

mysql> SET @@foreign_key_checks=0;
mysql> LOAD DATA INFILE '/home/mysql/a.txt' INTO TABLE a;
mysql> SET @@foreign_key_checks=1;
mysqlimport

mysqlimplort是MySQL提供的一个命令行程序,从本质来说是LOAD DATA INFILE的命令接口:

$ mysqlimport [options] db_name textfile1 [textfile2 ...]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盛者无名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值