日志

事务日志: transaction log

中继日志: reley log错误日志: error log

通用日志: general log

慢查询日志: slow query log

二进制日志: binary log

事务日志

transaction log:事务型存储引擎自行管理和使用

在一个事务提交后还没有存到磁盘的情况下会记录到事务日志,这个时候如果系统断电,再次开机后会自动将已提交的事务重做(redo log)写入磁盘;如果事务还没有提交的情况下断电重启后会执行撤销操作(undo log)

相关变量

innodb_log_file_size默认大小为5M,innodb_log_files_in_group个数默认2个;强烈建议调大这俩个值;

如果事务操作的数据大于事务日志文件总大小,在执行ROLLBACK时:可以撤销,但是数据文件会被占用,需要使用OPTIMIZE TABLE命令来释放数据空间;

使用TRUNCATE删除表记录可以缩小占用空间,DELETE命令不会释放磁盘空间,如果需要释放需要使用OPTIMIZE命令从新整理碎片来释放空间。

注意:修改innodb_log_file_size时需要先删除原来的日志文件

错误日志

错误日志中记录项目:

  1. mysqld启动和关闭过程中输出的事件信息
  2. mysqld运行中产生的错误信息
  3. event scheduler运行一个event时产生的日志信息
  4. 在主从复制架构中的从服务器上启动从服务器线程时产生的信息

相关变量

log_warnings=1|0 默认值1(是):是否记录警告信息至错误日志文件

查询日志

记录用户的操作日志,一般不建议启用

MariaDB [hellodb]> SHOW VARIABLES LIKE 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE | # 以什么方式存放日志,(TABLE|FILE|NONE)
+---------------+-------+

mysql.general_log:表存放查询日志,前提是以表方式存放的

慢查询日志

记录执行查询时长超出指定时长的操作

MariaDB [hellodb]> show variables like 'slow_query%';
+---------------------+------------------+
| Variable_name | Value |
+---------------------+------------------+
| slow_query_log | OFF |--开启或关闭慢查询日志
| slow_query_log_file | centos7-slow.log |--慢查询日志文件
+---------------------+------------------+
rows in set (0.00 sec)
MariaDB [hellodb]> SHOW VARIABLES LIKE 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |--慢查询的阀值,单位秒,查询时间超过10则记录到慢查询日志
+-----------------+-----------+
row in set (0.00 sec) MariaDB [hellodb]> SHOW VARIABLES LIKE 'log_slow%';
+---------------------+------------------------------+
| Variable_name | Value |
| log_slow_rate_limit | |-- 多少次查询才记录,mariadb特有
| log_slow_verbosity | |-- 记录内容的详细程度(Query_plan,explain)
+---------------------+------------------------------+
rows in set (0.00 sec) MariaDB [hellodb]> SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |-- 记录没有利用索引查询,而使用全文扫描的语句;默认关闭,建议开启
+-------------------------------+-------+
row in set (0.00 sec)
log_slow_filter :根据查询结果过滤
admin
filesort
filesort_on_disk
full_join
full_scan
query_cache
query_cache_miss
tmp_table
tmp_table_on_disk

补充:利用 profiling 跟踪查询语句所用的详细时间

MariaDB [hellodb]> show variables like 'profiling';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| profiling | OFF |-- 开启或关闭,默认关闭
+---------------+-------+
row in set (0.00 sec) MariaDB [hellodb]> SET profiling=ON; #开启查询语句跟踪功能
Query OK, rows affected (0.00 sec) MariaDB [hellodb]> SHOW profiles; #查询语句执行的时间列表
+----------+------------+---------------------------------+
| Query_ID | Duration | Query |
+----------+------------+---------------------------------+
| | 0.00006851 | SET profiling=ON |
| | 0.00049469 | show variables like 'profiling' | |
+----------+------------+---------------------------------+
rows in set (0.00 sec)
MariaDB [hellodb]> SHOW profile FOR query ;  #查询指定编号的SQL语句的详细执行过程
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000035 |
| Opening tables | 0.000003 |
| After opening tables | 0.000006 |
| query end | 0.000003 |
| closing tables | 0.000002 |
| freeing items | 0.000011 |
| updating status | 0.000006 |
| cleaning up | 0.000001 |
+----------------------+----------+

二进制日志

记录已提交事务导致数据改变或潜在导致数据改变的SQL语句,通过“重放”日志文件中的事件来生成数据副本,不依赖存储引擎类型。

注意:开启二进制日志,默认是关闭的,二进制日志和数据分开存放

开启记录二进制文件的功能:在my.cnf的[mysqld]下加入log_bin[=/path/somefile]

默认二进制日志在数据库目录下,mariadb-bin.000001 为二进制日志数据文件,mariadb-bin.index 为二进制日志索引文件

记录二进制日志的三种方式:

  • 基于语句的记录方式,每一条改变数据的语句记录为一条语句,节省空间,系统默认为此模式,但是不推荐使用,会有隐藏的风险
  • 基于行的记录方式,每一行的改变都会将使其改变的语句记录为一条语句,日志量会很大,但是对数据的安全保护非常高
  • 混合模式:mixed, 让系统自行判定该基于哪种方式进行
MariaDB [hellodb]> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |--记录方式,系统默认基于语句方式
+---------------+-----------+
row in set (0.00 sec)
SET binlog_format='ROW|STATEMENT|MIXED'; -- 修改二进制日志记录方式

二进制日志的相关变量

开启二进制日志

MariaDB [(none)]> show variables like 'sql_log_bin';-- 是否记录二进制日志,默认ON
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_log_bin | ON |
+---------------+-------+
row in set (0.00 sec)

由于SHOW VARIABLES LIKE 'log_bin';不支持动态修改,所以编辑配置文件vim /etc/my.cnf

新建mkdir /data/mysqllogs/

修改所有者所有组chown -g mysql.mysql /data/mysqllogs/

指定文件位置;默认OFF,表示不启用二进制日志功能,上述两项都开启才可

MariaDB [(none)]> show variables like 'max_binlog_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| max_binlog_size | |-- 单个二进制日志文件的最大体积,到达最大值会自动滚动,默认为1G
+-----------------+------------+
row in set (0.00 sec) MariaDB [(none)]> show variables like 'sync_binlog';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sync_binlog | |-- 设定是否启动二进制日志即时同步磁盘功能,默认0,由操作系统负责同步日志到磁盘
+---------------+-------+
row in set (0.00 sec) MariaDB [(none)]> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | |-- 二进制日志可以自动删除的天数。 默认为0,即不自动删除
+------------------+-------+
row in set (0.00 sec)
MariaDB [(none)]> SHOW MASTER|BINARY LOGS; -- 查看mariadb自行管理使用中的二进制日志文件列表
+--------------------+-----------+
| Log_name | File_size |
+--------------------+-----------+
| mariadb-bin. | |
| mariadb-bin. | |
| mariadb-bin. | |
| mariadb-bin. | |
+--------------------+-----------+
MariaDB [(none)]> SHOW MASTER STATUS; -- 查看使用中的二进制日志文件
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin. | | | |
+--------------------+----------+--------------+------------------+
MariaDB [(none)]> SHOW BINLOG EVENTS IN 'mariadb-bin.000004' FROM LIMIT ,\G -- 查看二进制文件中的指定内容

mysqlbinlog命令

二进制日志的客户端命令工具

--start-position=# 指定开始位置
--stop-position=# 指定结束位置
--start-datetime=(YYYY-MM-DD hh:mm:ss) 指定开始时间
--stop-datetime=(YYYY-MM-DD hh:mm:ss) 指定结束时间
--base64-output=decode-row
-v |-vv |-vvv |-vvvv 显示详细信息
[root@centos7 mysql]# mysqlbinlog --start-position= --stop-position= mariadb-bin. --base64-output=decode-row -v
# at
# :: server id end_log_pos Query thread_id= exec_time= error_code=
use `school`/*!*/;
SET TIMESTAMP=/*!*/;
INSERT students(StuID,Name,Age,Gender) VALUES (,'Tom',,'M') #改变数据的SQL语句
/*!*/; 事件发生的日期和时间: ::
事件发生的服务器标识:server id
事件的结束位置:end_log_pos
事件的类型:Query
事件发生时所在服务器执行此事件的线程的ID:thread_id=
语句的时间戳与将其写入二进制文件中的时间差:exec_time=
错误代码:error_code=
事件内容:
GTID:Global Transaction ID,mysql5.6以mariadb10以上版本专属属性:GTID

使用mysqlbinlog mariadb-bin.000001 > file.sql命令重定向到SQL文件中,再使用mysql -uroot -p < file.sql命令可以直接导入数据,实现了备份还原的功能

二进制日志的管理

MariaDB [(none)]> PURGE BINARY LOGS TO 'mariadb.000002'; -- 删除到02,注意:02不删除
MariaDB [(none)]> PURGE BINARY LOGS BEFORE '2018-01-23'; -- 删除2018--23之前的日志
MariaDB [(none)]> PURGE BINARY LOGS BEFORE '2017-03-22 09:25:30';
MariaDB [(none)]> RESET MASTER; -- 删除所有二进制日志,index文件重新记数
MariaDB [(none)]> FLUSH LOGS; -- 手动触发日志滚动

mysql —日志记录的更多相关文章

  1. 启用mysql日志记录执行过的sql

    在mysql命令行或者客户端管理工具中执行:SHOW VARIABLES LIKE "general_log%"; 结果: general_log OFF general_log_ ...

  2. mysql数据库安全性配置——日志记录

    一:开启数据库日志记录 (1)在查看数据库是否开启日志记录,默认是OFF,即关闭状态.(可在数据库中执行该查询语句,也可在服务器端执行) show variables like 'log_bin'; ...

  3. 如何在MySql中记录SQL日志

    SQL server有一个sql profiler可以实时跟踪服务器执行的SQL语句,这在很多时候调试错误非常有用.例如:别人写的复杂代码.生产系统.无调试环境.无原代码... ...   查了一下资 ...

  4. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  5. Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息

    Atitit mysql 存储过程捕获所有异常,以及日志记录异常信息 1.1. 异常的处理模式exit  continue undo模式 1 1.2. 捕获所有异常使用        DECLARE ...

  6. (4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解

    关键词:binlog模式,binlog,二进制日志,binlog日志 目录概述 0.binlog概述 查看binlog日志参数设置: show variables like '%log_bin%'; ...

  7. mysql 开启慢查询 如何打开mysql的慢查询日志记录

    mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢,接下来将详细为您介绍 原文出自:http://www.jbxue ...

  8. 日志记录:MySQL系列之十一

    一.SQL命令历史 ~/.mysql_history 记录了在mysql中执行的命令历史 二.事务日志 transaction log:事务型存储引擎自行管理和使用 在一个事务提交后还没有存到磁盘的情 ...

  9. 使用log4net无法将日志记录插入mysql数据库解决办法

    写在前面 今天没事研究了下,将日志文件写入mysql数据库,因为新公司用的数据库也是mysql,项目中需要将日志信息写入数据库,没办法,就研究了下.在使用过程中遇到一个很蛋疼的问题.最后解决了,郁闷了 ...

随机推荐

  1. VBA if...elseif...else语句

    一个If语句,后面可以跟一个或多个由布尔表达式组成的elseif语句,然后是一个默认的else语句,当所有条件变为false时执行else语句块. 语法 以下是VBScript中If...Elseif ...

  2. Unity使用Resources读取Resources路径下的二进制文件(Binary Data)必须使用 .bytes扩展名

    将某二进制文件放在Resources目录下,希望用Resources.Load<TextAsset>的方式读取,发现TextAsset是null 查阅Unity文档得知,使用Resourc ...

  3. ElementUi使用表单验证出现验证问题

    问题: 使用vue element-ui中的form表单验证出现了输入框或者下拉框中明明有值, 但是却还是提示请输入或请选择,错误如下: <el-form status-icon :ref=&q ...

  4. MYSQL的B+Tree索引树高度如何计算

    前一段被问到一个平时没有关注到有关于MYSQL索引相关的问题点,被问到一个表有3000万记录,假如有一列占8位字节的字段,根据这一列建索引的话索引树的高度是多少? 这一问当时就被问蒙了,平时这也只关注 ...

  5. 安卓已过时的ProgressDialog对话框

    private ProgressDialog mDialog; private Handler mHandler; //初始化Handler //初始化 mDialog = new ProgressD ...

  6. 小白_开始学Scrapy__原理

    整体架构 引擎(Scrapy Engine),用来处理整个系统的数据流处理,触发事务. 调度器(Scheduler),用来接受引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回. 下载器(Dow ...

  7. 操作系统 (OS)

    1. 操作系统(Operation System,OS) 操作系统作为接口的示意图 没有安装操作系统的计算机,通常被称为 裸机 如果想在 裸机 上运行自己所编写的程序,就必须用机器语言书写程序 如果计 ...

  8. sql注入原理,利用与防护

    一.sql注入原理 注入攻击的本质就是把用户输入的数据当作代码来执行.所以注入攻击有两个必要条件 1.用户能够控制的输入. 2.原本程序要执行的代码,拼接了用户输入的数据. 二.sql注入分类 按照请 ...

  9. PHP获取不到url传递参数中#&等特殊字符解决方法

    有些符号在URL中是不能直接传递的,无法传入PHP处理,比如#&等符号,通过$_GET是获取不到的,比如一个域名https://localhost/url.php?url=yangyufei+ ...

  10. FFmpeg常用命令学习笔记(七)直播相关命令

    直播相关命令 主要涉及到直播中的推流和拉流 1.直播推流 ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName -re: ...