Mysql日志管理与备份恢复

news2024/11/28 14:32:08

目录

  • 一、Mysql日志管理
    • 1、日志的分类
      • 1.1 错误日志
      • 1.2 通用查询日志
      • 1.3 二进制日志
      • 1.4 慢查询日志
      • 1.5 配置日志文件
    • 2、日志的查询
  • 二、Mysql备份与分类
    • 1、数据备份的重要性
    • 2、造成数据丢失的原因
    • 3、数据库备份的分类
      • 3.1 从物理与逻辑的角度划分
      • 3.2 从数据库的备份策略角度划分
  • 三、Mysql完全备份
    • 3.1 物理冷备与恢复
    • 3.2 专用备份工具mydump和mysqlhotocopy
      • 3.2-1 完全备份一个或多个完整的库(包括库中的表)
      • 3.2-2 完全备份mysql服务器中的所有库
      • 3.2-3 完全备份指定库中的部分表
      • 3.2-4 Mysql完全备份(使用免交互)
      • 3.2-5 恢复数据表
    • 3.3 Mysql增量备份
      • 3.3-1 开启二进制日志功能
        • 二进制日志(binlog)有三种不同的记录格式:
      • 3.3-2 可每天进行增量备份操作,生成新的二进制日志文件
      • 3.3-3 查看二进制日志文件的内容
    • 3.4 Mysql增量恢复
      • 3.4-1 一般恢复
      • 3.4-2 基于位置恢复
      • 3.4-3 基于时间恢复


一、Mysql日志管理

Mysql的日志默认保存位置为/usr/local/mysql/date,Mysql的日志配置文件为/etc/my.cnf,里面有一个【mysqld】项。
在这里插入图片描述

1、日志的分类

1.1 错误日志

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

vim /etc/my.cnf
log-error=/usr/local/mysql/data/mysql_error.log	

1.2 通用查询日志

用来记录MySQL的所有连接和语句,默认是关闭的

vim /etc/my.cnf
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

1.3 二进制日志

用来记录所有更新了数据或者已经潜在更新了数据的语句,记录了数据的更改,可用于数据恢复,默认已开启

vim /etc/my.cnf
#也可以 log_bin=mysql-bin
log-bin=mysql-bin			

1.4 慢查询日志

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

vim /etc/my.cnf
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5	

1.5 配置日志文件

1. #修改my.cnf配置文件
#错误日志
log-error=/usr/local/mysql/data/mysql_error.log	
#通用查询日志
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
#二进制日志
log-bin=mysql-bin	
#慢查询日志
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5
 
2. #重新mysql服务
systemctl restart mysqld.service

在这里插入图片描述

2、日志的查询

#登入mysql
mysql -u root -p[密码]
 
#查看通用查询日志是否开启
show variables like 'general%';	
 
#查看二进制日志是否开启
show variables like 'log_bin%';									
 
#查看慢查询日功能是否开启
show variables like '%slow%';								
 
#查看慢查询时间设置
show variables like 'long_query_time';						
 
#在数据库中设置开启慢查询的方法
set global slow_query_log=ON;	

在这里插入图片描述
在这里插入图片描述

二、Mysql备份与分类

1、数据备份的重要性

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

2、造成数据丢失的原因

  • 程序错误
  • 人为操作错误
  • 运算错误
  • 磁盘故障
  • 灾难(地震、火灾)和盗窃

3、数据库备份的分类

3.1 从物理与逻辑的角度划分

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

物理备份的方法

  • 冷备份(脱机备份):是在关闭数据库的时候进行的
  • 热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件
  • 温备份:数据库锁定表格(不可写入但是可以读)的状态下进行备份操作

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

3.2 从数据库的备份策略角度划分

  • 完全备份:每次只对数据库进行完整的备份
  • 差异备份:备份自从上次完全备份之后修改的文件
  • 增量备份:只有在上次完全备份或者增量备份后被修改的文件才会被备份

三、Mysql完全备份

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

  • db.opt(表属性文件)
  • 表名.frm(表结构文件)
  • 表名.ibd(表数据文件)
    模拟环境如下:在db_test中有test的表
    在这里插入图片描述

3.1 物理冷备与恢复

备份时数据库处于关闭状态,直接打包数据库文件
备份速度快,恢复时也是最简单的

1. #关闭mysql,备份data目录
systemctl stop mysqld
yum -y install xz
cd /usr/local/mysql
 
#压缩备份data目录
tar Jcvf /opt/mysql_all_$(date +%F).tar.xz data/
 
2. #登录mysql,删除school库 
systemctl start mysqld.service 
mysql -u root -p001122
 
 
3. #解压之前备份的数据库data目录,不用删除原目录,会自动替换
cd /opt
ls
cd /usr/local/mysql
tar jxvf /opt/mysql_all_2023-5-14.tar.xz -C ./
 
4. #重启服务查看被删除的库 
systemctl restart mysqld.service 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 专用备份工具mydump和mysqlhotocopy

mysqldump常用的逻辑备份工具

mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

3.2-1 完全备份一个或多个完整的库(包括库中的表)

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

例:备份一个或者多个库

mysqldump -uroot -p --databases db_test > /opt/mysql_bak/db_test.sql

mysqldump -uroot -p --databases db_test kgc_school > /opt/mysql_bak/kgc_school_test.sql

在这里插入图片描述

3.2-2 完全备份mysql服务器中的所有库

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

例:备份所有的库

mysqldump -uroot -p --all-databases > /opt/mysql_bak/all.sql

在这里插入图片描述

3.2-3 完全备份指定库中的部分表

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

例:备份db_test库中的test和test1表

mysqldump -uroot -p db_test test test1  > /opt/mysql_bak/db_test_test1.sql

cat db_test_test1.sql |grep -v '^/'| grep -v '^$'|grep -v '^-'

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

不使用“-d”选项,说明表数据也进行备份
在这里插入图片描述
在这里插入图片描述

3.2-4 Mysql完全备份(使用免交互)

systemctl start mysqld
 
mysql -u root -p -e 'drop database db_test;'
#“-e”选项,用于指定连接 MySQL 后执行的命令,命令执行完后自动退出
mysql -u root -p -e 'show databases;'
 
#恢复school数据库
mysql -u root -p < /opt/mysql_bak/db_test.sql		
mysql -u root -p -e 'show databases;'

在这里插入图片描述

3.2-5 恢复数据表

当备份文件中只包含表的备份,而不包含创建的库的语句时,执行导入操作时必须指定库名,且目标库必须存在。
mysqldump -uroot -p db_test test test1 > /opt/mysql_bak/db_test_test1.sql

  1. 删除db_test中的test1表
mysql -u root -p -e 'drop table db_test.test;'
mysql -u root -p -e 'show tables from db_test;'
  1. 恢复db_test库中的表
mysql -u root -p db_test < /opt/mysql_bak/db_test_test1.sql
mysql -u root -p -e 'show tables from db_test;'

在这里插入图片描述

3.3 Mysql增量备份

3.3-1 开启二进制日志功能

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

在这里插入图片描述

二进制日志(binlog)有三种不同的记录格式:

STATEMENT(基于SQL语句)

ROW(基于行)

MIXED(混合模式),默认格式是STATEMENT

#只要重启就会自动生成二进制文件
systemctl start mysqld
ls -l /usr/local/mysql/data/mysql-bin.*
测试

在这里插入图片描述

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

mysqladmin -u root -p flush-logs

3.3-3 查看二进制日志文件的内容

cp /usr/local/mysql/data/mysql-bin.000009 /opt/
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000009
#--base64-output=decode-rows:使用64位编码机制去解码并按行读取
#-v:显示详细内容

在这里插入图片描述

3.4 Mysql增量恢复

1、一般恢复

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

2、基于位置恢复

数据库在某一时间点可能既有错误的操作也有正确的操作,可以基于精准的位置跳过错误的操作。

发生错误节点之前的一个节点,上一次正确操作的位置点停止。

3、基于时间点恢复

跳过某个发生错误的时间点来实现数据恢复;在错误的时间点停止,在下一个正确的时间点开始。

3.4-1 一般恢复

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

①.模拟丢失更改的数据的恢复

use db_test;
delete from test where id=1;

 
mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000009 | mysql -u root -p

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
②.模拟丢失所有的数据恢复

use db_test;
drop table test;
 
mysql -u root -p db_test < /opt/mysql_bak/db_test_test1.sql
 mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000010 | mysql -u root -p

在这里插入图片描述
在这里插入图片描述

3.4-2 基于位置恢复

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

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

发生错误节点之前的一个节点,上一次正确操作的位置点停止

# 刷新生成新的二进制日志文件
mysqladmin -u root -p flush-logs 	
# 进入到data目录
cd /usr/local/mysql/data	
#查看二进制日志文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000011

在这里插入图片描述

3.4-3 基于时间恢复

仅恢复最后一条数据,跳过前面的数据

mysqlbinlog --no-defaults --start-datetime='2023-05-14 16:00:59' /usr/local/mysql/data/mysql-bin.000008 |mysql -uroot -p

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

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

相关文章

【配电网重构】基于SOE算法的多时段随机配电网重构方法【IEEE33节点、IEEE84节点】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

go语言channel(管道)和 select的结合使用

给个小建议&#xff1a;如果是初学者&#xff0c;建议把基础知识朗读一遍&#xff0c;有个大概印象&#xff0c;后面思考多了&#xff0c;就会“由量变达到质变”&#xff0c;从而有所顿悟。 目录 一、基础知识二、例子11、管道ch的缓冲区为10&#xff0c;select中有case读取管…

基于stm32物联网开发板(2)--LCD屏幕

基于stm32物联网开发板(2)–LCD屏幕 LCD应用展示&#xff1a; LCD屏幕应用 1.概述 屏幕尺寸为1.3寸&#xff0c;分辨率240*240&#xff0c;颜色格式RGB565&#xff0c;驱动IC&#xff1a;ST7789VW&#xff1b;超大可视角度:大于160(显示屏中可视角度最大的一种屏幕)&#xff1…

《深入理解Java虚拟机》JVM是怎么实现方法的动态调用的?方法句柄

《深入理解Java虚拟机》JVM是怎么实现方法的动态调用的&#xff1f;方法句柄 1.方法句柄出现的原因 某个国家举办了跑步比赛&#xff0c;有亚洲&#xff0c;欧洲还是非洲人参赛,但是有机器人也参赛了。机器人不属于人类阵营&#xff0c;怎么能让机器人也参加进来呢&#xff1…

Java递归生成树

1.建菜单表 CREATE TABLE t_menu ( id int(11) NOT NULL AUTO_INCREMENT, pid int(11) NOT NULL, name varchar(255) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT11 DEFAULT CHARSETutf8mb4; 2.造一些数据 注意&#xff1a;根节点的pid0&#xff0c…

利用Rsoft开展弯曲光纤仿真分析

Rsoft是一款优秀的光学仿真软件&#xff0c;里面集成了多个模块&#xff0c;其中BPM模块利用光束传播法&#xff08;Beam Propagation Method&#xff09;&#xff0c;能够进行多种类型光器件的仿真&#xff0c;比如分束器、光纤等。这次&#xff0c;利用该模块展示如何开展光纤…

SpringSecurity简单的练手项目(SpringBoot+SpringSecurity+JWT)

文章目录 一、项目介绍二、SpringSecurity简介SpringSecurity中的几个重要组件&#xff1a;1.SecurityContextHolder&#xff08;class&#xff09;2.SecurityContext&#xff08;Interface&#xff09;3.Authentication&#xff08;Interface&#xff09;4.AuthenticationMana…

Eclipse的介绍与安装

Eclipse简介 Eclipse 是一个开放源代码的&#xff0c;基于 Java 的可扩展开发平台。Eclipse官方版是一个集成开发环境(IDE)&#xff0c;可以通过安装不同的插件实现对其它计算机语言编辑开发&#xff0c;如C、Php、Python等等。 Eclipse的下载 下载时需要访问网址 http://…

Android系统原理性问题分析 - RefBase、sp、wp 分析

声明 在Android系统中经常会遇到一些系统原理性的问题&#xff0c;在此专栏中集中来讨论下。接触Android系统&#xff0c;遇到很多sp、wp相关问题&#xff0c;此篇分析Android系统内的智能指针问题。此篇参考一些博客和书籍&#xff0c;代码基于Android 9.0.0&#xff0c;不方…

3D点云的基本操作(基于PCL编程)

知识储备 右手系 右手&#xff0c;拇指&#xff0c;食指&#xff0c;中指&#xff0c;分别是x,y,z的正方向。左手系则同理。 旋转矩阵 本质&#xff1a;两个坐标系之间的旋转关系。 用途&#xff1a;旋转点云。 原理&#xff1a;设传感器的坐标系为O1X1Y1Z1&#xff0c;设…

mysql 分组语句测试

建表 建表语句&#xff1a; CREATE TABLE student( id int not null, name char(12), sex char(1) ); 预置数据 insert into student values(1, wh, 1); insert into student values(2, wh1, 0); insert into student values(3, zyx, 0); commit; 增加字段 alt…

设计模式的分类、意图和适用性

文章目录 引言分类创建型设计模式Factory Method&#xff08;工厂方法&#xff09;Abstract Factory&#xff08;抽象工厂&#xff09;Builder&#xff08;生成器&#xff09;Prototype&#xff08;原型&#xff09;Singleton&#xff08;单例&#xff09; 结构型设计模式Adapt…

【二】设计模式~~~创建型模式~~~工厂方法模式(Java)

【学习难度&#xff1a;★★☆☆☆&#xff0c;使用频率&#xff1a;★★★★★】 2.1. 模式动机 现在对该系统进行修改&#xff0c;不再设计一个按钮工厂类来统一负责所有产品的创建&#xff0c;而是将具体按钮的创建过程交给专门的工厂子类去完成&#xff0c;我们先定义一个…

【周末闲谈】超越ChatGPT?科大讯飞星火认知大模型

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录 前言星火名字的由来科大讯飞星火落地应用演示赶超ChatGPT的底气在哪里?“硬…

洗地机哪个品牌好?好用的家用洗地机分享

洗地机采用高效吸力和清洗方式&#xff0c;可快速清除地面污渍和痕迹&#xff0c;让地面干净整洁&#xff0c;提高使用者的生活品质和舒适度。洗地机不仅清洁效果好&#xff0c;而且操作简单&#xff0c;大多采用一键启动和一键停止&#xff0c;方便快捷&#xff0c;节省时间和…

MySQL备份工具之xtrabackup

文章目录 MySQL备份工具之xtrabackup一、xtrabackup的介绍1、xtrabackup 版本兼容性2、Xtrabackup优点3、Xtrabackup备份原理 二、安装mysql5.7.x1、yum方式安装mysql5.7.x的方式2、下载 xtrabackup2.4 版本3、xtrabackup2.4备份mysql5.7.x数据3.1、innobackupex全备3.2、模拟数…

瑞吉外卖 - 完善后台系统登陆功能(5)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

北邮22信通:电子电路实验:分享一个存放零散电阻的小方法

北邮22信通一枚~ 很高兴以一个新身份和大家见面&#xff01; 有关电子电路实验的新专栏即将开启&#xff0c;会尽量分享一些实验报告方面的文章&#xff0c;大家敬请期待~ 这篇文章想和大家分享困扰小编好久的问题的解决方法&#xff01;同时也就作为专栏开启的引子啦~ 事…

DJI A3飞控 遥控器信号中断 会导致什么问题?

DJI A3飞控 遥控器信号中断 会导致什么问题&#xff1f; 在使用DJI A3 飞控的过程中&#xff0c;希望用OSDK完成自动化的任务。 DJI A3要求必须连接遥控器&#xff0c;可以是大疆Lightbridge的遥控器&#xff0c;也可以是SBUS协议的遥控器&#xff0c;比如航模的支持SBUS协议的…

【历史上的今天】4 月 17 日:Turbo Pascal 2.0 发布;PlayStation 遭受攻击;搜狐李善友辞职

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 17 日&#xff0c;在 1790 年的今天&#xff0c;电学奠基人富兰克林逝世。美国的杰出发明家本杰明富兰克林从 1746 年开始研究电的现象&#xff0c;通过反…