Open1

private-isuでsqldumpslowができなくて詰まった[docker環境]

shaobashaoba

https://github.com/catatsuy/private-isu

ISUCON 2024に向けてPrivate ISUで勉強していた際に、mac上でmysqldumpslowができなくて詰まった。

事象

以下に示すように集計結果が正しく表示されない。
(解決法ご存知の方がいれば教えていただきたい)

/opt/homebrew/bin/mysqldumpslow: Deprecated program name. It will be removed in a future release, use 'mariadb-dumpslow' instead

Reading mysql slow query log from logs/mysql/mysql-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=0.0 (0), Rows_examined=0.0 (0), Rows_affected=0.0 (0), 0users@0hosts
  Time: N-N-18T09:N:N.444969Z
  # User@Host: root[root] @  [N.N.N.N]  Id:     N
  # Query_time: N.N  Lock_time: N.N Rows_sent: N  Rows_examined: N
  SET timestamp=N;
  SELECT * FROM `users` WHERE `id` = N

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows_sent=0.0 (0), Rows_examined=0.0 (0), Rows_affected=0.0 (0), 0users@0hosts
  Time: N-N-18T09:N:N.385232Z
  # User@Host: root[root] @  [N.N.N.N]  Id:     N
  # Query_time: N.N  Lock_time: N.N Rows_sent: N  Rows_examined: N
  SET timestamp=N

解決方法

dockerでubuntu環境を作成し、その中でmysqldumpslowを実行

  • Dockerfile
FROM ubuntu:latest

RUN apt update
RUN apt install mysql-server -y
  • docker-compose.yml
services:
  debug:
    build: . # Dockerfileの場所による
    volumes:
      - ./mysql:/logs/mysql # ローカルにあるログを適当な場所にマウントする
  • 実行方法
$ docker compose run --rm -it debug mysqldumpslow logs/mysql/mysql-slow.log | head -n 30