1. 首页>
  2. 腾讯云代理

[技术前沿] mysql入门教程: 11. mysql日志管理

腾讯云 2017年02月03日 浏览661

腾讯云代理 腾讯云直播申请 游戏上云

摘要:

mysql日志管理

一、错误日志      
记录msyql启动、运行或停止时出现的问题,这个是默认开启的日志,该日志是定位mysql异常最重要的渠道。

mysql> show global variables like '%log_error%';
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error     | /var/log/mysqld.log |
+---------------+---------------------+
1 row in set (0.00 sec)

可以查询到当前错误日志的路径 
可以在mysql的配置文件 my.cnf 中 用 --log-error[=file_name]  选项来手动指定错误日志文件的名称和位置。

二、慢查询日志
mysql如果启用了slow_query_log=ON选项,就会记录执行时间超过long_query_time的查询。

mysql> show global variables like '%slow_query_log%';
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| slow_query_log      | OFF                             |
| slow_query_log_file | /var/run/mysqld/mysqld-slow.log |
+---------------------+---------------------------------+
2 rows in set (0.00 sec)

可以查询到当前慢查询日志的路径 
可以在mysql的配置文件 my.cnf 中 ,添加如下参数就可以开启慢查询日志,并自定义日志的名称和路径
log-slow-queries = /usr/local/mysql/mysql-slow.log  

mysql默认没有启用慢查询,为了服务器调优,建议开启,使用如下命令进行开启。

mysql> set global slow_query_log=ON;
Query OK, 0 rows affected (1.45 sec)

那么多久算是慢查询呢?  如果查询时长超过long_query_time的定义值(默认10秒),即为慢查询:
mysql> show global variables like 'long_query_time';
+-----------------+-----------+
| Variable_name    | Value         |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+

可以自行修改这个long_query_time 参数,例如设置为2秒

mysql> set global long_query_time=2;  
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 2.000000 |
+-----------------+----------+
1 row in set (0.00 sec)

此时执行时间超过2秒的sql语句都会记录到慢查询日志中去

三、binlog日志  

binlog日志  日志用于记录所有更改数据的语句, 主要用于复制和即时点恢复, 另外主从复制也是依赖于binlog的。


mysql默认是没有开发bin-log日志,首先我们需要开启bin-log日志,在my.cnf中添加如下参数就可以开启binlog
log-bin=mysql-bin              表示二进制日志是以mysql-bin.* 形式命名的, *代表日志的序号, 序号是递增的
binlog-do-db=MAIN          表示只针对MAIN库记录binlog
max_binlog_size = 200M    表示限制二进制日志最大尺寸为200M,超过200M后进行滚动。每次重启MySQL服务,日志都会自动滚动一次。

查看有哪些二进制日志文件:
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       185 |
+------------------+-----------+
1 row in set (0.00 sec)

代表当前只有一个binlog , mysql-bin.000001 

查看当前正在使用的是哪一个二进制日志文件,position点是多少:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      185 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


后续章节中会再详细讲解一下binlog日志的用途和使用方法。


四、通用日志/查询日志    
只记录sql语句,而不记录操作结果,当你怀疑在客户端发生了错误并想确切地知道该客户端发送给mysqld的语句时,该日志可能非常有用。

开启通用日志
mysql> set global general_log=ON;
mysql> show variables like '%general%'; 
+------------------+---------------------------------------+
| Variable_name    | Value                                 |
+------------------+---------------------------------------+
| general_log      | ON                                    |
| general_log_file | /usr/local/mysql/data/GW-DB.log |
+------------------+---------------------------------------+  

启动开关:general_log={ON|OFF}
日志文件变量:general_log_file[=/PATH/TO/file]
记录类型:log_output={TABLE|FILE|NONE}
general_log_file如果没有指定,默认名是host_name.log。


五、客户端日志 
记录客户端所有sql语句操作,既记录sql语句又记录操作结果,相当于保存屏幕,只记录本机的操作,远程连接的操作不记录。

可以在mysql的配置文件 my.cnf 中 用如下选项来开启并指定日志路径和名称
[client]
loose-tee=/var/log/mysql_client.log

六、InnoDB redo log

1、用来实现灾难恢复,突然断电导致innodb 表空间中的数据没有被更新到磁盘上,通过重新执行redo log能够重新执行这些操作来恢复数据。 
2、提升innodb的I/O性能。innodb引擎把数据和索引都载入到内存中的缓冲池(buffer pool)中,如果每次修改数据和索引都需要更新到磁盘,必定会大大增加I/O请求,而且因为每次更新的位置都是随机的,磁头需要频繁定位导致效率低,索引innodb每处理完一个请求后只添加一条日志log,另外有一个线程负责智能地读取日志文件并批量更新到磁盘上,实现最高效的磁盘写入。



innodb_log_buffer_size                 innodb日志缓冲池大小
innodb_log_file_size                      innodb日志大小
innodb_log_files_in_group=2        默认是2.使用特殊方法修改        
innodb_log_group_home_dir        可以自己指定位置
innodb_flush_log_at_trx_commit
innodb_os_log_written                 往日志文件中写了多少字节数
innodb_os_log_fsyncs                  记录往磁盘写日志的次数


日志:
/usr/local/mysql/data/
-rw-r----- 1 mysql mysql   104857600 Aug  7 06:10 ib_logfile0
-rw-r----- 1 mysql mysql   104857600 Apr 13 23:36 ib_logfile1


mysql> show variables like '%innodb_log%';
+---------------------------+-----------+
| Variable_name             | Value     |
+---------------------------+-----------+
| innodb_log_buffer_size    | 134217728 |
| innodb_log_file_size      | 104857600 |
| innodb_log_files_in_group | 2         |
| innodb_log_group_home_dir | ./        |
+---------------------------+-----------+
-------------------------------------------------------------------------------------------

auto_1452.png

原文地址:http://bbs.qcloud.com/thread-6800-1-1.html

相关文章

在线客服
淘宝购买
腾讯云直播申请 title=
+成为腾讯云VIP客户 腾讯云直播申请 客服电话

15818558013

0755-33940501-803

0755-33940501-808