Usage: mysqldumpslow [ OPTS… ] [ LOGS… ]
Parse and summarize the MySQL slow query log. Options are
–verbose verbose
–debug debug
–help write this text to standard output
-v verbose
-d debug
-s ORDER what to sort by (al, at, ar, c, l, r, t), ‘at’ is default #默认排序规则
al: average lock time #平均锁定时间
ar: average rows sent #平均返回记录时间
at: average query time #平均查询时间
c: count #记录数
l: lock time #锁定时间
r: rows sent #返回记录数
t: query time #查询时间
-r reverse the sort order (largest last instead of first) #逆序排序
-t NUM just show the top n queries #top n
-a don’t abstract all numbers to N and strings to ‘S’ #归类时不要使用N替换数字,S替换字符串
-n NUM abstract numbers with at least n digits within names
-g PATTERN grep: only consider stmts that include this string #匹配查询,同grep功能一样
-h HOSTNAME hostname of db server for -slow.log filename (can be wildcard),default is '', i.e. match all
-i NAME name of server instance (if using mysql.server startup script)
-l don’t subtract lock time from total time
使用mysqldumpslow简单查看:明显省略掉了很多注释的东西
相关参数:
#和慢查询的相关参数设定
log_throttle_queries_not_use_indexes=10,记录每分钟允许写入慢日志的次数,默认为0,表示不限制
long_query_time=10 # 指定慢查询超时时长(默认10秒),超出此时长的属于慢查询
log_output={TABLE|FILE|NONE} # 定义一般查询日志和慢查询日志的输出格式,默认为file
log_slow_queries={yes|no} # 是否启用慢查询日志,默认不启用
slow_query_log={1|ON|0|OFF} # 也是是否启用慢查询日志,此变量和log_slow_queries修改一个另一个同时变化
slow_query_log_file=/mydata/data/hostname-slow.log #默认路径为库文件目录下主机名加上-slow.log
log_queries_not_using_indexes=OFF # 查询没有使用索引的时候是否也记入慢查询日志
1.5、二进制日志文件
记录对mysql数据库执行了更改的所有操作,不包括select和show这样的操作,如果执行了update和delete这样的操作,但是没有引起数据库数据的任何变化,也可能被写入二进制日志文件中。
二进制日志是以事件形式记录的,不是事务日志(但是也有可能是基于事务记录二进制日志的),对于事务表的操作,二进制日志只在事务提交的时候一次性写入(基于事务的innodb二进制日志),提交前的每个二进制日志记录都先cache,提交时写入。对于非事务表的操作,每次执行完语句就直接写入。
mysql还创建一个二进制日志索引文件,当二进制日志文件滚动的时候会向该文件中写入对应的信息。所以该文件包含所有使用的二进制日志文件的文件名。默认情况下该文件与二进制日志文件的文件名相同,扩展名为’.index’。可以通过参数–log-bin-index[=file_name]指定文件名
1.5.1、二进制日志文件的作用
1、恢复:用户可以通过二进制文件的point-in-time进行恢复
2、复制:通过执行二进制的文件在远程的机器上恢复数据
3、审计:可以对二进制日志文件进行审计,判断是否有对数据库进行注入攻击
1.5.2、查看二进制文
1.使用mysqlbinlog工具。
2.使用show显示对应的信息。
SHOW {BINARY | MASTER} LOGS # 查看使用了哪些日志文件
SHOW BINLOG EVENTS [IN ‘log_name’] [FROM pos] # 查看日志中进行了哪些操作
SHOW MASTER STATUS # 显示主服务器中的二进制日志信息
mysqlbinlog使用格式:
mysqlbinlog [option] log-file1 log-file2…
常用选项:
-d,–database=name:只查看指定数据库的日志操作
-o,–offset=#:忽略掉日志中的前n个操作命令
-r,–result-file=name:将输出的日志信息输出到指定的文件中,使用重定向也一样可以。
-s,–short-form:显示简单格式的日志,只记录一些普通的语句,会省略掉一些额外的信息如位置信息和时间信息以及基于行的日志。可以用来调试,生产环境千万不可使用
–set-charset=char_name:在输出日志信息到文件中时,在文件第一行加上set names char_name
–start-datetime,–stop-datetime:指定输出开始时间和结束时间内的所有日志信息
–start-position=#,–stop-position=#:指定输出开始位置和结束位置内的所有日志信息
-v,-vv:显示更详细信息,基于row的日志默认不会显示出来,此时使用-v或-vv可以查看
使用mysqlbinlog命令对mysql-bin.000001日志进行查看,如下:
[root@lgh3 mysql]# mysqlbinlog /data/binlog/mysql-bin.000001
/!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1/;
/!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0/;
DELIMITER /!/;
at 4
#190908 21:18:32 server id 1000 end_log_pos 123 CRC32 0x052f8ffd Start: binlog v 4, server v 5.7.24-log created 190908 21:18:32 at startup
ROLLBACK/!/;
BINLOG ’
aKh1XQ/oAwAAdwAAAHsAAAAAAAQANS43LjI0LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABoqHVdEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
Af2PLwU=
'/!/;
at 123
#190908 21:18:32 server id 1000 end_log_pos 154 CRC32 0x927edf95 Previous-GTIDs
[empty]
at 154
#190908 21:19:15 server id 1000 end_log_pos 219 CRC32 0xb05f419c Anonymous_GTID last_committed=0 sequence_number=1 rbr_only=no
SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’/!/;
at 219
#190908 21:19:15 server id 1000 end_log_pos 313 CRC32 0xaafce462 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1567991955/!/;
SET @@session.pseudo_thread_id=2/!/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/!/;
SET @@session.sql_mode=1075838976/!/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/!/;
/!\C utf8mb4 //!/;
SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/!/;
SET @@session.lc_time_names=0/!/;
SET @@session.collation_database=DEFAULT/!/;
create database test
/!/;
at 313
#190908 21:19:53 server id 1000 end_log_pos 378 CRC32 0xdccfd8ec Anonymous_GTID last_committed=1 sequence_number=2 rbr_only=no
SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’/!/;
at 378
#190908 21:19:53 server id 1000 end_log_pos 497 CRC32 0x57a45727 Query thread_id=2 exec_time=0 error_code=0
use test
/!/;
SET TIMESTAMP=1567991993/!/;
create table gxt1(id int , name varchar(128))
/!/;
at 497
#190908 21:20:17 server id 1000 end_log_pos 562 CRC32 0x316b41e9 Anonymous_GTID last_committed=2 sequence_number=3 rbr_only=yes
/!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED//!/;
SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’/!/;
at 562
#190908 21:20:17 server id 1000 end_log_pos 634 CRC32 0x693ee549 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1567992017/!/;
BEGIN
/!/;
at 634
#190908 21:20:17 server id 1000 end_log_pos 684 CRC32 0xde906285 Table_map: test
.gxt1
mapped to number 108
at 684
#190908 21:20:17 server id 1000 end_log_pos 734 CRC32 0xa0fc1d34 Write_rows: table id 108 flags: STMT_END_F
BINLOG ’
0ah1XRPoAwAAMgAAAKwCAAAAAGwAAAAAAAEABHRlc3QABGd4dDEAAgMPAgACA4VikN4=
0ah1XR7oAwAAMgAAAN4CAAAAAGwAAAAAAAEAAgAC//wBAAAACAB6aGFuZ3NhbjQd/KA=
'/!/;
at 734
#190908 21:20:17 server id 1000 end_log_pos 765 CRC32 0xc9208948 Xid = 10
COMMIT/!/;
at 765
#190908 21:30:18 server id 1000 end_log_pos 812 CRC32 0xda645def Rotate to mysql-bin.000002 pos: 4
SET @@SESSION.GTID_NEXT= ‘AUTOMATIC’ /* added by mysqlbinlog / /!*/;
DELIMITER ;
End of log file
/!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE/;
/!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0/;
上面蓝色字体表示位置,红色表示时间。
SHOW BINARY LOGS ;
SHOW MASTER LOGS ;
show binlog events in ‘mysql-bin.000001’;
SHOW MASTER STATUS;
表示二进制文件已经记录到了第四个,位置为418.
1.5.3、二进制文件的删除
1.reset master将会删除所有日志,并让日志文件重新从000001开始。
mysql> reset master;
2.PURGE { BINARY | MASTER } LOGS { TO ‘log_name’ | BEFORE datetime_expr }
purge master logs to “binlog_name.00000X” 将会清空00000X之前的所有日志文件。例如删除000006之前的日志文件。
mysql> purge master logs to “mysql-bin.000006”;
mysql> purge binary logs to “mysql-bin.000006”;
master和binary是同义词
purge master logs before ‘yyyy-mm-dd hh:mi:ss’ 将会删除指定日期之前的所有日志。但是若指定的时间处在正在使用中的日志文件中,将无法进行purge。
3.使用–expire_logs_days=N选项指定过了多少天日志自动过期清空
1.5.4、相关参数
log-bin=on|off|file_name #或者指定路径log-bin=/data/binlog/mysql-bin表示开启并设定路径,msyql5.7开启该参数必须分配server_id,否则mysql不能启动
server_id=1000 #指定server_id
max_binlog_size: #(默认1G)指定一个二进制文件的最大值,如果超过该值,则产生一个新的二进制日志文件(考虑到事务不可能跨两个binlog文件,所以有时binlog文件的实际大小不会等于设定值)
binlog_cache_size: #(默认32k)存储所有未提交的二进制日志记录,用于缓存,当该事务提交了,则会写入到二进制日志文件中,如果该参数太小,可能)存储所有未提交的二进制日志记录,用于缓存,当该事务提交了,则会写入到二进制日志文件中,如果该参数太小,可能
#会写入到磁盘,影响性能,可以通过查看参数binlog_cache_disk_use,表示写磁盘的次数
sync_binlog: #默认情况下,二进制日志不是每次写都会写入二进制日志文件中,(可以理解为缓冲)如果数据库异常宕机,就会存在二进制日志文件缺少记录的情况,可以通过参数sync_binlog=[N]来进行配置,当N=1时表示同步写磁盘的方式写二进制文件,这是不使用操作系统的缓冲来写日志。
#N=0(默认),虽然设置sync_binlog=1理论上保证了同步,但是当使用innodb存储引擎时,会存在二进制记录了操作,但是事务由回滚了的情况,
#可以通过参数innodb_support_xa=1来解决该问题,innodb_support_xa=1保证了二进制文件和存储引擎文件同步
binlog_do-db: #记录该数据库
binlog_ingnore-db: #忽略该数据库
log_slave-update: #如果当前数据库时复制中的slave角色,不会把从master获取到的二进制日志写入到自己的二进制文件中,如果需要,则需要开启
#这个参数,如果搭建master=>slave=>slave的架构复制,则必须开启此参数
binlog_format: #可以设置为如下的值
#statement:二进制日志文件都是记录的逻辑sql语句
#row:记录表行更改的情况,如果设置为该参数,可以将innodb存储引擎的事务隔离级别基本设置为READ COMMITTED,获得更好的并发,一般设置为row,虽然对磁盘和网络开销大一些,格式为二进制格式。使用mysqlbinlog工具查看
#mixed:mixed模式,默认使用statement配置
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算