设为首页 收藏本站
查看: 510|回复: 0

[经验分享] MySQL日志简介

[复制链接]
发表于 2018-10-7 09:48:35 | 显示全部楼层 |阅读模式
  MySQL中的日志主要分为以下几种:
  查询日志
  慢查询日志
  错误日志
  二进制日志
  中继日志
  事务日志
  说明:
  支持本文实验使用的linux系统是CentOS7版本,使用的数据库是base源自带的MariaDB,数据库使用的存储引擎使用默认的InnoDB
  1、查询日志
  记录查询语句、日志存储位置
  日志的存放位置有两个地方:一是存储在指定文件中,一是存储在指定的表中。考虑到I/O压力,一般二者不会同时记录
MariaDB [mysql]>  SHOW VARIABLES LIKE 'general%';  
+------------------+-------------+
  
| Variable_name    | Value       |
  
+------------------+-------------+
  
| general_log      | ON          |
  
| general_log_file | centos7.log |
  
+------------------+-------------+
  
2 rows in set (0.00 sec)
  
#general_log默认是关闭的
  从上述代码可以看出,查询日志具有两个变量;
  下面来查看general_log表的详细信息:
MariaDB [mysql]> DESC  general_log;  
+--------------+------------------+------+-----+-------------------+-----------------------------+
  
| Field        | Type             | Null | Key | Default           | Extra                       |
  
+--------------+------------------+------+-----+-------------------+-----------------------------+
  
| event_time   | timestamp(6)     | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
  
| user_host    | mediumtext       | NO   |     | NULL              |                             |
  
| thread_id    | int(11)          | NO   |     | NULL              |                             |
  
| server_id    | int(10) unsigned | NO   |     | NULL              |                             |
  
| command_type | varchar(64)      | NO   |     | NULL              |                             |
  
| argument     | mediumtext       | NO   |     | NULL              |                             |
  
+--------------+------------------+------+-----+-------------------+-----------------------------+
  
6 rows in set (0.00 sec)
  事件时间
  用户主机
  事件的进程id
  服务id
  命令类型
  参数
  以上这些信息构成了general_log的主要内容,即记录的查询日志的操作内容可以通过上述信息显示
SET @@global.general_log=ON;  
#默认此变量是全局的,但是修改后能够立即生效
  开启查询日志后,接着我们进行一些查询操作如:
SELECT user,host,password FROM mysql.user;  这些查询操作就会被记录到日志文件centos7.log文件中,此文件是默认文件可以修改。而此文件的存放路径是相对路径即/var/lib/mysql/
cat  /var/lib/mysql/centos7.log  
#能看到记录的查询操作了
  以上演示的是日志信息记录在文件中,日志还可以记录在指定表中,只要修改一个变量即可:
SET @@global.log_output=TABLE;  
#默认是FILE
  关于表的日志记录与文件记录类似,不再演示
  2、慢查询日志
  慢查询:一条查询指令运行时间超出一定时长的操作,这种操作会对用户的体验大打折扣,应该尽量避免
  一般建议启动此慢查询日志功能
MariaDB [mysql]> SELECT @@global.long_query_time;  
+--------------------------+
  
| @@global.long_query_time |
  
+--------------------------+
  
|                10.000000 |
  
+--------------------------+
  
1 row in set (0.00 sec)
  默认的慢查询时间是10秒钟
SELECT @@global.slow_query_log;  
#默认关闭慢查询日志
  
SELECT @@global.slow_query_log_file;
  
#默认文件名称为主机名-slow.log,如centos7-slow.log
  
SELECT @@global.log_output;
  
#默认是文件记录
  并不是所有的指令执行时间超过10秒钟都会记录,其是有一个过滤器的
SELECT @@global.log_slow_filter;  
#此变量指定的指令才会使用慢查询
  慢查询日志的用法与general_log的基本相同,不再赘述
  3、错误日志
  顾名思义,记录错误信息,主要记录如下几类信息:
  (1) mysqld启动和关闭过程中输出的信息;
  (2) mysqld运行中产生的错误信息;
  (3) event scheduler运行时产生的信息;
  (4) 主从复制架构中,从服务器复制线程启动时产生的日志;
  错误日志是否开启,可以使用下述命令查看
SELECT @@global.log_error;  
#默认是开启的,即指定具体日志文件路径 如/var/log/mariadb/mariadb.log
  
#如果未开启,则查询的结果是OFF
  4、二进制日志
  用于记录引起数据改变或存在引起数据改变的潜在可能性的语句(STATEMENT)或改变后的结果(ROW),也可能是二者混合;
  作用:
  重放 (replay),即发生故障时可以使用二进制日志重新操作一遍故障发生前的指令
  试想一下,在进行了全量备份数据库后,过了一天主数据库设备突然出现故障,这时我们虽然能够使用全量备份来恢复数据库,但是前一天的数据还未来得及备份,也就是说
  少了一天的数据,这种情况下就可以使用二进制日志恢复缺失的一天的信息;
  下面举个例子说明二进制日志在数据恢复中的重要作用:

  •   创建数据库、表,插入数据
CREATE DATABASE RDBMS;  
USE RDBMS;
  
CREATE TABLE tbl (id int primary key,name char(30) not null,age int not null);
  
INSERT INTO tbl VALUES (1,'xiao wang',20),(2,'xiao li',22);

  •   检查信息
MariaDB [RDBMS]> DESC tbl;  
+-------+----------+------+-----+---------+-------+
  
| Field | Type     | Null | Key | Default | Extra |
  
+-------+----------+------+-----+---------+-------+
  
| id    | int(11)  | NO   | PRI | NULL    |       |
  
| name  | char(30) | NO   |     | NULL    |       |
  
| age   | int(11)  | NO   |     | NULL    |       |
  
+-------+----------+------+-----+---------+-------+
  
3 rows in set (0.00 sec)
  

  
MariaDB [RDBMS]> SELECT * FROM tbl;
  
+----+-----------+-----+
  
| id | name      | age |
  
+----+-----------+-----+
  
|  1 | xiao wang |  20 |
  
|  2 | xiao li   |  22 |
  
+----+-----------+-----+
  
2 rows in set (0.00 sec)

  •   修改mysql的服务配置文件,开启二进制日志功能
rpm -ql mariadb-server  
#可以查到配置文件的位置
  
vim /etc/my.cnf.d/server.cnf
  
[server]
  
log_bin = /app/logs/master-log
  
#指定二进制日志的存放路径,之所以在配置文件修改而不用命令行,是因为命令行不支持开启二进制日志功能
  
#注意要先创建/app/logs目录,并授权mysql用户权限,让偶重启mysql服务

  •   查看二进制日志信息
SHOW MASTER|BINARY LOGS;  
#查看二进制日志文件列表
  
SHOW MASTER STATUS;
  
#查看当前正在使用的二进制日志文件
  
SHOW BINLOG EVENTS IN 'master-log.000001';
  
#查看二进制日志文件的事件信息

  •   将当前数据库进行全量备份
mysqlbinlog  -uroot -p master-log.000001 > /root/binlog.sql  
#binlog.sql就是备份的数据库文件
  
#mysqlbinlog是mysql自带的二进制日志工具
  当在全新的备份服务器上就行恢复时
mysql < /root/binlog.sql  按上述方式恢复即可
  在/app/logs/下的二进制文件是无法直接使用cat或less查看的,所以需要使用mysqlbinlog专用工具
mysqlbinlog  -uroot -pcentos master-log.000007 -j 430 --stop-position=874  
#-j 指定开始位置
  
#--stop-position指定结束位置
  查看的内容包含以下信息:
  事件的起始位置# at 553
  事件发生的日期时间:#160831  9:56:08

  事件发生的服务器id:server>  事件的结束位置:end_log_pos 624
  事件的类型:Query
  事件发生时所在服务器执行此事件的线程的ID: thread_id=2
  语句的时间戳与将其写入二进制日志文件中的时间差:exec_time=0
  错误代码:error_code=0
  设定事件发生时的时间戳:SET TIMESTAMP=1472608568/*!*/;
  事件内容:BEGIN
  以上就是关于mysql日志的简单介绍



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-614202-1-1.html 上篇帖子: MySQL 查询语句select讲解与练习 下篇帖子: mysql基于SSL实现主从复制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表