热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql的日志(binlog日志和慢日志)

一、查看mysql数据所占的大小selecttable_name,data_length,index_length,(data_lengthindex_length)aslengt

一、查看mysql数据所占的大小


select table_name,data_length,index_length,(data_length+index_length) as length,table_rows,concat(round((data_length+index_length)/1024/1024/1024,3),'GB') as totalSize FROM information_schema.tables
WHERE table_schema = 'pt_query'
ORDER BY length DESC;

二、二进制文件(binlog日志)


1、介绍
二进制日志也叫作变更日志,主要用于记录修改数据或有可能引起数据改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。一般大小体积上限为1G。

a、DDL

----Data Definition Language 数据库定义语言

主要的命令有create、alter、drop等,ddl主要是用在定义或改变表(table)的结构,数据类型,表之间的连接和约束等初始工作上,他们大多在建表时候使用。

b、DML

----Data Manipulation Language 数据操纵语言

主要命令是slect,update,insert,delete,就像它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

2、binlog日志文件的配置

查看binlog日志的信息:

show global variables like "%log_bin%";

未开启binlog日志

+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF | 用于控制会话级别二进制日志功能的开启或关闭
| log_bin_basename | | 二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。
| log_bin_index | |二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件。
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+-------+

如果要开启binlog日志可以在my.cnf文件中添加(一般在/etc 目录下,加完之后需重启mysql)

#指定二进制日志生成的路径
log-bin=/data/mysql/mysql-bin
#开启binlog日志
server-id=1
#指定二进制日志的类型,默认为MIXED,加入此参数才能记录到insert语句
binlog_format=MIXED

加完开启binlog日志之后
在这里插入图片描述

3、查看binlog文件

#查看所有binlog日志列表
show master logs;
#查看master状态,即最后(最新)一个binlog日志的编号名称,
#及其最后一个操作事件pos结束点(Position)值。
show master status;

在这里插入图片描述

在mysql执行一条更改语句
在这里插入图片描述
去mysql 的bin目录下,查看对应执行语句

./mysqlbinlog /data/mysql/mysql-bin.000001

在这里插入图片描述
更推荐

show binlog events in 'mysql-bin.000001';
show binlog events in 'mysql-bin.000001' from 6599 limit 5;

在这里插入图片描述

show binlog events in 'mysql-bin.000003'/G;

在这里插入图片描述

4、flush 刷新log日志,自此刻开始产生一个新编号的binlog日志文件;
 flush logs;
注意:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqlddump备份数据时加-F选项也会刷新binlog日志;

5、重置(清空)所有binlog日志
reset master;

6、通过binlog恢复其数据

思路:
mysql数据的恢复需要依赖与在之前备份的数据,通过备份数据,执行相同的操作来进行恢复数据。无法根据现有数据,反推得到误删数据。

演示:

a、展示现有数据(测试数据库为data_recover)
在这里插入图片描述

在这里插入图片描述

b、在此基础上进行数据备份

./mysqldump -uroot -proot -B data_recover -F -R -x --master-data=2 |gzip >/tmp/data_recover_$(date +%F).sql.gz

命令的语法格式:
mysqldump [OPTIONS] database [tables]:备份单个库,或库指定的一个或多个表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3…]:备份一个或多个库
mysqldump [OPTIONS] --all-databases [OPTIONS]:备份所有库

-A, --all-databases 备份所有表

-x, --lock-all-tables:锁定所有表

-l, --lock-tables:锁定备份的表

–single-transaction:启动一个大的单一事务实现备份

-B, --databases db_name1 db_name2 …:备份指定的数据库

-C, --compress:压缩传输;

-E, --events:备份指定库的事件调度器;
-R, --routines:备份存储过程和存储函数;
–master-data[=#]:
1:记录CHANGE MASTER TO语句;此语句未被注释;
2:记录为注释语句;

–flush-logs, -F:锁定表之后执行flush logs命令;(这个需要注意,这个时候binlog日志更新一个新的一份)

在这里插入图片描述

c、在此基础上进行增删查改
在这里插入图片描述

进行增删查改之后的数据为:
在这里插入图片描述
我们利用之前备份数据,恢复到目前数据(假设delete from tb_areas where id=2; 为误操作)

d、对新的binlog日志进行备份,防止新的数据产生影响
在这里插入图片描述
e、对之前的备份的压缩文件进行解压

gzip -d /tmp/data_recover_2019-10-11.sql.gz

f、恢复到备份时候的情况(如果真实环境可以修改数据库名字,等数据完全恢复正常在切换新的数据库)

./mysql -uroot -S /tmp/mysql.sock -proot

可以看到数据已经恢复为备份时候的数据了
在这里插入图片描述

g、恢复数据

show binlog events in 'mysql-bin.000003'/G;

可以在这里插入图片描述

可以看到我们想要恢复的数据,但不想要删除那个语句。(恢复时候不执行 1371~1523)

./mysqlbinlog --stop-position=1276 --database=data_recover /data/mysql/mysql-bin.000003 | ./mysql -uroot -proot -S /tmp/mysql.sock -v
./mysqlbinlog --start-position=1523 --database=data_recover /data/mysql/mysql-bin.000003 | ./mysql -uroot -proot -S /tmp/mysql.sock -v

可以看到数据已经恢复正常
在这里插入图片描述

三、慢查询日志


show global variables like '%log%';

| slow_query_log | ON | 查询日志的开关
| slow_query_log_file | /data/mysql/query-slow.log | 慢查询日志的路径

如果查询日志并没有打开需要添加

#日志查询超过两秒记录
long_query_time=2
#开启慢查询
slow_query_log=1
#慢查询文件目录
slow_query_log_file=/data/mysql/query-slow.log
#记录未使用索引的sql
#log_queries_not_using_indexes=1

如果使用慢查询,有个关于慢查询的工具 t-query-digest
这里将其使用方法贴出来来参考
http://xiaohost.com/1250.html


推荐阅读
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
author-avatar
mobiledu2502881683
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有