一.Mysql日志分类

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

vim /etc/my.cnf

1.错误日志

说明:

在对应的数据目录中,以主机名+.err命名的文件,错误日志记录的信息类型:

记录了服务器运行中产生的错误信息

记录了服务在启动和停止是所产生的信息

在从服务器上如果启动了复制进程的时候,复制进程的信息也会被记录

记录event错误日志

#指定日志的保存位置和文件名

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

2.通用查询日志

说明:

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

对除了慢查日志中记录的查询信息都将记录下来,这将对服务器主机产生大量的压力,所以对于繁忙的服务器应该关闭这个日志与查询日志相关的变量。

general_log=ON

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

3.二进制日志(bin log)

说明:

用来记录所有当MySQL启动、停止或运行时发送的错误信息。

默认开启,精确的记录了用户对数据库中的数据进行操作的命令和操作的数据对象。

二进制日志文件的作用:

提供了增量备份的功能。

提供了数据基于时间点的恢复,这个恢复的时间点可以由用户控制。

为mysql的复制架构提供基础,将这主服务器的二进制日志复制到从服务器上并执行同样的操作,就可将数据进行同步。

log-bin=mysql-bin #也可以 log_bin=mysql-bin

4.慢日志查询

说明:

用来记录所有执行时间超过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秒。

二.查看日志是否开启

1.查看通用日志是否开启

show variables like 'general%';

2.查看二进制值日志是否开启

show variables like 'log_bin%';

3.查看慢查询日志功能是否开启

show variables like '%slow%';

(1)查看慢查询时间

show variables like 'long_query_time';

三.日志备份

1.日志备份的重要性

备份的主要目的是灾难恢复

在生产环境中,数据的安全性至关重要

任何数据的丢失都可能产生严重的后果

造成数据丢失的原由

1.程序错误

2.认为操作错误

3.运算错误

4.磁盘故障

5.灾难(如火灾、地震等不可抗力元素)和盗窃

2.备份分类

(1.)从物理与逻辑的角度,备份可分为

物理备份

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

物理备份的方法:

1.冷备份(脱机备份):是在关闭数据库的时候进行的

2.热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件

3.温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作

逻辑备份

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

(2.)从数据库备份策略角度,备份可分为

1.完全备份:每次对数据库进行完整的备份

2.差异备份:备份自从上次完全备份之后被修改过的文件

3.增量备份:只要在上次完全备份或者增量备份后被修改的文件才会被备份

(3.)常用备份方法

物理冷备份

1.备份时数据库处于关闭状态,直接打包数据库文件

2.备份速度快,恢复时也是最简单的

3.关闭MySQL数据库

4.使用tar命令直接打包数据库文件夹

5.直接替换现有的MySQL目录即可

专用备份工具

1.mysqldump常用的逻辑备份工具

- MySQL自带的备份工具,可实现对MySQL的备份

- 可以将指定的库、表导出为SQL脚本

- 使用命令mysql导入备份的数据

2.mysqlhotcopy仅拥有备份myisam和archive表

启用二进制日志进行增量备份

进行增量备份,需要刷新二进制日志

第三工具备份

免费的MySQL热备份软件Percona XtraBackup

完全备份

1.是对整个数据库、数据库结构和文件结构的备份

2.保存的是备份完成时刻的数据库

3.是差异备份与增量备份的基础

优点:备份与恢复操作简单方便

缺点:1.数据存在大量的重复

2.占用大量的备份空间

3.备份恢复时间长

四.Mysql完全备份与恢复

1.实验

create database LJ; #创建LJ库

use LJ; #进入LJ库

create table if not exists LJR1 ( #如果没有LJR1的表则创建,有则不创建

id int(4) not null auto_increment, #id最大显示长度为4位,不为空,自动递增

name varchar(10) not null, #name可变长度字段最多不能超过10个字符,不为空

sex char(10) not null, #sex固定字段为10个字符,不为空

hobby varchar(50), #hobby可变长度字段最多不能超过20个字符

primary key (id)); #主键为id

insert into LJR1 values(1,'liwei','male','running'); #在LJR1表中插入新的数据,id=1,name=liwei,sex=male,hobby=running

insert into LJR1 values(2,'xiaohao','female','singing'); #在LJR1表中插入新的数据,id=2,name=xiaohao,sex=male,hobby=singing

2.完全备份

InnoDB存储引擎的数据库在磁盘上存储成三个文件:db.opt(表属性文件)、表名.frm(表结构文件)、表名.ibd(表数据文件)。

(1.)物理冷备份与恢复

1.systemctl stop mysqld #关闭数据库

2.yum -y install xz

3.tar Jcvf /opt/mysql_all_$(date +%F).tar.xz /usr/local/mysql/data/ #压缩备份

4.tar Jxvf /opt/mysql_all_2020-2-10.tar.xz -C /usr/local/mysql/data #解压恢复

5.systemctl restart mysql #重启数据库

(2.)数据库备份

1.完全备份一个或多个完整的库(包括其中所有的表)

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

示列:

mysqldump -uroot -p123456 --databases LJ > /opt/LJ.sql #完全备份完整的LJ库到/opt目录下文件名为LJ.sql

mysqldump -uroot -p123456 --databases mysql LJ > /opt/mysql-LJ.sql #备份多个完整的LJ库到/opt目录下文件名为mysql-LJ.sql

2.完全备份服务器中的所有库

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

示列:

mysqldump -u root -p123456 --all-databases > /opt/all.sql #备份所有的库到/opt目录,文件名为all.sql

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

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

示列:

mysqldump -uroot -p123456 LJ LJR1 > /opt/LJ_LJR1.sql #备份LJ库里的LJR1表到/opt目录,文件名为LJ_LJR1.sql

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

#不使用“-d”选项,说明表数据也进行备份

4.查看备份文件

grep -v "^--" /opt/[备份文件名] | grep -v "^/" | grep -v "^$" #过滤--开头、/开头和空格

(3.)数据库恢复

1.恢复数据库

mysql -uroot -p123456 -e 'drop database LJ;' #删除LJ库

mysql -uroot -p123456 -e 'SHOW DATABASES;' #查看所有的库

mysql -uroot -p123456 < /opt/LJ.sql #恢复数据库,将备份文件注入数据库中

2.恢复数据表

当备份文件中只包含表的备份,而不包含创建的库的语句时,执行导入操作时必须指定库名,且目标库必须存在。

mysql -uroot -p123456 -e 'drop table LJ.LJR1;'#删除LJ库中的LJR1表

mysql -uroot -p123456 -e 'show tables from LJ;' #查看LJ库中的表

mysql -uroot -p123456 LJ < /opt/LJ_LJR1.sql #恢复数据表,将备份文件注入数据库中

五.Mysql增量备份

1.开启二进制日志功能

vim /etc/my.cnf

[mysqld]

log-bin=mysql-bin

binlog_format = MIXED#可选,指定二进制日志(binlog)的记录格式为MIXED

server-id = 1

#二进制日志(binlog)有3种不同的记录格式:STATEMENT(基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT

systemctl restart mysqld

ls -l /usr/local/mysql/data/mysql-bin.*

2.可每周对数据库或表进行完全备份

mysqldump -uroot -p123456 LJ LJR1 > /opt/LJ_LJR1_$(date +%F).sql

mysqldump -uroot -p123456 --all-databases LJ > /opt/LJ_$(date +%F).sql

3.可每天进行增量备份操作

可以生成新的二进制日志文件(例如 mysql-bin.000002)

mysqladmin -uroot -p123456 flush-logs #可生成新的二进制文件

4.插入新数据,以模拟数据的增加或变更

mysql -uroot -p123456 #进入数据库

use LJ; #进入LJ库

insert into LJR1 values(3,'yuanyuan','female','game'); #插入新的数据记录id=3,name=yuanyuan,sex=femalehobby=game

insert into LJR1 values(4,'wenlin','male','reading'); #插入新的数据记录id=4,name=wenlin,sex=male,hobby=reading

select * from LJ; #查看LJR1标的数据

六.Mysql恢复

1.一般恢复

(1.)模拟丢失更改的数据的恢复步骤

mysql -uroot -p123456 #进入数据库

use LJ; #进入LJ库

delete from LJR1 where id=3; #删除id=3的数据记录

delete from LJR1 where id=4; #删除id=4的数据记录

select * from LJR1; #查看LJR1表的所有数据记录

mysqlbinlog --no-defaults /opt/mysql-bin.000002 | mysql -uroot -p123456 #日志恢复,将二进制日志文件注入数据库

select * from LJ.LJR1; #再次查看LJR1表中的所有数据记录

(2.)模拟丢失所有数据的恢复步骤

2.断点恢复

mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002

(1.)基于位置恢复

1.mysqlbinlog --no-defaults --stop-position='611' /opt/mysql-bin.000002 | mysql -uroot -p123456 #仅恢复到操作 ID 为“611”之前的数据,即不恢复“user4”的数据

2.mysqlbinlog --no-defaults --start-position='611' /opt/mysql-bin.0.00002 | mysql -uroot -p123456 #仅恢复‘user4’的数据,跳过‘user3’的数据恢复

(2.)基于时间恢复

mysqlbinlog --no-defaults --stop-datetime='2021-2-10 12:19:15' /opt/mysql-bin.000002 |mysql -uroot -p123456 #仅恢复到 12:19:15 之前的数据,即不恢复“user4”的数据

mysqlbinlog --no-defaults --start-datetime='2021-2-10 12:19:15' /opt/mysql-bin.000002 |mysql -uroot -p123456 #仅恢复‘user4’的数据,跳过‘user3’的数据恢复

mysql 日志记录 archive_完美起航-Mysql日志管理、备份与恢复相关推荐

  1. go语言web开发系列之五:gin用zap+file-rotatelogs实现日志记录及按日期切分日志

    一,安装需要用到的库: 1,安装zap日志库: liuhongdi@ku:/data/liuhongdi/zaplog$ go get -u go.uber.org/zap 2,安装go-file-r ...

  2. mysql 授权 失败_完美解决mysql客户端授权后连接失败的问题

    在本地(192.168.1.152)部署好mysql环境,授权远程客户机192.168.1.%连接本机的mysql,在iptables防火墙也已开通3306端口. 如下: mysql> sele ...

  3. 考虑题4所示的日志记录_基于Log4Net实现日志信息双向存储

    1.引言 在上位机开发中,日志记录是必不可少的,我们可以通过日志记录做日志分析及错误追踪.初学者会采用txt文本写入来实现日志保存,但是文本写入不是线程安全,当存在多个线程同时写入日志时,就会出现一些 ...

  4. aws日志记录到MySQL_AWS-RDS慢查询日志查看导出

    如果要分析 slow log,第一步就是先要获取到 slow log 文件,由于 RDS MySQL 是托管数据库,我们无法登录到 MySQL 所在服务器,那么应该如何来获取 slow log 文件呢 ...

  5. 服务器日志记录_5种改善服务器日志记录的技术

    服务器日志记录 在最近的时间里,我们已经看到了许多工具可以帮助您理解日志. 开源项目(例如Scribe和LogStash),内部部署工具(例如Splunk)以及托管服务(例如SumoLogic和Pap ...

  6. 日志记录到字段变更_Wal日志解析工具开源: Walminer

    作者简介 李传成: 瀚高软件内核研发工程师,主要研究方向为数据库的备份和恢复,对wal日志的原理和应用有较深的理解.自研了wal日志解析工具walminer.pg块恢复工具pg_lightool. 一 ...

  7. php出错日志记录_关于PHP错误日志踩过的一些坑

    nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息. nginx把对php的请求发给php-fpm fastcgi进程来处理, ...

  8. 【MySQL】记录 Navicat连接 docker mysql 容器,备份docker mysql 注意事项

    文章目录 Navicat连接 docker mysql 容器 定时任务备份 docker mysql ,解决 备份数据库为空 问题 Navicat连接 docker mysql 容器 确保 登录 用户 ...

  9. 周五怎么表示 mysql_完美起航-MySQL找每个月最后一个星期五--函数定义与使用

    数据库作业有一道题是这样子的: 有一张名叫emp的表记录员工信息,其中有如下字段 HIREDATE 表示员工被雇用的日期: 然后问题是这样的: q7.Show details of employee ...

最新文章

  1. linux下出现重定义,Oracle Online Redefinition在线重定义
  2. 递归调用(Java)
  3. python学习基础知识_python学习基本知识
  4. Android使用token维持登陆状态的方法
  5. 绝了!这款工具让 Spring Boot 不在需要 Controller、Service、DAO、Mapper 了
  6. 转载——Regression Tree 回归树
  7. [转载]转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数...
  8. vector自动扩容如何实现_全自动拉伸膜真空包装机是如何实现全自动化生产的?...
  9. 解决Conda install tensorflow弹窗Python.exe已经停止工作的问题
  10. 如何用计算机计算概率,计算器怎么算概率里面的A和C
  11. 【C语言】switch用法
  12. 在东京,月薪25万日元能过上什么样的日子啊
  13. SmartBi V9系统运维总结
  14. 微服务 杜家豪_搞好“微建设微服务”也是大业绩
  15. 如何用计算机求极限,计算器的极限_500字
  16. 自己写的忽略大小写查找字符串的子串的函数
  17. 表格对角线两边打字_表格对角线两边打字_表格斜线一分为二怎么打字(excel斜杠分割表格打字)...
  18. 新闻发布系统,SQLHelper重构
  19. 新论文 | 钢混组合梁多尺度BIM正向设计研究
  20. 福布斯:为什么区块链有利于竞争

热门文章

  1. python 垃圾回收哪时候执行_Python 中的垃圾回收机制是如何工作的?
  2. 微信小程序隐藏滚动条的方法,以及禁止上下滑动的方法
  3. shell 数组里追加数值_shell编程之数组及变量的多功能用法
  4. python与javascript比较_Javascript变量语义与Python的比较
  5. mysql添加表字段_mysql命令添加表字段
  6. Redis中查找大key
  7. Android 音视频深入 四 录视频MP4(附源码下载)
  8. docker第二天:管理docker镜像与容器(上)
  9. 浅谈Java中的==和equals
  10. 通过vsphere client创建虚拟机并且安装windows 2008 64位操作系统及网络配置