备份好数据库你的BOSS会好好疼爱你的

2023-12-26 19:52:46

MySQL的日志管理备份和恢复

数据备份的分类

完全备份与恢复
增量备份与恢复

1 MySQL日志管理

1.1 MySQL配置文件的优化

MySQL的日志默认保存位置为/usr/local/mysql/data
vim /etc/mycnf

[mysql]

log-error=/usr/local/mysql/data/mysql_error.log 指定日志的保存位置和文件名

错误日志,用来记录当MySQL启动、停止或者运行时发生的错误信息,默认已开启。

general_log=ON general_log_file=/usr/local/mysql/data/mysql_general.log

通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的。

log-bin=mysql-bin #也可以 log bin=mysgl-bin

二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新的语句,记录了数据的更改,可用于数据恢复,默认已开启。

slow_query_log=ON slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log long_query_time=5 设置超过5秒执行的语句被记录,缺省时为10秒。

慢查询日志,用来记录所有执行时间超过5秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭的。

1.2 数据库的备份

备份的主要目的是灾难恢复
在生产环境中,数据的安全性至关重要
任何数据的丢失都可能产生严重的后果
造成数据丢失原因
  • 程序错误

  • 认为操作错误

  • 运算错误

  • 磁盘故障

  • 灾难(如火灾、地震)和盗窃

数据库的备份方式

从物理与逻辑的角度,备份可分为

物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份
  • 冷备份(脱机备份):是在关闭数据库的时候进行的

  • 热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件

  • 温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

逻辑备份:对数据库的逻辑组件(如:表等数据库对象)的备份,以SQL语句的形式导出进行备份

1.3 数据库备份的策略

完全备份:每次对数据库进行完整的备份

InnoDB存储引擎的数据库在磁盘上存储成三个文件:db.opt(表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)。

优点:

备份与恢复操作简单方便

缺点:

数据存在大量的重复

占用大量的备份空间

备份与恢复时间长

数据库上云迁移
物理冷备份与恢复:

管理Mysql数据库

使用tar命令直接打包数据库文件夹

直接替换现有的MySQL目录即可

冷迁移
物理冷备:
先关闭数据库

使用tar命令打包备份数据库的数据目录和文件

模拟数据库的数据目录和文件被删除

解压备份的文件和目录恢复数据

mysqldump备份与恢复

MySQL自带的备份工具,可方便实现对MySQL的备份

可以将指定的库、表导出为SQL脚本

使用命mysql导入备份的数据

热迁移
(逻辑热备:mysqldump -u用户名 -p密码 --databases 库1 库2.... >
XXX.sql) 备份一个或多个库和及库中所有的表数据

mysqldump -u用户名 -p密码 --all-databases > XXX.sql 备份所有的库

mysqldump -u用户名 -p密码 库名 表1 表2 > XXX.sql 备份指定库中(一个或者多个表数据)所有的表数据,不包含库对象

查看备份文件

grep -v "^--" /opt/kgc_info1.sql | grep -v "^/" | grep -v "^$"

恢复文件

先登录到数据库,再执行 source XXX.sql (如果sql文件是只备份了表数据的,需要先创建库并use切换库后再执行)

恢复数据库

mysql -u用户名 -p密码 < XXX.sql cat XXX.sql | mysql -u用户名 -p密码

恢复数据表

当备份文件中只包含表的备份,而不包含创建的库的语句时,执行导入操作时必须指定库名,且目标库必须存在。

mysql -u用户名 -p密码 库名 < XXX.sql cat XXX.sql | mysql -u用户名 -p密码

差异备份:备份自从上次完全备份之后更新过的数据
增量备份:只有在上次完全备份或者增量备份后更新的数据才会被备份
特点:

没有重复数据,备份量不大,时间段

恢复需要上次完全备份及完全备份之后所有的增量备份才能恢复,而且要对所有增量备份进行逐个反推恢复

MySQL没有提供直接的增量备份方法

可通过MySQL提供的二进制日志间接实现增量备份
开启二进制日志功能

重启服务并查看是否生成二进制日志文件

对数据库或表进行完全备份
<span style="background-color:#f8f8f8"><span style="color:#333333">mysqldump -u root -p kgc info1 > /opt/kgc_info1_$(date +%F).sql
mysqldump -u root -p --databases kgc > /opt/kgc_$(date +%F).sql</span></span>

刷新重新生成二进制文件

mysqladmin -u用户 -p密码 flush-logs

插入新的数据,模拟数据的增加和变更,刷新二进制日志文件并查看日志文件内容

mysqlbinlog --no--defaults --base64-output=decode-rows -v <二进制文件> (查看二进制日志内容)

--base64-output=decode-rows:使用64位编码机制去解码并按行读取

-v:显示详细内容

一般恢复
模拟丢失更改的数据的恢复步骤
<span style="background-color:#f8f8f8"><span style="color:#333333">use kgc;
delete from info1 where id=3;
delete from info1 where id=4;
mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p</span></span>

mysqlbinlog --no-defaults <二进制文件> | mysql -u用户名 -p密码

模拟丢失所有数据的恢复步骤

断点恢复
查看断点
<span style="background-color:#f8f8f8"><span style="color:#333333">mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000005</span></span>

基于位置点的恢复

mysqlbinlog --no-defaults --start-position='开始位置点' --stop-position=‘结束位置’ <二进制文件> | mysql -u用户名 -p密码

基于时间点恢复

mysqlbinlog --no-defaults --start-datetime=‘开始时间点’ --stop-position=‘结束时间点’ <二进制文件> | mysql -u用户名 -p密码

如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前
如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start
MySQL二进制日志对备份的意义

二进制日志保存了所有更新或者可能更新数据的操作

二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接受到flush logs命令后重新创建新的日志文件

只需定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份

MySQL二进制增量备份脚本

工作中一般以周为周期做一次完全备份,再每天做一次增量备份,以便可以更快更好的做备份恢复

1.4 常见的备份方法

物理冷备

备份时数据库处于关闭状态,直接打包数据库文件

备份速度快,恢复时也是最简单的

专用备份工具mysqldump或mysqlhotcopy

mysqldumo常用的逻辑备份工具(只能备份小的表和数据库)

mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

启用二进制日志进行增量备份

进行增量备份,需要刷新二进制日志

第三方法工具备份

免费的MySQL热备份软件Percona XtraBackup

文章来源:https://blog.csdn.net/2301_76288258/article/details/135228774
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。