一、MySQL数据备份
1. 数据备份概述
数据备份的主要目的是灾难恢复,也就是当数据库等出现故障导致数据丢失,能够通过备份恢复数据。
数据备份可以分为物理备份和逻辑备份。物理备份,又称为冷备份,需要关闭数据库进行备份;逻辑备份,又称为热备份,不需要关闭数据库。数据备份的策略包括全量备份和增量备份,物理备份只能实现全量备份,而逻辑备份不仅支持全量备份,还支持增量备份。
2. mysqldump命令 – MySQL数据库备份
mysqldump命令是MySQL数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中。是针对数据库和数据表的备份。
# 基本语法
mysqldump [选项]
# 常见用法
mysqldump -u 用户名 -p [密码] 库名 [表名] > 保存文件
- 用户密码可以显示输入,或者交互输入。
- 如果是导出多个数据库或多个数据表,需要使用英文逗号分隔。
常见的选项:
选项 | 功能 |
---|---|
-A | 所有数据库 |
-B | 指定数据库 |
3. 二进制日志备份
MySQL的二进制日志记录了对数据库的更改操作,也就是增、删、改、查等操作,查询操作不会被记录,因此可以通过二进制日志来实现数据的备份。
要实现基于二进制日志的数据备份,需要在MySQL的配置文件my.cnf中开启二进制日志功能。MySQL 8.0版本开始,默认开启二进制文件功能,二进制日志文件的默认前缀是binlog。下面是在my.cnf文件中的基本配置内容:
log-bin=mysql-bin
binlog-format=MIXED
- log-bin:设置二进制日志文件的路径和前缀。默认路径是在MySQL的data目录下。
- binlog-format:设置二进制日志文件的格式。
MySQL二进制日志文件的记录格式:
-
ROW
基于数据行。记录每一行的数据,准确,但是恢复的效率低。
-
STATEMENT
基于SQL语句,按照执行顺序记录SQL语句。高并发的情况下,SQL语句的记录顺序可能出错,导致恢复的数据有所偏差,虽然恢复的效率较高。
-
MIXED
混合模式。正常情况下使用STATEMENT方式记录,高并发的时候会使用ROW的记录方式。
开启后,只要执行的更改操作都会被记录在日志文件中。使用MySQL自带的mysqlbinlog命令,可以解析查看二进制日志文件,结合管道符和重定向符就能够实现数据的恢复。根据二进制日志恢复数据,实际上就是重新执行日志文件中所记录的操作语句。
可以通过mysqlbinlog命令查看日志文件的全文,也可以基于位置或者基于时间查看日志文件的部分内容。因此恢复数据也包括全部恢复、基于位置的断点恢复和基于时间的断点恢复。
MySQL二进制日志文件的主要内容格式如下:
B