概述

mysql里面有很多log,比如用于主从同步的bin_log,防止数据丢失的redo_log,慢查询日志slow_log等等

redo log

InnoDB有buffer pool(简称bp)。

bp是数据库页面的缓存,对InnoDB的任何修改操作都会首先在bp的page上进行,然后这样的页面将被标记为dirty并被放到专门的flush list上,后续将由master thread或专门的刷脏线程阶段性的将这些页面写入磁盘(disk or ssd)。这样的好处是避免每次写操作都操作磁盘导致大量的随机IO,阶段性的刷脏可以将多次对页面的修改merge成一次IO操作,同时异步写入也降低了访问的时延。然而,如果在dirty page还未刷入磁盘时,server非正常关闭,这些修改操作将会丢失,如果写入操作正在进行,甚至会由于损坏数据文件导致数据库不可用。为了避免上述问题的发生,Innodb将所有对页面的修改操作写入一个专门的文件,并在数据库启动时从此文件进行恢复操作,这个文件就是redo log file。 这样的技术推迟了bp页面的刷新,从而提升了数据库的吞吐,有效的降低了访问时延。 带来的问题是额外的写redo log操作的开销(顺序IO,当然很快),以及数据库启动时恢复操作所需的时间。

Undo Log

Undo

Log是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用UndoLog来实现多版本并发控制(简称:MVCC)。

事务的原子性(Atomicity)

事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在执行的过程中发了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过。

bin-log

binlog有三种格式:Statement、Row以及Mixed。

Statement

基于SQL语句的复制(statement-based replication,SBR),

每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)

Row

基于行的复制(row-based replication,RBR),默认

不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。

Mixed

混合模式复制(mixed-based replication,MBR)。

以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

查看binlog_format

show variables like 'binlog_format'

relay_log:

Mysql 主节点将binlog写入本地,从节点定时请求增量binlog,主节点将binlog同步到从节点。 从节点单独进程会将binlog

拷贝至本地 relaylog中。

从节点定时重放relay log。

slow-log

慢查询就是通过设置来记录超过一定时间的SQL语句,一般通过slowlog找到影响系统性能的sql

开启slow-log

在my.conf 中增加

slow_query_log = 1 // 开启slow-log long_query_time = 1 //

查询时间超过1s的sql会被记录

分析slow-log

在slow-log目录下执行

more slow-query.log

Query_time: 查询耗时

Rows_examined: 检查了多少条记录

Rows_sent : 返回了多少行记录(结果集)

通过分析slow-log文件,可以找到最慢的sql

按Rows_examined 逆序,列出前100条

grep Rows_examined slow-query.log | sort -g -k9 -r|uniq -u |head -100

指定Rows_examined一值,查找

grep -A 1 -B 2 "Rows_examined: 24460" slow-query.log

看到每秒的慢查询统计

awk '/^#Time:/{print $3,$4,c;c=0}/^# User /{c++}' slow-query.log >/tmp/aaa.log

mysqldumpslow命令

访问时间最长的10个sql语句

mysqldumpslow -t 10 /usr/local/mysql/log/3304/slowquery.log

访问次数最多的10个sql语句

mysqldumpslow -s c -t 10 /usr/local/mysql/log/3304/slowquery.log

访问记录集最多的10个sql

mysqldumpslow -s r -t 10 /usr/local/mysql/log/3304/slowquery.log

得到按照时间排序的前10条里面含有左连接的查询语句

mysqldumpslow -s t -t 10 -g “left join” /usr/local/mysql/log/3304/slowquery.log

详见mysqldumpslow -h

general_log

general_log可以记录所有执行过的sql,用于排查分析sql性能,但记录log会增加系统负担,可以暂时开启,分析完之后再关闭general_log

开启general_log

查看general_log

mysql log_来吧,了解下mysql有哪些log相关推荐

  1. linux上mysql允许远程连接,linux下mysql允许远程连接

    1. MySql安装教程 https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html 默认情况下mysq的 roo ...

  2. linux如何mysql实现导出数据库,Linux下MySQL导入导出数据库

    linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sq ...

  3. mysql 5.7 xbackup_CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup

    前言 CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup ,记录一下大致的安装和配置过程. Percona XtraBackup 的备份工具支持热备份(即不必停止 M ...

  4. centos mysql拒绝连接失败_CentOS下mysql远程连接的失败的解决方法

    mysql远程连接失败的解决方法(CentOS版) (1)先将mysql服务停掉 # /etc/init.d/mysqld stop (2)查看mysql配置文件 # vi /etc/my.cnf 特 ...

  5. linux mysql设置数据库utf_Linux系统下MySQL数据库服务器字符集设置

    Linux认证考试:Linux系统下的MySQL数据库服务器字符集设置 启动MySQL后,以root登录mysql isher@isher-ubuntu:~$ mysql -u root >sh ...

  6. mac mysql utf 8编码_MacOS下MySQL设置UTF8编码问题

    1,检查默认安装的MySQL的字符集 mysql> show variables like '%char%'; +--------------------------+------------- ...

  7. ubantu mysql允许外部链接_ubuntu 下mysql 设置允许远程连接

    ubuntu: 安装mysql-server,sudo apt-get install mysql-server mysql 安装成功后查看mysql状态:/etc/init.d/mysql stat ...

  8. 查看linux mysql 账户权限设置_Linux下mysql新建账号及权限设置各种方式总结

    来自:http://justcoding.iteye.com/blog/1941116 1.权限赋予 说明:mysql部署在服务器A上,内网上主机B通过客户端工具连接服务器A以进行数据库操作,需要服务 ...

  9. windows下配置mysql数据库_mysql数据库1-windows下mysql安装及配置

    1.下载: 地址:http://dev.mysql.com/downloads/mysql/ 2.安装: 将下载的mysql-5.7.16-winx64压缩包解压后的整个目录放在自己喜欢的位置,我的放 ...

  10. centos7 mysql安装教程_centos7环境下MySQL安装教程

    Linux centos7环境下安装MySQL步骤的详细介绍 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执 ...

最新文章

  1. 那些常见的Web前端学习误区分享
  2. mysql5.0 java连接_Java连接mysql5.0
  3. mysql基本架构_MySQL的基本架构
  4. 详解Python GUI版24点游戏制作过程
  5. 做报表5年,被批Excel毫无新意,能开发的可视化报表让我重获新生
  6. MySQL数据库(七)
  7. 7-7 mmh学长的大数模板 (20分)
  8. 双十二大前端工程师读书清单
  9. 微信撤回软件安卓版_微信无限时间撤回软件
  10. 深入原理64式:40 概率论公式总结
  11. 成分句法分析综述(第二版)
  12. apng2gif各种问题的解决
  13. 基于java的志愿信息管理系统_毕业设计 基于JAVA的志愿者管理系统的设计与实现...
  14. 转载篇:RabbitMQ安装步骤和出现Plugin configuration unchanged.和出现1067系统错误.总结
  15. 守护绿水青山,环保数采仪一马当先!
  16. MOSES的高级特征和功能
  17. 402-字符串(题目:剑指Offer58-II.左旋转字符串、 28. 实现 strStr()、459.重复的子字符串)
  18. centos 安装maven
  19. 霍金去世-时间有没有尽头?Stephen William Hawking
  20. 磷酸除杂回用去除铁、铝、氟

热门文章

  1. Java命令行界面(第17部分):jw-options
  2. Jirasearch 2.0狗粮:使用Lucene查找我们的Jira问题
  3. java并发任务执行_Java并发性-任务反馈
  4. uibinder表单提交_使用UIBinder的GWT自定义按钮
  5. Java 8 Optional不仅用于替换空值
  6. 开始JBoss BPM流程的3种基本方法
  7. 如何在JavaServer Pages中使用Salesforce REST API
  8. 如何使用Play框架为https配置SSL证书
  9. Java StringBuilder神话被揭穿
  10. 使用Ajax的Spring MVC REST调用