1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MySQLチューニング設定、crontabバックアップ設定

Last updated at Posted at 2023-03-22

■SlowQuery logの設定
Queryの実行に時間のかかってしまうSlowQueryログを出力するようにmy.cnfを設定

[mysqld]
slow_query_log=ON
slow_query_log_file=mysql-slow.log
long_query_time=0.5

■mysqldumpslow

# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

Parse and summarize the MySQL slow query log. Options are

  --verbose    verbose
  --debug      debug
  --help       write this text to standard output

  -v           verbose
  -d           debug
  -s ORDER     what to sort by (t, at, l, al, r, ar etc), 'at' is default
  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries
  -a           don't abstract all numbers to N and strings to 'S'
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don't subtract lock time from total time

並べ替えるには「-s」オプションを付けた上でソート順を指定。

  • -s al → 平均ロックタイムの長い順
  • -s ar → 平均行数の多い順
  • -s at → 平均実行時間の長い順
  • -s c → 総クエリ数の多い順
  • -s l → 総ロックタイムの長い順
  • -s r → 総行数の多い順
  • -s t → 総実行時間の長い順

■インデックスの確認

mysql> show index from questions;
 +-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
 | Table     | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
 +-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
 | questions |          0 | PRIMARY  |            1 | id          | A         |           5 |     NULL | NULL   |      | BTREE      |         |               |
 +-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
 1 row in set (0.04 sec)

■explainの使い方、見方1

mysql> explain select * from questions where id = 1;
 +----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
 | id | select_type | table     | type  | possible_keys | key     | key_len | ref   | rows | Extra |
 +----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
 |  1 | SIMPLE      | questions | const | PRIMARY       | PRIMARY | 4       | const |    1 | NULL  |
 +----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
 1 row in set (0.05 sec)

■explainの使い方、見方2

mysql> explain select * from questions where user_id = 1;
 +----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
 | id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows | Extra       |
 +----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
 |  1 | SIMPLE      | questions | ALL  | NULL          | NULL | NULL    | NULL |    5 | Using where |
 +----+-------------+-----------+------+---------------+------+---------+------+------+-------------+
 1 row in set (0.00 sec)

■explainの結果の見方
type ALLの場合:テーブルのフルスキャン
type ALL以外の場合:keyで表示されたインデックスを使った検索となる
フルスキャンで遅いクエリはキーにインデックスの付与を検討する
Using filesort:sortが発生して遅くなっている、クエリが高頻度の場合はインデックス付与を検討
Using temporary:一時ファイルの作成がおこなわれている。要注意。

■インデックスを貼る時は?
主キー:他のテーブルとの関連を取得するときに、主キーのidなどで関連テーブルを取得する
複合インデックス:複数のキーで検索するために、高頻度でフルスキャンが発生している場合などに複合インデックスを張る

■インデックスの貼り方は?
・通常
CREATE TABLE テーブル名(カラム名 型,カラム名 型, ... INDEX(カラム名);
または
CREATE INDEX インデックス名 ON テーブル名(カラム名);
または
ALTER TABLE テーブル名 ADD INDEX インデックス名(カラム名);

・複合インデックス
CREATE INDEX インデックス名 ON テーブル名 (カラム名1([数値])[, カラム名2([数値]), ...);

・インデックス削除
ALTER TABLE テーブル名 DROP INDEX インデックス名;

■CentOSでのMySQLの起動、停止、再起動

sudo service mysqld start

sudo service mysqld stop

sudo service mysqld restart

■MySQL設定項目

  • max_connections:接続数
  • innodb_buffer_pool_size:メモリ使用量

■crontab
毎週日曜日 AM3時に実行 日付のファイル名でバックアップファイルを作成

00 3 * * 7 mysqldump -u root -p “password” —all-databases -single-transaction > “/backup/`date '+%Y-%m-%d'`-backup.dump”

毎週日曜日 AM7時に実行 古くなったバックアップファイルを削除

00 7 * * 7 find /backup -name "*backup.dump" -mtime 180 -delete
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?