【MySQL】数据库之日志管理、备份与恢复

目录

一、MySQL的日志管理

二、MySQL的完全备份与恢复

物理冷备份(完全备份)与恢复

数据库上云迁移的方案?

逻辑热备份(完全备份)与恢复

三、MySQL的增量备份与恢复

1、手动增量备份

2、脚本增量备份

3、增量备份恢复

4、增量备份断点恢复(请看上一篇博客)

第一种:基于位置恢复

第二种:基于时间点恢复

四、总结


一、MySQL的日志管理

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

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

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

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

##慢查询日志,用来记录所有执行时间超过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秒

 

 

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的完全备份与恢复

物理冷备份(完全备份)与恢复

[root@localhost /usr/local/mysql]#systemctl stop mysqld
[root@localhost /usr/local/mysql]#tar cf ~/backup/mysql_backup_$(date +%F).tar.gz ./data/
[root@localhost /usr/local/mysql]#cd -
/root/backup
[root@localhost ~/backup]#ls
mysql_backup_2023-12-26.tar.gz
[root@localhost ~/backup]#scp mysql_backup_2023-12-26.tar.gz  192.168.20.16:~/

[root@localhost ~]#systemctl stop mysqld
[root@localhost ~]#ls
anaconda-ks.cfg  initial-setup-ks.cfg  mysql_backup_2023-12-26.tar.gz  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@localhost ~]#tar xf mysql_backup_2023-12-26.tar.gz 
[root@localhost ~]#ls
anaconda-ks.cfg  data  initial-setup-ks.cfg  mysql_backup_2023-12-26.tar.gz  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@localhost ~]#cd /usr/local/mysql/
[root@localhost /usr/local/mysql]#ls
bin  data  docs  include  lib  LICENSE  man  mysql-test  README  README-test  share  support-files  usr
[root@localhost /usr/local/mysql]#mv data/ data_old
[root@localhost /usr/local/mysql]#mv ~/data/ data
[root@localhost /usr/local/mysql]#ls
bin  data  data_old  docs  include  lib  LICENSE  man  mysql-test  README  README-test  share  support-files  usr
[root@localhost /usr/local/mysql]#systemctl start mysqld
[root@localhost /usr/local/mysql]#mysql -uroot -pabc123

数据库上云迁移的方案?

 方案一:使用脱机冷备份

冷迁移----物理冷备
首先需要关闭数据库服务;
然后用tar对数据库进行打包
再将tar包传给另一台主机
然后将其解压再恢复

方案二:

热迁移---阿里云自带的热迁移工具DTS(数据传输服务)

逻辑热备份(完全备份)与恢复

mysqldump实现逻辑备份
mysqldump -u用户名 -p密码 --databases 库1 [库2 ...] > /存储路径/xxx.sql
##备份库以及库中所有表的表数据及表结构

mysqldump -u用户名 -p密码 --all-databases  > /存储路径/xxx.sql
##备份所有的库以及其表数据

mysqldump -u用户名 -p密码 库名 > /存储路径/xxx.sql
##只备份指定库中的所有表数据,不包含库对象

mysqldump -u用户名 -p密码 库名 表1 [表2 ] > /存储路径/xxx.sql
##备份指定库中的单个或多个表的数据和表结构,不包含库对象

mysqldump -u用户名 -p密码 -d 库名 表1 [表2 ] > /存储路径/xxx.sql
##只备份指定库中的单个或多个表的结构,不包含库对象,也不包含表的数据

方法一:
先登录到数据库,然后使用source +/存储路径/xxx.sql 进行恢复(如果sql文件是只备份了表数据的文件,那么需要先创建库,并use切换库后才能执行该命令)

方法二:
使用sql语句来进行恢复
mysql -u用户名 -p密码 < /存储路径/xxx.sql
cat /存储路径/xxx.sql | mysql -u用户名 -p密码 
##恢复库
mysql -u用户名 -p密码  指定库名 < /存储路径/xxx.sql
cat /存储路径/xxx.sql | mysql -u用户名 -p密码 指定库名 
##恢复库中的表,且需要库是存在的

 

三、MySQL的增量备份与恢复

增量备份是采用的物理二进制日志文件分割来完成增量备份的

二进制日志会定期的分割,比如当文件超过1G 会生成新的日志文件,mysql_bin.后面跟的是索引号,每次生成一个二进制文件,就会在mysql_bin.index文件中添加一个新的文件,mysql_bin.index文件中记录着所有的二进制日志文件的名称

1、手动增量备份

手动增量备份的方式有三种:
第一种:手动刷新
mysqladmin -uroot -pabc123 flush-logs

第二种:重启mysqld服务
systemctl restart mysqld

第三种:二进制日志文件的大小达到1G的时候会进行自动分割
与max_binlog_size大小相关
默认为1073741824字节等于1G

2、脚本增量备份

#!/bin/bash
##增量备份脚本
DIRLOGS=/var/log/mysql
LOGS_HOME=/usr/local/mysql/data
TODAY=$(data +%F)
YESTERDAY=$(date -d '-1 day' +%F)
USER=root
PASSWORD=abc123

#先判断收集备份文件的目录是否存在,不存在则创建目录
[ -d $DIRLOGS ]||mkdir -p $DIRLOGS

##备份二进制日志的索引文件到指定目录并加入时间标记
\cp  $LOGS_HOME/mysql_bin.index $DIRLOGS/mysql_bin.index.$TODAY

#先判断昨天的二进制日志的索引文件是否存在,存在则作为过滤条件过滤出今天需要备份的二进制日志文件名称
if [ -f $DIRLOGS/mysql_bin.index.$YESTERDAY ];then
    BINGLOG=$(cat $DIRLOGS/mysql_bin.index.$TODAY|grep -v $(cat $DIRLOGS/mysql_bin.index.$YESTERDAY)|awk -F/ '{print $2}')
  else
    BINGLOG=$(cat $DIRLOGS/mysql_bin.index.$TODAY|awk -F/ '{print $2}')
fi

##刷新生成新的二进制日志文件,便于收集最新的二进制日志
mysqladmin -u"$USER" -p"$PASSWORD" flush-logs &>/dev/null

##使用for循环,对所有的新产生的binlog文件进行备份
for i in $BINGLOG
do
mv $LOGS_HOME/$i  $DIRLOGS/$i.$TODAY
done

3、增量备份恢复

mysqlbinlog --no-defaults 指定binlog |mysql -u用户名 -p密码 

 

 

4、增量备份断点恢复(请看上一篇博客)

第一种:基于位置恢复

基于位置点恢复
mysqlbinlog --no-defaults --start-position="" --stop-position="" 指定binlog |mysql -u用户名 -p密码 

第二种:基于时间点恢复

基于时间点恢复
mysqlbinlog --no-defaults --start-datetime="" --stop-datetime="" 指定binlog |mysql -u用户名 -p密码 

如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前
如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start 

四、总结

备份方法
物理备份:直接对数据库的物理文件(数据文件、日志文件等)进行备份
逻辑备份:对数据库的库和表对象以SQL语言的形式导出进行备份

备份策略
完全备份:每次备份都备份完整的库或者表数据
差异备份:只备份上一次完全备份后的更新数据
增量备份:每次备份只备份上一次完全备份或增量备份后的更新数据


数据库上云迁移     冷迁移     物理冷备      先关闭数据库,再打包备份+恢复
                   热迁移     阿里云 DTS

完全备份
物理冷备:先关闭数据库,使用tar命令打包备份数据库的数据目录和文件  mysql/data/

mysqldump逻辑热备
mysqldump -uXXX -pXXX  --databases 库1 [库2 ....] > XXX.sql       备份一个或多个库及库中所有的表数据
mysqldump -uXXX -pXXX  --all-databases > XXX.sql                  备份所有的库
mysqldump -uXXX -pXXX  库名 > XXX.sql                             备份指定库中的所有的表数据,不包含库对象
mysqldump -uXXX -pXXX  库名 表1 [表2 ....] > XXX.sql              备份指定库中的一个或多个表数据,不包含库对象

xtrabackup物理热备


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

mysql -uXXX -pXXX < XXX.sql         cat XXX.sql | mysql -uXXX -pXXX                          恢复库
mysql -uXXX -pXXX 库名 < XXX.sql    cat XXX.sql | mysql -uXXX -pXXX 库名                     恢复表


增量备份
通过刷新二进制日志间接实现增量备份
mysqladmin -uXXX -pXXX flush-logs

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

使用二进制日志增量恢复
mysqlbinlog --no-defaults <BINLOG> | mysql -uXXX -pXXX

断点恢复
基于位置点恢复
mysqlbinlog --no-defaults --start-position='开始位置点' --stop-position='结束位置点'  <BINLOG> | mysql -uXXX -pXXX

基于时间点恢复
mysqlbinlog --no-defaults --start-datetime='YYYY-mm-dd HH:MM:SS' --stop-position='YYYY-mm-dd HH:MM:SS'  <BINLOG> | mysql -uXXX -pXXX

如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前
如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为鸿蒙的发展史:从初创到全球领先的科技之旅

华为鸿蒙操作系统的发展历程堪称科技领域的传奇。作为中国科技产业的璀璨明星&#xff0c;鸿蒙系统在面临外部压力与挑战的同时&#xff0c;凭借着华为的坚定信念与不懈努力&#xff0c;逐步崛起成为全球领先的智能终端操作系统。本文将带您深入了解华为鸿蒙的发展史&#xff0…

ThreadPoolExecutor使用浅谈

1. 基础介绍 ThreadPoolExecutor是Python标准库concurrent.futures模块中的一个类&#xff0c;用于实现线程池的功能。 ThreadPoolExecutor模块相比于threading等模块&#xff0c;通过submit方法返回的是一个Future对象&#xff0c;它代表了一个未来可期的结果。通过Future对…

一文教你如何绕过统一认证拿到赏金

1.漏洞背景 统一认证通常是一种安全措施&#xff0c;用于验证用户的身份&#xff0c;以确保只有授权的用户才能访问敏感或受限的信息和服务。 当你尝试访问某个需要特定权限的网站或服务时&#xff0c;系统会将你重定向到一个统一认证页面。在这里&#xff0c;你需要输入你的登…

【鸿蒙应用ArkTS开发系列】- 沉浸式状态栏实现

文章目录 一、前言二、封装沉浸式状态栏管理类1、创建Demo工程2、封装状态栏管理类 三、编写页面实现沉浸式状态栏效果1、存储windowStage实例2、Page页面中实现沉浸式开启关闭功能2.1、开启沉浸式状态栏2.2、设置标题栏偏移量 一、前言 在应用开发中&#xff0c;页面跟状态栏…

Java代码审计鉴权漏洞InterceptorFilterShiroJWT(非常详细!!)

目录 0x00 前言 0x01 鉴权方式&审计思路 1、目前主流的鉴权方式 2、鉴权漏洞审计思路 0x02 Interceptor鉴权审计 - NewbeeMall电商系统 1、项目介绍 - NewbeeMall 2、Interceptor 补充介绍 3、NewbeeMall - Interceptor鉴权 - 代码审计 0x03 Filter鉴权审计 - 华…

PostGIS学习教程十五:几何图形的有效性

PostGIS学习教程十五&#xff1a;几何图形的有效性 在90%的情况下&#xff0c;“为什么我的查询给了我一个’TopologyException’错误"的问题的答案是"一个或多个输入的几何图形是无效的”&#xff0c;这就引出了这样一个问题:几何图形"无效"是什么意思&a…

JAVA复习三——CH5 Java Collection 、CH6 MultiThread

CH5 Java Collection(集合) 5.1 Java集合框架&#xff08;位于java.util包中&#xff09; 图一 集合框架图 从上面的集合框架图可以看到&#xff0c;Java 集合框架主要包括两种类型的容器&#xff0c;一种是集合&#xff08;Collection&#xff09;&#xff0c;存储一个元素集…

pytest分布式执行插件 pytest-xdist 的高级用法

想要使用多个CPU核心来进行测试&#xff0c;可以使用 -n 参数( 或者 --numprocesses) (使用8个核心来跑测试用例) 1 pytest -n 8 使用 -n auto 参数可以利用电脑的所有核心来跑测试用例 测试时使用的算法可以根据--dist命令参数定制&#xff1a; --dist load(默认选项)&…

手拉手Springboot整合JWT

环境介绍 技术栈 springbootmybatis-plusmysqljava-jwt 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 Json Web令牌简称JWT Token是在服务端产生的一串字符串是客户端访问资源接口(AP)时所需要的资源凭证。…

【多省市译协盖章】2023年第九届中西部外语翻译大赛

“由中西部翻译协会共同体指导发起&#xff0c;各省市译协共建学术指导委员会&#xff0c;2023年第九届中西部外语翻译大赛由中西部翻译协会共同体秘书处&#xff08;武汉公仪网络科技有限公司&#xff09;承办。” &#xff08;证书样图&#xff09; 证书盖章单位&#xff1…

文件重命名:特殊符号影响你找文件吗?来看看这个解决方法

在日常生活和工作中&#xff0c;电脑已经成为必不可少的工具&#xff0c;而文件管理也是一项重要的任务。有时候遇到文件重命名的问题&#xff0c;例如当文件名中包含特殊符号时&#xff0c;这可能会给工作带来很大的困扰。当尝试寻找一个文件时&#xff0c;却发现因为文件名中…

Linux的账号及权限管理

一.管理用户账号 1.1 用户账户的分类 1.1.1 用户账号的分类 超级用户&#xff1a;&#xff08;拥有至高无上的权利&#xff09; root用户是Linux操作系统中默认的超级用户账号&#xff0c;对本主机拥有最高的权限&#xff0c;系统中超级用户是唯一的。普通用户&#xff1a; …

c++学习笔记(6)-类型转换

1、概念 C类型转换是将一种数据类型转换为另一种数据类型的过程。 2、分类 C中的类型转换可以从3个角度来划分&#xff1a; 根据类型转换是由程序员显式指定&#xff0c;还是由编译器自动完成&#xff0c;分为显式类型转换和隐式类型转换&#xff1b;根据参与类型转换的变量…

智能优化算法应用:基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于减法平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.减法平均算法4.实验参数设定5.算法结果6.…

测试用例要如何写

​ &#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试…

IDEA基本设置

本博客适用于纯新手小白&#xff0c;或者刚下载IDEA想要优化开发添加配置的读者。 基础设置 不区分大小写代码补全 打开 IntelliJ IDEA。转到 “File”&#xff08;文件&#xff09; > “Settings”&#xff08;设置&#xff09;&#xff08;Windows/Linux&#xff09;或 “…

swagger1.2 apiPost工具测试接口没有问题,换成swagger 接口调测时报错 Required request body is missing

把 请求方法由get换成post GetMapping换成 PostMapping 原因apiPost自动把请求json参数封装到请求体里了&#xff0c; 但swagger没有封装&#xff0c;通过networker可以看到载荷里并没有任何东西

(C++)DS哈希查找—二次探测再散列(附思路和详细注释)

Description 定义哈希函数为H(key) key%11。输入表长&#xff08;大于、等于11&#xff09;&#xff0c;输入关键字集合&#xff0c;用二次探测再散列构建哈希表&#xff0c;并查找给定关键字。 Input 测试数据组数 1≤&#xfffd;≤50. 每组测试数据格式如下&#xff1a…

面试题:Zabbix 和 Prometheus 到底怎么选?

文章目录 前言历史简介PrometheusZabbix 架构对比PrometheusZabbix 综合对比总结 前言 新公司要上监控&#xff0c;面试提到了 Prometheus 是公司需要的监控解决方案&#xff0c;我当然是选择跟风了。 之前主要做的是 Zabbix&#xff0c;既然公司需要 Prometheus&#xff0c;…

【如何破坏单例模式(详解)】

✅如何破坏单例模式 &#x1f4a1;典型解析✅拓展知识仓✅反射破坏单例✅反序列化破坏单例✅ObjectlnputStream ✅总结✅如何避免单例被破坏✅ 避免反射破坏单例✅ 避免反序列化破坏单例 &#x1f4a1;典型解析 单例模式主要是通过把一个类的构造方法私有化&#xff0c;来避免重…