Mysql数据库的备份和恢复及日志管理

一、数据备份概述

1.1 备份的分类

完全备份:整个数据库完整地进行备份
增量备份:在完全备份的基础之上,对后续新增的内容进行备份

冷备份:关机备份,停止mysql服务,然后进行备份
热备份:开机备份,无需关闭mysql服务,然后进行备份

物理备份:对数据库系统的物理文件(数据文件、日志文件)进行备份
逻辑备份:只是对数据库的逻辑组件进行备份(表结构),以sql语句的形式,把库、表机构、表数据进行备份保存 (直接在数据库系统中删除全部文件,逻辑备份无法恢复)

1.2 数据需要备份的原因

1、在生产环境中,数据的安全至关重要,任何数据的丢失都会产生非常严重的后果
2、数据为何丢失?
程序操作、运算错误、磁盘故障、不可预期的时间、人为操作

二、数据备份操作

2.1 物理冷备份

物理备份:一般采用完全备份,对整个数据库进行完整的打包备份
优点:操作简单
缺点:占用空间太大、备份和恢复的时间很长、需要暂停数据库服务避免有新的数据进入被覆盖,也可能导致恢复失败

创建两个新的库pup、pup1:
create database pup;
create database pup1;pup、pup1创建相同表info1并插入相同数据:create table if not exists info1 (
id int(4) primary key,
name char(5),
hobby char(5)
);

[root@mysql1 ~]# systemctl stop mysqld
[root@mysql1 ~]# cd /usr/local/mysql/
[root@mysql1 mysql]# yum -y install xz
[root@mysql1 mysql]# tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data
[root@mysql1 mysql]# cd /opt
[root@mysql1 opt]# tar Jxvf mysql_all_2023-11-06.tar.xz 
[root@mysql1 opt]# cd /usr/local/mysql/
[root@mysql1 mysql]# rm -rf data
[root@mysql1 mysql]# cd /opt/usr/local/mysql/
[root@mysql1 mysql]# cp -a data/ /usr/local/mysql/
[root@mysql1 mysql]# systemctl restart mysqld.service 

2.2 主机间数据迁移

mysql2虚拟机:
[root@mysql2 mysql]# cd /usr/local/mysql/
[root@mysql2 mysql]# rm -rf data/
[root@mysql2 mysql]# scp -r root@20.0.0.81:/opt/usr/local/mysql/data /opt
[root@mysql2 mysql]# cd /opt
[root@mysql2 opt]# cp -a data/ /usr/local/mysql/
[root@mysql2 opt]# systemctl restart mysqld.service
[root@mysql2 opt]# cd /usr/local/mysql/data/
[root@mysql2 data]# chown -R mysql.mysql pup pup1

2.3 逻辑热备份

mysqldump:Mysql自带的备份文件的命令
特点:方便、简单,但是只能基于逻辑上的表结构和表数据恢复
物理删除之后再用逻辑恢复会报错,也可以作为数据迁移
占用大空间,比较物理备份相对来说占的空间要小得多

Mysql自带备份工具:mysqldump备份一个库:mysqldump -u root -p --databases 库名 > /opt/备份名.sql (名称自定义,要以.sql结尾)
备份多个库:mysqldump -u root -p --databases 库名1 库名2 > /opt/备份名.sql
备份所有库:mysqldump -u root -p --all-databases > /opt/备份名.sql
(只是逻辑意义上)

备份恢复一个库 

[root@mysql1 ~]# systemctl restart mysqld.service 
[root@mysql1 ~]# netstat -antp | grep 3306
[root@mysql1 ~]# mysqldump -u root -p --databases pup > /opt/pup.sql
[root@mysql1 ~]# mysql -u root -p -e 'drop database pup;'
#-e:指定连接库,执行命令后即刻退出
#只能逻辑删除,物理删除/usr/local/mysql/data目录下的库文件无法恢复
[root@mysql1 ~]# mysql -u root -p < /opt/pup.sql 

 备份恢复多个库

[root@mysql1 ~]# systemctl restart mysqld.service 
[root@mysql1 ~]# netstat -antp | grep 3306
[root@mysql1 ~]# mysqldump -u root -p --databases pup pup1 > /opt/pup+pup1.sql
[root@mysql1 ~]# mysql -u root -p -e 'drop database pup;'
[root@mysql1 ~]# mysql -u root -p -e 'drop database pup1;'
[root@mysql1 ~]# mysql -u root -p < /opt/pup+pup1.sql 

备份恢复指定库指定表

备份表info1:
[root@mysql1 data]# mysqldump -u root -p pup info1 > /opt/pup_info1.sql
[root@mysql1 data]# mysql -u root -p -e 'drop table pup.info1;'

恢复:
[root@mysql1 data]# mysql -u root -p pup < /opt/pup_info1.sql

恢复时,不同的库也可以读取备份内容:
[root@mysql1 data]# mysql -u root -p pup1 < /opt/pup_info1.sql

备份恢复指定库多个表

 pup库新建表info2

将表info1、info2备份在一个文件中:
[root@mysql1 data]# mysqldump -u root -p pup info1 info2 > /opt/pup_info1-2.sql
[root@mysql1 data]# mysql -u root -p -e 'drop table pup.info1;' 
[root@mysql1 data]# mysql -u root -p -e 'drop table pup.info2;'

恢复:
[root@mysql1 opt]# mysql -u root -p pup < /opt/pup_info1-2.sql

主机间数据迁移

[root@mysql1 opt]# mysqldump -u root -p --all-databases > /opt/all_databases.sql主机2创建库pup和pup2,pup和主机1中的库重名,以此进行对照

主机2使用主机1的所有库备份信息进行恢复:
[root@mysql2 ~]# scp root@20.0.0.81:/opt/all_databases.sql /opt
[root@mysql2 ~]# mysql -u root -p < /opt/all_databases.sql

结果:

 

结论:
当数据在主机间进行迁移时,有同名的库其数据不会被覆盖,没有的库及其数据会迁移进来

2.4 增量备份

mysqldump也支持增量备份
优点:没有重复数据,备份量小,时间短
缺点:备份恢复时锁表,必然会影响业务,超过10G耗时会比较长,导致服务不可用

Mysql二进制日志记录格式有三种:

  • 1、STATEMENT:基于sql语句 记录修改的sql语句,高并发情况下,记录sql语句时候的顺序可能会出错,恢复数据时可能会导致丢失和误差,效率比较高
  • 2、ROW:基于行 精准记录每一行的数据,准确率高,但是恢复效率低
  • 3、MIXED:既可以根据sql语句也可以根据行 在正常情况下使用STATEMENT,一旦发生高并发,会智能自动切换至ROW模式

实操:

Mysql提供的二进制日志间接地实现增量备份
如何获取此二进制文件?
[root@mysql1 opt]# vim /etc/my.cnf
--插入--
log-bin=mysql-bin
binlog_format=MIXED[root@mysql1 opt]# systemctl restart mysqld.service 

查看备份的二进制日志文件

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001

刷新并创建新的断点 

mysqladmin -u root -p flush-logs

恢复数据

mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p

基于位置点恢复数据

基于位置点来进行恢复,三种方式:
​​​​​​​从某一个点开始,恢复到最后:mysqlbinlog --no-defaults --start-position='位置点' 文件名 | mysql -u root -p从开头恢复到某个位置:mysqlbinlog --no-defaults --stop-position='位置点' 文件名 | mysql -u root -p从指定点恢复到指定结束点:mysqlbinlog --no-defaults --start-position='位置点' --stop-position='位置点' 文件名 | mysql -u root -p

从起始点开始恢复

以插入数据4之前为起点,恢复4、5、6

mysqlbinlog --no-defaults --start-position='296' mysql-bin.000001 | mysql -u root -p

从开头恢复到指点结束点

删除4、5、6,以插入完数据6为终点,恢复4、5、6

mysqlbinlog --no-defaults --stop-position='1096' mysql-bin.000001 | mysql -u root -p

从指定起始点恢复到指定结束点

删除4、5、6,以插入数据5前为起点,插入完数据6为终点,恢复5、6

mysqlbinlog --no-defaults --start-position='610' --stop-position='1096' mysql-bin.000001 | mysql -u root -p

基于时间点恢复数据

从起始时间开始恢复
mysqlbinlog --no-defaults --start-datetime='时间点' 文件 | mysql -u root -p
从开头恢复到指定结束时间
mysqlbinlog --no-defaults --stop-datetime='时间点' 文件 | mysql -u root -p
从指定起始时间恢复到指定结束时间
mysqlbinlog --no-defaults --start-datetime='时间点' --stop-datetime='时间点' 文件名 | mysql -u root -p

三、Mysql日志管理

3.1 记录错误日志

用来记录当MySQL启动、停止或运行时发生的错误信息,默认已开启
vim /etc/my.cnf
--添加--
log-error=/usr/local/mysql/data/mysql_error.log	

3.2 通用日志

用来记录MySQL的所有连接和语句,默认是关闭的vim /etc/my.cnf
--添加--
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log查看通用日志是否开启:
show variables like 'general%'

3.3 二进制日志(binlog)

用来记录所有当MySQL启动、停止或运行时发送的错误信息,默认是关闭的vim /etc/my.cnf
--添加--
log-bin=mysql-bin查看二进制日志是否开启:
show variables like 'log_bin%';

3.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  #修改慢查询时间查看慢查询是否开启:
show variables like '%slow%';
查看慢查询时间:
show variables like 'long_query_time';

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

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

相关文章

java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

go 语言介绍

背景 一直有在零散的时间用go写点代码&#xff0c;正好借着最近比较有时间写东西的契机&#xff0c;给这个看着年轻&#xff0c;实际也已经发展10几年&#xff0c;并在当下众多开发领域都有不可忽视作用的语言做个介绍吧 golang 的起点 golang 的诞生可以说是时代造就了它&a…

Python实现Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换

Python实现Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换 前言前提条件相关介绍实验环境Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换convert_labelme_json_to_txtjsons/000000000009.json代码实现输出结果labels/000000000009.txt convert_txt_to_labelme_…

Docker Compose安装milvus向量数据库单机版-milvus基本操作

目录 安装Ubuntu 22.04 LTS在power shell启动milvus容器安装docker desktop下载yaml文件启动milvus容器Milvus管理软件Attu python连接milvus配置下载wget示例导入必要的模块和类与Milvus数据库建立连接创建名为"hello_milvus"的Milvus数据表插入数据创建索引基于向量…

NLP之Bert多分类实现案例(数据获取与处理)

文章目录 1. 代码解读1.1 代码展示1.2 流程介绍1.3 debug的方式逐行介绍 3. 知识点 1. 代码解读 1.1 代码展示 import json import numpy as np from tqdm import tqdmbert_model "bert-base-chinese"from transformers import AutoTokenizertokenizer AutoToken…

数据结构--前缀树(Trie)

1. 简介 前缀树是一种数据结构&#xff0c;常用来字符搜索。 2. 实现 包含的操作主要是: 加入串搜索串 代码实现&#xff0c;直接用leetcode_208的题解咯。 代码 class Trie { public:Trie():isEnd(false){for ( int i 0; i < 26;i)child[i] nullptr;}~Trie() {fo…

Webpack 中 Plugin 的作用是什么?常用 plugin 有哪些?

说说webpack中常见的Plugin&#xff1f;解决了什么问题&#xff1f;- 题目详情 - 前端面试题宝典 1、plugin 的作用 Plugin 是一种计算机应用程序&#xff0c;它和主应用程序互相交互&#xff0c;以提供特定的功能。 是一种遵循一定规范的应用程序接口编写出来的程序&#…

CSDN每日一题学习训练——Java版(两数相加、二叉树的锯齿形层序遍历、解数独)

版本说明 当前版本号[20231106]。 版本修改说明20231106初版 目录 文章目录 版本说明目录两数相加题目解题思路代码思路补充说明参考代码 二叉树的锯齿形层序遍历题目解题思路代码思路参考代码 解数独题目解题思路代码思路补充说明参考代码 两数相加 题目 给你两个 非空 的…

动态IP和静态IP哪个安全,该怎么选择

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全问题。其中&#xff0c;IP地址作为网络通信中的重要组成部分&#xff0c;也成为了人们关注的焦点。 在IP地址中&#xff0c;动态IP和静态IP是两种不同的分配方式&#xff0c;它们各自具有不同的特点&#xff0c;那么…

论文阅读—— CEASC(cvpr2023)

arxiv&#xff1a;https://arxiv.org/abs/2303.14488 github&#xff1a;https://github.com/Cuogeihong/CEASC 为了进一步减轻SC中的信息损失&#xff0c;使训练过程更加稳定&#xff0c;我们在训练过程中除了稀疏卷积之外&#xff0c;还保持了正常的密集卷积&#xff0c;生成…

基于SSM的社区智慧养老监护管理平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Android---彻底掌握 Handler

Handler 现在几乎是 Android 面试的必问知识点&#xff0c;大多数 Adnroid 工程师都在项目中使用过 Handler。主要场景是子线程完成耗时操作的过程中&#xff0c;通过 Handler 向主线程发送消息 Message&#xff0c;用来刷新 UI 界面。 下面我们来了解 Handler 的发送消息和处…

吃透BGP,永远绕不开这些基础概述,看完再也不怕BGP了!

你们好&#xff0c;我的网工朋友。 总有人在私信里抱怨&#xff0c;BGP实在是太难了&#xff01; 一是这玩意儿本来就很复杂&#xff0c;需要处理大量的路由信息和复杂的算法&#xff1b;再一个是需要你有一定的实战经验才能深入理解运作。 虽然BGP确实有一定难度&#xff0c…

【漏洞复现】Metinfo6.0.0任意文件读取漏洞复现

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现代码审计漏洞点 1.5、深度利用EXP编写 1.6、漏洞挖掘1.7修复建议 1.1、漏洞描述 漏洞名称&#xff1a;MetInfo任意文件…

Node.js |(五)包管理工具 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;概念介绍&#x1f4da;npm&#x1f407;安装npm&#x1f407;基本使用&#x1f407;生产依赖与开发依赖&#x1f407;npm全局安装&#x1f407;npm安装指定包和删除…

【Spring Boot 源码学习】JedisConnectionConfiguration 详解

Spring Boot 源码学习系列 JedisConnectionConfiguration 详解 引言往期内容主要内容1. RedisConnectionFactory1.1 单机连接1.2 集群连接1.3 哨兵连接 2. JedisConnectionConfiguration2.1 RedisConnectionConfiguration2.2 导入自动配置2.3 相关注解介绍2.4 redisConnectionF…

链表面试OJ题(1)

今天讲解两道链表OJ题目。 1.链表的中间节点 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个…

Chromebook文件夹应用新功能

种种迹象表明 Google 旗下的 Chromebooks 近期要有大动作了。根据 Google 团队成员透露&#xff0c;公司计划在 Chrome OS 的资源管理器中新增“Recents”&#xff08;最近使用&#xff09;文件&#xff0c;以便于用户更快找到所需要的文件。 种种迹象表明 Google 旗下的 Chro…

【数据结构】排序算法复杂度 及 稳定性分析 【图文详解】

排序算法总结 前言[ 一 ] 小数据基本排序算法&#xff08;1&#xff09;冒泡排序&#xff08;2&#xff09;直接插入排序 [ 二 ] &#xff08;由基本排序衍生的用作&#xff09;处理大数据处理排序&#xff08;1&#xff09;堆排序&#xff08;2&#xff09;希尔排序 [ 三 ] 大…

unity中移动方案--物理渲染分层

一、三种基本移动方案 unity中的移动分为Transform和Rigidbody以及CharacterController&#xff0c;其中CharacterController功能完善&#xff0c;已经可以避免了穿墙&#xff0c;并实现了贴墙走等情况&#xff0c;需要结合性能考虑选择不同的方式。 1.使用transform,直接修改…