MySQL的日志管理,备份及恢复

news2024/11/27 12:29:02

一.MySQL 日志管理

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

MySQL 的日志配置文件为/etc/my.cnf ,里面有个[mysqld]

修改配置文件:

vim /etc/my.cnf
[mysqld]

1、错误日志

错误日志,用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启
log-error=/usr/local/mysql/data/mysql_error.log #指定日志的保存位置和文件名

2、通用查询日志

通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

3、二进制日志

二进制日志(binlog),用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启
log-bin=mysql-bin #也可以 log_bin=mysql-bin

4、慢查询日志

##慢查询日志,用来记录所有执行时间超过long_query_time秒的语句,可以找到哪些查询语句执行时间长,以便于优化,默认是关闭的
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5 #设置超过5秒执行的语句被记录,缺省时为10秒

systemctl restart mysqld

mysql -u root -p

5、查看日志

show variables like 'general%'; #查看通用查询日志是否开启

show variables like 'log_bin%'; #查看二进制日志是否开启

show variables like '%slow%'; #查看慢查询日功能是否开启
show variables like 'long_query_time'; #查看慢查询时间设置

set global show_query_log=ON; #在数据库中设置开启慢查询的方法

6、实例操作

6.1 修改配置文件并重启服务

6.2 查询日志

6.3 开启以及关闭慢查询的方法

二、数据库备份的重要性与分类

1、数据备份的重要性

• 备份的主要目的是灾难恢复

• 在生产环境中,数据的安全性至关重要

• 任何数据的丢失都可能产生严重的后果

造成数据丢失的原因:

♢程序错误

♢人为操作错误

♢运算错误

♢磁盘故障

♢不可控因素

2、从物理与逻辑的角度,备份分为:

• 物理备份: 对数据库操作系统的物理文件(如数据文件、日志文件等)的备份

• 逻辑备份:对数据库逻辑组件(如:表等数据库对象)的备份

♢ 物理备份方法:

▫ 冷备份(脱机备份):是在关闭数据库的时候进行的

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

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

3、从数据库的备份策略角度,备份可分为:

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

• 差异备份:备份自从上次完全备份之后被修改过的文件

• 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份

三、常见的备份方法

1、物理冷备

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

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

2、专用备份工具mydump或mysqlhotcopy

• myaqldump常用的逻辑备份工具

• mysqlhotcopy仅拥有备份MyISM和ARCHIVE表

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

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

4、第三方工具备份

• 免费MySQL热备份软件Percona XtraBackup

四、MySQL完全备份

1、完全备份的概念

是对整个数据库,数据库结构和文件结构的备份

保存的是备份完成时刻的数据库

是差异备份与增量备份的基础

2、优点

• 备份与恢复操作简单方便

3、缺点

• 数据存在大量的重复

• 占用大量的备份空间

• 备份与恢复时间长

4、数据库完全备份分类

4.1 物理冷备份与恢复

• 关闭MySQL数据库

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

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

4.2 mysqldump备份与恢复

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

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

• 使用命令mysql导入备份的数据

六、MySQL增量备份

1、使用mysqldump进行完全备份存在的问题

• 备份数据中有重复数据

• 备份时间与恢复时间过长

2、增量备份的概念

是自上一次备份后增加/变化的文件或者内容

3、增量备份的特点

• 没有重复数据,备份不大,时间短

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

4、增量备份的方法

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

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

5、MySQL二进制日志对备份的意义

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

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

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

6、MySQL数据库增量恢复

6.1 一般恢复

• 将所有备份的二进制日志内容全部恢复

6.2 基于位置恢复

• 数据库在某一时间点可能既有错误的操作也有正确的操作

• 可以基于精准的位置跳过错误的操作

6.3 基于时间点恢复

• 跳过某个发生错误的时间点实现数据恢复

七、MySQL 完全备份与恢复

InnoDB存储引擎的数据库在磁盘上存储成三个文件:

• db.opt(表属性文件)
• 表名.frm(表结构文件)
• 表名.ibd(表数据文件)

1、物理冷备份与恢复

systemctl stop mysqld
yum -y install xz
 
cd /usr/local/mysql
#压缩备份
tar Jcvf mysql_all_$(date +%F).tar.xz ./data
#解压恢复
tar Jxvf /opt/mysql_all_2022-5-29.tar.xz

1.1 备份data目录

1.2 删除数据库learn,测试备份能否恢复

2、mysqldump 备份与恢复

2.1 完全备份一个或多个完整的库(包括其中所有的表)

mysqldump -u root -p[密码] --databases 库名1 [库名2] … > /备份路径/备份文件名.sql #导出的就是数据库脚本文件

例:

mysqldump -u root -p --databases learn > /opt/mysql_bak/learn.sql
mysqldump -u root -p --databases learn bbs > /opt/mysql_bak/learn-bbs.sql


  

2.2 完全备份 MySQL 服务器中所有的库

mysqldump -u root -p[密码] --all-databases > /备份路径/备份文件名.sql

例:

mysqldump -u root -p --all-databases > /opt/mysql_bak/all.sql  

2.3 完全备份指定库中的部分表

mysqldump -u root -p[密码] 库名 [表名1] [表名2] … > /备份路径/备份文件名.sql

例:

mysqldump -u root -p [-d] learn test1 > /opt/mysql_bak/learn_test1.sql   

#使用“-d”选项,说明只保存数据库的表结构

#不使用“-d”选项,说明表数据也进行备份

2.4 查看备份文件

grep -v "^--" /opt/mysql_bak/learn_test1.sql  | grep -v "^/" | grep -v "^$"

2.5 开启服务

systemctl start mysqld


  

2.6 恢复数据库

mysql -u root -p -e 'drop database learn;'
#“-e”选项,用于指定连接 MySQL 后执行的命令,命令执行完后自动退出
mysql -u root -p -e 'SHOW DATABASES;'
 
mysql -u root -p < /opt/mysql_bak/learn.sql
mysql -u root -p -e 'SHOW DATABASES;'


 

2.7 恢复数据表

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

mysqldump -u root -p learn test4 > /opt/mysql_bak/learn_test4.sql
 
mysql -u root -p -e 'drop table learn.test4;'
mysql -u root -p -e 'show tables from learn;'
 
mysql -u root -p bbc < /opt/mysql_bak/learn_test4.sql
mysql -u root -p -e 'show tables from learn;'


 

八、MySQL 增量备份与恢复

1、MySQL 增量备份

1.1、开启二进制日志功能

vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED   指定二进制日志(binlog)的记录格式为 MIXED
server-id = 1  

#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT

只要重启服务就会生成二进制文件

systemctl restart mysqld
ls -l /usr/local/mysql/data/mysql-bin.*  

1.2、可每周对数据库或表进行完全备份

mysqldump -u root -p bbc test4 > /opt/learn_test4_$(date +%F).sql;
mysqldump -u root -p --all-databases> /opt/all_$(date +%F).sql;

详细步骤见上个章节

1.3、可每天进行增量备份操作,生成新的二进制日志文件

mysqladmin -u root -p flush-logs;

1.4、插入新数据,以模拟数据的增加或变更

1.5、再次生成新的二进制日志文件

mysqladmin -u root -p flush-logs;   

1.6、查看二进制日志文件的内容

cp /usr/local/mysql/data/mysql-bin.000004 /opt/mysql_bak
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql_bak/mysql-bin.000004 

虽然生成新的文件时000005,但所更改的记录保存在000004
#--base64-output=decode-rows:使用64位编码机制去解码并按行读取
#-v:显示详细内容

2、MySQL 增量恢复

2.1.一般恢复

(1)模拟丢失更改的数据的恢复步骤

use learn;
delete from test4 where id=5;
delete from test4 where id=6;
 
mysqlbinlog --no-defaults /opt/mysql_bak/mysql-bin.000004 | mysql -u root -p


  

2.2.断点恢复

mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000005 #查看二进制日志文件

例:

# at 300
#220529 23:35:19 server id 1  end_log_pos 417 CRC32 0x1bf14e60  Query   thread_id=12    exec_time=0   error_code=0
use `learn`/*!*/;
SET TIMESTAMP=1653838519/*!*/;
insert into test4 values(2,'zhangsan',27)
/*!*/;
# at 417
#220529 23:35:19 server id 1  end_log_pos 448 CRC32 0xa5be4a31  Xid = 899
COMMIT/*!*/;
# at 448
#220529 23:35:22 server id 1  end_log_pos 513 CRC32 0x6692e85f  Anonymous_GTID  last_committed=1      sequence_number=2       rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 513
#220529 23:35:22 server id 1  end_log_pos 594 CRC32 0xc07f09bf  Query   thread_id=12    exec_time=0   error_code=0
SET TIMESTAMP=1653838522/*!*/;
BEGIN
/*!*/;
# at 594
#220529 23:35:22 server id 1  end_log_pos 709 CRC32 0xaede60a8  Query   thread_id=12    exec_time=0   error_code=0
SET TIMESTAMP=1653838522/*!*/;
insert into test4 values(3,'wangwu',11)
/*!*/;
# at 709
#220529 23:35:22 server id 1  end_log_pos 740 CRC32 0x0b367eab  Xid = 900
COMMIT/*!*/;
# at 740
#220529 23:35:24 server id 1  end_log_pos 805 CRC32 0x1069ce61  Anonymous_GTID  last_committed=2      sequence_number=3       rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 805
#220529 23:35:24 server id 1  end_log_pos 886 CRC32 0xcfd5f910  Query   thread_id=12    exec_time=0   error_code=0
SET TIMESTAMP=1653838524/*!*/;
BEGIN
/*!*/;
# at 886
#220529 23:35:24 server id 1  end_log_pos 999 CRC32 0x248330a3  Query   thread_id=12    exec_time=0   error_code=0
SET TIMESTAMP=1653838524/*!*/;
insert into test4 values(4,'lala',18)
/*!*/;


 

(1)基于位置恢复

#仅恢复到操作 ID 为“2”之前的数据,即不恢复“3”的数据
mysqlbinlog --no-defaults --stop-position='594' mysql-bin.00005 | mysql -uroot -p

#仅恢复“4”的数据,跳过“3”的数据恢复
mysqlbinlog --no-defaults --start-position='831681' /opt/mysql-bin.000009 | mysql -uroot -p

(2)基于时间点恢复

#仅恢复到 23∶35∶22 之前的数据,即不恢复“3”的数据
mysqlbinlog --no-defaults --stop-datetime='2022-05-29 23∶35∶22' mysql-bin.000005 |mysql -uroot -p

#仅恢复“4”的数据,跳过“3”的数据恢复
mysqlbinlog --no-defaults--start-datetime='2022-05-29 23∶35∶24' mysql-bin.000005 |mysql -uroot -p

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatGPT免费站点分享

下面的应该都能用&#xff0c;试试吧... ChatGPT是一种人工智能聊天机器人&#xff0c;能够生成虚拟语言和交互回复。使用ChatGPT&#xff0c;您可以与机器人进行真实的交互&#xff0c;让机器人根据您提出的问题或请求来生成回复。但是&#xff0c;在使用ChatGPT时&#xff0…

IOS上传到App Store教程

引言 大家都知道开发APP包含安卓和IOS,而安卓申请商家需要在各大厂家的开发者中心进行上传,比如华为、小米、魅族等等开发者中心。 而苹果只有一个官网&#xff0c;但是苹果要上传IPA&#xff08;苹果的安装包&#xff09;需要使用mac电脑进行上传&#xff0c;而我平时用的win…

vue3(setup语法糖)+typescript+echarts5大屏可视化项目(底部附源码地址)

最近在学习echarts5想结合着自己所学的vue3ts结合起来做个demo, 效果图如下: 登录页 首页: 每个模块支持放大全屏的功能 踩坑: echarts实例化不建议使用ref,echarts内部机制导致的在main.ts中将echarts挂载到app的实例上 let app createApp(App) app.config.globalPrope…

企业战略管理:精要

一、企业战略管理的概念与流派 国内外学者对企业战略和企业战略管理的各种理解— 安索夫&#xff1a;企业在确定战略前&#xff0c;应该先确定自己的经营性质安德鲁斯&#xff1a;企业战略管理是一个决策模式&#xff0c;决定企业的目标&#xff0c;提出实现目标的方针和计划&…

新能源 石油化工 HJL-98/B数字式电流继电器 瞬时动作,过负荷、短路保护 JOSEF约瑟

名称&#xff1a;数字式交流电流继电器&#xff0c;品牌&#xff1a;JOSEF约瑟&#xff0c;型号&#xff1a;HJL-98/B&#xff0c;动作电流&#xff1a;30500mA&#xff0c;工作电压&#xff1a;AC220V/AC380V&#xff0c;安装方式&#xff1a;柜内导轨&#xff0c;零序孔径&am…

基于STM32F103C8T6的物联网温湿度光照烟雾监测系统

1、系统组成&#xff1a;STM32F103C8T6最小系统、S8050三极管、有源高电平触发蜂鸣器、ESP8266_01S模块、DHT11温湿度传感器、0.96OLED显示屏、BH1750光照度传感器、MQ2烟雾浓度传感器、LED灯、碳膜电阻&#xff08;300欧&#xff09;、独立按键、排针若干、杜邦线若干、微信小…

使用docker构建并部署MySQL5.7镜像

使用docker构建并部署MySQL5.7镜像 前言一、docker中部署MySQL主要有哪几种方式&#xff1f;二、CentOS 镜像中构建 MySQL 容器1.编写Dockerfile2.初始化MySQL 三、MySQL 官方镜像中构建容器1. 拉取官方镜像2. 运行镜像3. 配置镜像外网访问 四、MySQL 容器初始化脚本1. 将sql文…

一不小心,你就掉进了Spring延迟初始化的坑!

前言 书接上回&#xff0c;之前我们有聊到 Spring 的延迟初始化机制&#xff0c;是什么&#xff0c;有什么作用。今天跟各位大佬分享一下&#xff0c;我在使用 Spring 延迟初始化踩过的一些坑。 List<坑> 坑列表 new ArrayList<>(2); 首先&#xff0c;让我们回顾…

STM32-单通道ADC采集(DMA读取)实验

关于ADC的一些原理和实验我们已经有了2篇笔记&#xff0c;链接如下&#xff1a; 关于ADC的笔记1_Mr_rustylake的博客-CSDN博客 STM32-ADC单通道采集实验_Mr_rustylake的博客-CSDN博客 实验要求&#xff1a;通过ADC1通道1&#xff08;PA1&#xff09;采集电位器的电压&#x…

专升本资料怎么找?可以通过哪些渠道找到?

统招专升本专科生每个人只有一次考试的机会&#xff0c;近年来越来越多的人注意到学历的重要性&#xff0c;报考的人也越来越多&#xff0c;竞争激烈。 所以想要成功上岸&#xff0c;光靠靠努力可不行&#xff0c;拥有一个好的复习资料你就成功了一半。 随着粉丝量越来越大&am…

让思维结构化: 美团四大名著之 <金字塔原理>

目录 什么是金字塔原理 纵向结构 横向结构 如何构建金字塔模型 纵向结构 自上而下法 自下而上法 总结 自下而上思考 自上而下表达&#xff0c;结论先行 横向结构 时间顺序 空间顺序 重要性顺序 演绎推理 SCQA方法 序言&#xff08;前言/引言&#xff09;&#x…

如何降低OBS推流直播延迟的问题?

使用推流OBS工具进行直播推流操作时&#xff0c;默认的推流关键帧间隔是10秒&#xff0c;而客户端在播放时&#xff0c;通常需要3个关键帧的数据才会开始播放&#xff0c;为了实现更低的延迟&#xff0c;您需要在推流时将关键帧的间隔设置的小一些&#xff0c;您可以逐步调整这…

Netty(4)

Netty 文章目录 Netty6 Netty 核心模块6.1 EventLoopGroup 与 NioEventLoopGroup6.2 Bootstrap/ServerBootstrap6.3 ChannelPipline、ChannelHandler、ChannelHandlerContext6.3.1 三者的关系6.3.2 ChannelPipline6.3.3 ChannelHandler6.3.4 ChannelHandlerContext6.3.5 三者创…

微服务---Redis实用篇-黑马头条项目-优惠卷秒杀功能(使用java阻塞队列对秒杀进行异步优化)

Redis实用篇-黑马头条项目-优惠卷秒杀功能(使用java阻塞队列对秒杀进行异步优化) 1、秒杀优化 1.1 秒杀优化-异步秒杀思路 我们来回顾一下下单流程 当用户发起请求&#xff0c;此时会请求nginx&#xff0c;nginx会访问到tomcat&#xff0c;而tomcat中的程序&#xff0c;会进…

LeetCode_Day1 | 关于数组双指针及二分法查询

LeetCode_数组 704.二分查找1.题目描述2. 做题前要想明白什么3. 左闭右闭代码4.左闭右开代码5. 关于中间值溢出问题6. 图解举例(左闭右闭) 27.移除元素1. 题目描述2. 暴力法3. 快慢指针法4. 双向双指针法 704.二分查找 1.题目描述 给定一个 n 个元素有序的&#xff08;升序&a…

15天学习MySQL计划(运维篇)分库分表-监控-第十四天

15天学习MySQL计划分库分表-监控-第十四天 1.介绍 1.问题分析 ​ 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增加&#xff0c;若采用但数据进行数据存储&#xff0c;存在以下性能瓶颈&#xff1a; IO瓶颈&#xff1a;热点数据太多&#xff0c;数…

【2023/05/14】Apple I

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第9天。 Share I cannot choose the best.The best choose me. 译文&#xff1a; 我不能选择那最好的。 是那最好的选择我。 They throw their shadows before them who carry their lantern on thei…

MySQL基础-多表查询

本文介绍MySQL的多表查询 文章目录 多表关系一对多多对多一对一 查询内连接外连接自连接联合查询子查询标量子查询列子查询行子查询表子查询 多表查询案例 多表关系 一对多&#xff08;多对一&#xff09;多对多一对一 一对多 案例&#xff1a;部门与员工 关系&#xff1a;一…

Go Wails Docker图形界面管理工具 (4)

文章目录 1. 前言2. 效果图3. 代码 1. 前言 接上篇&#xff0c;本次添加Docker日志查看功能 2. 效果图 3. 代码 直接调用官方库 app.go func (a *App) Log(ID string) (string, error) {reader, err : Cli.ContainerLogs(context.Background(), ID, types.ContainerLogsOption…

最快鉴别网工能力的方法,就三个字

大家好&#xff0c;我是老杨。 可以投个票&#xff0c;让我了解了解你的近况。 转眼2023年都过去3天了&#xff0c;我这的人事部门又开始找我问招聘画像&#xff0c;每年这时候&#xff0c;我都得头痛一阵子。 从技术转管理之后&#xff0c;最明显的差异&#xff0c;就是从“…