MySQL&PostgresQL慢查询日志


title: MySQL&PostgresQL慢查询日志
author: KawYang
top: false
cover: false
toc: true
mathjax: false
categories: SQL
tags:

  • SQL
    abbrlink: b92ce138
    date: 2021-10-06 19:38:35
    img: https://www.postgresql.org/media/img/misc/banner.jpg
    coverImg: https://www.postgresql.org/media/img/misc/banner.jpg

MySQL

查看设置

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.21 Homebrew

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like '%query%';
+------------------------------+-----------------------------------+
| Variable_name                | Value                             |
+------------------------------+-----------------------------------+
| binlog_rows_query_log_events | OFF                               |
| ft_query_expansion_limit     | 20                                |
| have_query_cache             | NO                                |
| long_query_time              | 10.000000                         |
| query_alloc_block_size       | 8192                              |
| query_prealloc_size          | 8192                              |
| slow_query_log               | OFF                               |
| slow_query_log_file          | /usr/local/var/mysql/Pro-slow.log |
+------------------------------+-----------------------------------+
8 rows in set (0.00 sec)
  • long_query_time : 设置记录查询语句时间的阈值, 单位 (S)
  • slow_query_log : 慢查询日志的开关
  • slow_query_log_file : 慢查询日志的路径,文件路径可以不用设置,如果mysql对当前路径不能写,日志开关不起作用

修改配置文件

修改 /usr/local/etc/my.cnf 配置文件内容,在[mysqld]中添加以下内容

long_query_time=1 
slow_query_log =1
slow_query_log_file= /usr/local/var/mysql/Pro-slow.log
log_queries_not_using_indexes=1 # 开启无索引的查询记录

重启

# Mac
> mysql.server restart

# Linux 
> service mysqld restart

测试

mysql> show variables like '%query%';
+------------------------------+-----------------------------------+
| Variable_name                | Value                             |
+------------------------------+-----------------------------------+
| binlog_rows_query_log_events | OFF                               |
| ft_query_expansion_limit     | 20                                |
| have_query_cache             | NO                                |
| long_query_time              | 1.000000                          |
| query_alloc_block_size       | 8192                              |
| query_prealloc_size          | 8192                              |
| slow_query_log               | ON                                |
| slow_query_log_file          | /usr/local/var/mysql/Pro-slow.log |
+------------------------------+-----------------------------------+
8 rows in set (0.01 sec)

mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.00 sec)
mysql> exit
Bye
$ cat /usr/local/var/mysql/Pro-slow.log
/usr/local/Cellar/mysql/8.0.21/bin/mysqld, Version: 8.0.21 (Homebrew). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
# Time: 2021-10-06T12:52:12.249937Z
# User@Host: root[root] @ localhost []  Id:     8
# Query_time: 2.003272  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1
SET timestamp=1633524730;
select sleep(2);

删除日志文件后需要重启mysql 才能保存,不然文件不会重建.

修改日志文件存储到挂载磁盘

# 1. 移动日志文件到 /home下
mv /usr/local/var/mysql/Pro-slow.log /home/
# 2. 在原本日志路径建立软连接
ln -s /home/Pro-slow.log /usr/local/var/mysql/Pro-slow.log

PostgreSQL1

当前 PostgreSQL 使用的是docker 镜像,对应 版本为 daocloud.io/library/postgres:11-alpine

PostgreSQL 设置:

参数名称状态说明
logging_collectoronStart a subprocess to capture stderr output and/or csvlogs into log files.
log_min_duration_statement1sSets the minimum execution time above which statements will be logged.
log_filenamepostgresql-%Y-%m-%d_%H%M%S.logSets the file name pattern for log files.

查看设置

$ psql -h localhost -U postgres -p 3456
Password for user postgres: 
psql (13.4, server 11.4)
Type "help" for help.

postgres=# show log_min_duration_statement;
 log_min_duration_statement 
----------------------------
 1s
(1 row)

postgres=# 

修改设置

通过 docker exec -it posgres /bin/bash 进入docker 容器,修改 /var/lib/postgresql/data/postgresql.conf文件,修改内容如下:

image-20211006215637406

重新加载设置

参考1

测试

日志文件设置为 log 的存储位置为 /var/lib/postgresql/data/log/

$ psql -h localhost -U postgres -p 3456  
Password for user postgres: 
psql (13.4, server 11.4)
Type "help" for help.

postgres=# select pg_sleep(2);
 pg_sleep 
----------
 
(1 row)

postgres=# exit

$ docker exec -it postgres /bin/bash                                                                                                                                                                                     22:45  
bash-5.0# cd /var/lib/postgresql/data/log/
bash-5.0# ls
postgresql-2021-10-06_144542.log
bash-5.0# cat postgresql-2021-10-06_144542.log 
2021-10-06 14:45:42.013 UTC [19] LOG:  database system was shut down at 2021-10-06 14:45:40 UTC
2021-10-06 14:45:42.016 UTC [1] LOG:  database system is ready to accept connections
2021-10-06 14:47:05.283 UTC [42] FATAL:  password authentication failed for user "postgres"
2021-10-06 14:47:05.283 UTC [42] DETAIL:  Password does not match for user "postgres".
	Connection matched pg_hba.conf line 95: "host all all all md5"
2021-10-06 14:47:22.512 UTC [44] LOG:  duration: 2001.597 ms  statement: select pg_sleep(2);
bash-5.0# 

配置修改错误后,docker 不能重启解决方案2

虽然docker容器未启动,但是docker cp 命令依然可以用,所以使用docker cp命令拷贝出来,修改正确后再拷贝回相对应的位置,即可.

虽然 Linux 能找到容器文件的挂载位置,但是Mac没找到相应的文件.

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

参考内容

postgresql开启慢查询日志
Docker容器无法启动,里面的配置文件如何修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值