文章目录

  • 一.MySQL日志管理
    • 1.1日志分类
    • 1.2日志配置
    • 1.3日志查询
  • 二.MySQL数据备份
    • 2.1物理备份
    • 2.2逻辑备份
  • 三.常用的备份方法
    • 3.1物理冷备
    • 3.2工具备份(温备)
    • 3.3增量备份与恢复
      • 3.3.1开启二进制日志功能
      • 3.3.2二进制日志读取
      • 3.3.3一般恢复
      • 3.3.4节点恢复
      • 3.3.5基于时间点恢复
  • 四.总结

引言:在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果,那么对于数据的备份就将显的十分重要。对于MySQL而言,在其备份中,日志起到了很重要的作用

一.MySQL日志管理

MySQL的日志默认保存位置为:/usr/local/mysql/data下
配置文件位于:/etc/my.cnf文件中的[mysqld]内

1.1日志分类

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

log-error=/usr/local/mysql/data/mysql_error.log

  1. 通用查询日志
    用来记录MySQL的所有连接和语句,默认是关闭的

general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log

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

log_bin=mysql-bin
或 log-bin=mysql-bin

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

slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=5 单位时间为s,缺省时为10s

慢查询日志也可用来查询哪些搜索的字段超时,可以选择是否需要增加索引,加快查询速度

  1. 中继日志
    一般情况下,它在MySQL主从同步(复制)、读写分离集群的从节点开启,主节点一般不需要这个日志

1.2日志配置

修改配置文件
vim /etc/my.conf

#错误日志
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
#配置文件添加完后需要重启MySQL
systemctl restart mysql

修改my.cnf配置文件,在[mysqld]中添加如下内容

重启服务

1.3日志查询

登入MySQL数据库,查询日志是否开启

#variables 表示变量
#like 表示模糊查询
#%xxx,以什么结尾,xxx%以什么开头,%xxx%包含
#查看通用查询日志是否开启
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;      
  • 查询通用日志是否开启
    show variables like ‘general%’;
  • 查询二进制日志是否开启
    show variables like ‘log_bin%’;
  • 查看慢查询日志是否开启
    show variables like ‘long_query_time’;

    查询慢查询日志超时时间
    show variables like ‘long%’;

二.MySQL数据备份

在生产环境中,数据的安全性至关重要,任何数据的丢失都可能产生严重的后果,数据备份的主要目的是灾难恢复
数据备份分为物理备份和逻辑备份两类

2.1物理备份

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

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

2.2逻辑备份

对数据库逻辑组件的备份,表示为逻辑数据库结构,此类型备份适用于可以编辑数据值或表结构
逻辑备份分类:

  1. 完全备份
    每次都进行完全备份,会导致文件占用空间巨大,并且有大量重复数据,恢复时,直接使用完全备份的文件即可
    优点:备份与恢复操作简单方便
    缺点:数据存在大量的重复、占用大量的备份空间及备份与恢复时间长
  2. 差异备份
    每次差异备份,都会备份上一次完全备份之后的数据,可能会出现备份重复数据,导致占用额外的磁盘空间,恢复时,先恢复完全备份的数据,再恢复差异备份的数据
  3. 增量备份
    每次增量备份都是在上一次完全备份或者增量备份之后的数据,不会出现备份重复数据的情况,也不会占用额外的磁盘空间。恢复数据时,需要按照次序恢复完全备份和增量备份的数据

三.常用的备份方法

3.1物理冷备

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

#关闭服务
systemctl stop mysqld.service
#压缩备份
tar -czf /opt/mysql_all$(date +%F).tar.gz /usr/local/mysql/data/
mkdir /opt/mysql_bak
mv /usr/local/mysql/data/* /opt/mysql_bak/  #模拟删除数据库
#解压恢复
tar -xf mysql_all2022-06-21.tar.gz -C /usr/local/mysql/data/
cd /usr/local/mysql/data      #切换目录
mv usr/local/mysql/data/* ./  #将解压的数据移到/usr/local/mysql/data/下

压缩备份

解压恢复

启动服务,查看数据是否还在

3.2工具备份(温备)

常用的工具有
mysqldump 常用的逻辑备份工具
mysqlhotcopy 仅拥有备份 MyISAM和ARCHIVE表
使用mysqldump工具备份一个或多个完整的库(包括其中的表)

#备份一个或多个库
mysqldump -u root -p --databases 库名1 库名2 > 备份路径/文件名.sql
#备份所有库(完全备份)
mysqldump -u root -p --all-databases > 备份路径/文件名.sql
#备份的文件名后缀必须为.sql
#备份一个库中的一个或多个表
mysqldump -u root -p --databases 库名 表名1 表名2 > 备份路径.sql
  • 完全备份
    mysqldump -u root -p --all-databases > /opt/mysql_all.sql
    备份数据库中的所有库文件
  • 完全备份恢复
    方法一:
#在数据库中,使用source恢复数据
mysql> source /opt/mysql_all.sql

删除表与表内内容

进行完全备份恢复

查看数据是否恢复

方法二:

#完全恢复
mysql -uroot -p < 备份文件路径
#恢复指定库的指定表
mysql -uroot -p 库名 表名1 表名2 < 备份文件路径

mysqldump -uroot -p --databases xy > /opt/mysql_xy.sql
当备份时加 --databases,表示针对库xy
当备份时不加–databases时,表示针对xy库下的所有表


  • 备份数据表结构
mysqldump -u root -p -d xy bank > /opt/xy_bank.sql
#-d 选项,说明只保留表的结构,不保留数据
#不加-d,则连同数据一起备份


也可以打开备份文件查看

小结:在数据恢复的时候建议使用source,简单方便
mysqldump工具属于温备份,在其进行数据备份的时候,会进行锁表,禁止写入
在备份库的时候要使用–databases

3.3增量备份与恢复

MySQL数据库增量恢复有,一般恢复、基于位置恢复、基于时间点恢复

3.3.1开启二进制日志功能

vim /etc/my.conf
[mysqld]
log-bin=mysql-bin
binlog_format = MIXED
server-id = 1
#二进制日志有三种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认为STATEMENT
#server-id 为服务的序号,在MySQL主备、高可用中需要指定服务的序号
#改为配置文件需要重启服务
systemctl restart mysqld

STATEMENT(基于sQL语句):
每一条涉及到被修改的sql都会记录在binlog中
缺点:日志量过大,如sleep()函数,last_insert_id()>,以及user-definedfuctions ( udf) 、垂从复制等架构记录日志时会出现问题
总结:增删改查通过sql语句来实现记录,如果用高并发可能会出错,可能时间差异或者延迟,可能不是我们想想的恢复可能你先删除或者在修改,可能会倒过来。准确率底

ROw(基于行)
只记录变动的记录,不记录sql的上下文环境
缺点:如果遇到update… …set… . .where true那么binlog的数据量会越来越大
总结: update、 delete以多行数据起作用,来用行记录下来,只记录变动的记录,不记录sql的上下文环境,比如sql语句记录一行,但是Row就可能记录10行,但是准确性高,高并发的时候由于操作量能变低比较大所以记录都记下来,


重启服务
systemctl restart mysqld.service

3.3.2二进制日志读取

二进制文件无法直接编辑查看,需要对其进行转换

mysqlbinlog --no-defaults 二进制日志文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v 二进制日志文件
#--base64-output=decode-rows 使用64位编码机制去解码;decode按行读取rows
#-v 显示详细内容
#--no-defaults 默认字符集(不加会报UTF-8错误)
#将解码后的文件导出为txt文件,重定向输出
mysqlbinlog --no-defaults --base64-output=decode-rows -v 二进制日志文件 > 文件.txt
#刷新日志文件
mysqladmin -uroot -p flush-logs

3.3.3一般恢复

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

mysqladmin -uroot -p flush-logs 刷新日志文件

对表内数据进行删除操作

使用日志文件对数据进行恢复

mysqlbinlog --no-defaults -v /opt/mysql-bin.000001 |mysql -uroot -p

3.3.4节点恢复

数据库在某一时间点可能既有错误的操作也有正确的操作,可以基于精准的位置跳过错误的操作
发生错误节点指点的上一个节点,上一次正确操作的位置点停止
模拟节点恢复,刷新日志,生成新的日志文件

进行数据库操作

基于节点进行数据恢复
查看日志文件


恢复数据

mysqlbinlog --no-defaults --stop-position='711' /opt/mysql-bin.000004 |mysql -uroot -p
#--stop-position='711'    恢复到711节点之前
#--start-position='711'   从节点711开始

3.3.5基于时间点恢复

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

模拟时间点恢复,刷新日志,生成新的日志文件

修改表内数据

备份日志文件,并查看

mysqlbinlog --no-defaults --stop-datetime='2022-06-21 20:03:48' /opt/mysql-bin.000005 |mysql -uroot -p

四.总结

在增量备份恢复时,要先从完全备份恢复,再到二进制日志1、日志2…逐一恢复
如果恢复某条SQL语句之前的所有数据,就stop在这个语句的位置节点或者时间点
如果恢复某条SQL语句以及之后的所有数据,就从这个语句的位置节点或者时间点start

MySQL数据备份、恢复相关推荐

  1. mysql数据备份恢复

    数据备份恢复 一.概述 MySQL数据备份即databases Binlog my.cnf 所有备份数据都应放在非数据库本地,而且建议有多份副本.测试环境中做日常恢复演练,恢复较备份更为重要. 备份: ...

  2. MySQL数据备份恢复全攻略,让我们通过简单几步找回丢失的数据

    编写初衷 没有人生下来天生就是会计算机的,就拿笔者来说的话,也是从Windows->Centos->Ubuntu一步一步慢慢学习,积累下来的.为了让大家能够更快更高效率的学习,从今天开始, ...

  3. Mysql数据备份恢复及主从同步

    目录 Mysql备份及主从同步 Mysql备份 1. mysqldump全量备份 2.log_bin增量备份 Mysql主从同步配置 1.1主从同步过程 1.2 配置 Mysql备份及主从同步 Mys ...

  4. 阿里云mysql数据备份恢复数据到本地mysql(备份+binlog)

    参考:https://help.aliyun.com/knowledge_detail/41817.html?spm=a2c4g.11186623.4.3.49bf4292RNNrSC 起因:生产环境 ...

  5. mysql-阿里云mysql数据备份恢复踩的坑

    0. 阿里云官方 参考链接:https://help.aliyun.com/knowledge_detail/41817.html 大家可以先按照阿里云官方的来,如果发现有地方卡住了再来看我的操作教程 ...

  6. python之mysql数据备份和恢复

    python之mysql数据备份和恢复 1. 数据的备份和恢复 1.1 数据备份 1.2 数据恢复 1. 数据的备份和恢复 下面的命令属于mysql特有的,不属于sql句. 1.1 数据备份 操作步骤 ...

  7. commvault备份mysql数据库_Commvault数据备份恢复平台-功能测试报告.pdf

    Commvault 软件功能测试报告 Commvault 测试报告 Commvault 数据备份恢复平台 功能测试报告 第 1 页 Commvault 软件功能测试报告 目 录 第 1 章 测试概述 ...

  8. mysql备份数据库语句6_13.4 MySQL用户管理;13.5 常用sql语句;13.6 MySQL数据库备份恢复...

    扩展 : SQL语句教程 什么是事务?事务的特性有哪些? 根据binlog恢复指定时间段的数据 mysql字符集调整 使用xtrabackup备份innodb引擎的数据库  innobackupex  ...

  9. mysql用户管理,常用sql语句,mysql数据库备份恢复

    2019独角兽企业重金招聘Python工程师标准>>> mysql用户管理 grant all on . to 'user1' identified by 'passwd'; gra ...

最新文章

  1. python字典(dict)+常用方法操作+列表、元组、集合、字典的互相转换
  2. 如何在JS判断是否为IE浏览器
  3. matlab的annotation,科学网—annotation in matlab Graph - 夏靖的博文
  4. 文华财经期货买卖点指标源码,期货超短线指标公式源码
  5. Linux 命令 大结
  6. 股票交易接口的分类webService接口
  7. 2023最新行业圈子系统小程序/语音房APP/短视频APP/商城APP/相亲APP/开黑陪玩APP
  8. 3D立体书架切换效果(一)
  9. 单片机最小系统实现LED灯闪烁
  10. .Net Core 实现WebSocket Server 的另外三种方式
  11. 软件构造lab2 - 实验报告
  12. 2020,上市也疯狂
  13. 荐书 | 睡不着?你需要这本神经漫游指南
  14. 科技赋能长三角,移动云铸造“数字鱼米之乡”
  15. linux推流软件推荐,在Linux 系统使用ffmpeg软件做哔哩哔哩视频网站推流 | IT工程师的生活足迹...
  16. 计算机组成原理 英文影印版,计算机体系结构:量化研究方法(英文影印版·第4版)...
  17. 数据库索引分类 聚集索引和非聚集索引
  18. [转载] 黑鹰完完全全学习注册表——剖析注册表文件体系
  19. iOS15.6 Beta 4如何更新 iOS15.6 Beta 4更新升级方法
  20. 机器学习-吴恩达网易云课堂笔记

热门文章

  1. normal + lognormal
  2. correl函数相关系数大小意义_correl(correl函数相关系数大小意义)
  3. dmp标签_[重磅推荐]你必须知道的京准通DMP知识!
  4. HTML5,CSS,JS前端常见知识面试题
  5. python利用有道词典翻译_Python利用有道词典接口制作即时翻译的工具
  6. R语言学习笔记(概念、公式及R函数)
  7. 自动化运维学习--python
  8. Ubuntu服务器配置mysql8
  9. 专科段《生产与运作管理》课程复习资料(1)——单项选择题
  10. 华为鸿蒙麒麟玉兔_华为鸿蒙麒麟玉兔_华为P50曝光,99屏占比海思麒麟1020鸿蒙系统,这才是华为...