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.rhkb.cn/news/183117.html

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

相关文章

记录腾讯云重置密码之后ssh就连不上的踩坑

腾讯云轻量级服务器SSH连不上 解决方案在最后&#xff0c;点我跳转 问题背景&#xff1a; 首先ssh ubuntu用户我是能用xshell带上密钥正常连接的 其次我重置了root密码&#xff0c;自己改了一个root密码&#xff0c;因为我要用root账号使用ftp传输文件 然后重置密码之后&…

有限域的Fast Multiplication和Modular Reduction算法实现

1. 引言 关于有限域的基础知识&#xff0c;可参考&#xff1a; RISC Zero团队2022年11月视频 Intro to Finite Fields: RISC Zero Study Club 有限域几乎是密码学中所有数学的基础。 ZKP证明系统中的所有运算都是基于有限域的&#xff1a; 使用布尔运算的数字电路&#xf…

11.6哈夫曼树

创建哈夫曼树 经过这一步后&#xff0c;树的集合里就有n个叶子结点 不断从树集合里取出两个权重最小的树合并成一个新树&#xff0c;这时候就是两个根节点并成兄弟到一个新的根节点下&#xff0c;这个新的根节点的权重是两个兄弟的权重和&#xff0c;之后再把 每次合并的时…

支持向量机 (SVM):初学者指南

照片由 Unsplash上的 vackground.com提供 一、说明 SVM&#xff08;支持向量机&#xff09;简单而优雅用于分类和回归的监督机器学习方法。该算法试图找到一个超平面&#xff0c;将数据分为不同的类&#xff0c;并具有尽可能最大的边距。本篇我们将介绍如果最大边距不存在的时候…

Bun 1.0.7 版本发布,实现多个 Node.js 兼容改进

导读Bun 是一个集打包工具、转译器和包管理器于一体的 JavaScript 运行时&#xff0c;由 Jarred Sumner 发布了 1.0.7 版本。本次更新实现了对 Node.js 运行时的多项兼容性改进&#xff0c;并修复了近 60 个 bug。 根据发布说明&#xff0c;本版本对 “bun install” 命令进行…

11.Z-Stack协议栈使用

f8wConfig.cfg文件 选择信道、设置PAN ID 选择信道 #define DEFAULT_CHANLIST 0x00000800 DEFAULT_CHANLIST 表明Zigbee模块要工作的网络&#xff0c;当有多个信道参数值进行或操作之后&#xff0c;把结果作为 DEFAULT_CHANLIST值 对于路由器、终端、协调器的意义&#xff1…

二、Hadoop分布式系统基础架构

1、分布式 分布式体系中&#xff0c;会存在众多服务器&#xff0c;会造成混乱等情况。那如何让众多服务器一起工作&#xff0c;高效且不出现问题呢&#xff1f; 2、调度 &#xff08;1&#xff09;架构 在大数据体系中&#xff0c;分布式的调度主要有2类架构模式&#xff1a…

AI:62-基于深度学习的人体CT影像肺癌的识别与分类

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

Docker学习——③

文章目录 1、Docker Registry&#xff08;镜像仓库&#xff09;1.1 什么是 Docker Registry&#xff1f;1.2 镜像仓库分类1.3 镜像仓库工作机制1.4 常用的镜像仓库 2、镜像仓库命令3、镜像命令[部分]4、容器命令[部分]4.1 docker run4.2 docker ps 5、CentOS 搭建一个 nginx 服…

selenium自动化测试入门 —— python unittest单元测试框架

unittest又名PyUnit&#xff0c; Python单元测试框架&#xff08;The Python unit testing framework&#xff09;&#xff0c;简称为PyUnit。自从 Python 2.1 版本后&#xff0c;PyUnit成为 Python标准库的一部分。 为什么需要使用unittest单元测试框架&#xff1f; 当我们写…

CC1101 一款低功耗sub- 1ghz收发器芯片 适用于无线遥控智能家居

产品描述 CC1101是一个低成本的sub- 1ghz收发器,专为极低功耗的无线应用而设计。 该电路主要用于工业、科学和医学)和SRD (Short Range Device)频带,在315,433,868和915兆赫&#xff0c;但可以轻松可编程用于其他操作频率在300-348 MHz、387-464 MHz,以及779-928 MHz频段。射…

数据抽取+dataworks的使用+ADB的应用

一&#xff0c;大数据处理之数据抽取 1&#xff0c;什么是数据抽取 在大数据领域中&#xff0c;数据抽取是指从原始数据源中提取所需的数据子集或特定数据项的过程&#xff0c; 数据抽取是数据预处理的重要步骤&#xff0c;它为后续的数据分析和建模提供了基础。 2&#xff…

暴力递归转动态规划(十三)

题目 给定3个参数&#xff0c;N&#xff0c;M&#xff0c;K 怪兽有N滴血&#xff0c;等着英雄来砍自己 英雄每一次打击&#xff0c;都会让怪兽流失[0~M]的血量 到底流失多少&#xff1f;每一次在[0~M]上等概率的获得一个值 求K次打击之后&#xff0c;英雄把怪兽砍死的概率。 暴…

数据结构:Map和Set(1)

搜索树 概念 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 这棵树的中序遍历结果是有序的 接下来我们来模拟一棵二叉搜索树&#xff0c…

AD9371 官方例程裸机SW 和 HDL配置概述(二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

Electron[3] 基础配置准备和Electron入门案例

1 背景 上一篇文章已经分享了&#xff0c;如何准备Electron的基础环境了。但是博客刚发才一天&#xff0c;就发现有人问问题了。经过实践发现&#xff0c;严格按照作者的博客教程走是不会有问题的&#xff0c;其中包括安装的环境版本等都要一致。因为昨天发的博客&#xff0c;…

使用Jsoup库编写程序

Jsoup库编写的Kotlin网络爬虫程序 kotlin import org.jsoup.Jsoup import org.jsoup.nodes.Document import org.jsoup.nodes.Element import org.jsoup.select.Elements import java.net.HttpURLConnection import java.net.URL fun main(args: Array<String>) { v…

Zephyr-7B-β :类GPT的高速推理LLM

Zephyr 是一系列语言模型&#xff0c;经过训练可以充当有用的助手。 Zephyr-7B-β 是该系列中的第二个模型&#xff0c;是 Mistralai/Mistral-7B-v0.1 的微调版本&#xff0c;使用直接偏好优化 (DPO) 在公开可用的合成数据集上进行训练 。 我们发现&#xff0c;删除这些数据集的…

BIOS开发笔记 - CMOS

CMOS原来指的是一种生产电子电路的工艺,在PC上一般指的是RTC电路单元,因为早期它是由这种工艺生产出来的,所以又把RTC称作了CMOS。 RTC(Real Time Clock)即实时时钟,用于保存记录时间和日期,也可以用来做定时开机功能。RTC靠一组独立的电源给它供电,这样设计的目的就是…

Win系统强制删除文件/文件夹

Win系统强制删除文件/文件夹 前言系统磁盘清理360强制删除NPM删除 前言 Win系统的用户删除文件/文件夹时&#xff0c;可能由于权限问题导致文件无法正常删除&#xff0c;下文介绍解决方案。当常规的删除不起作用时&#xff0c;可使用如下方案进行删除&#xff0c;包含系统磁盘…