設定・ログ・ディレクトリ - RDB(MySQL)

最終更新日: 2026-08-25

TOP(About this memo)) > 一覧(RDB) > 設定・ログ・ディレクトリ(MySQL)

設定・ログ・ディレクトリ(MySQL)

設定ファイル

my.cnf の場所確認:

locate my.cnf
/etc/my.cnf

設定変更:

vi /etc/my.cnf

ログの確認

cat /var/log/mariadb/mariadb.log

InnoDB

InnoDBだと途中でSQLを中断すると、ロールバックされる。

MySQLサーバーのデフォルトストレージエンジンは設定ファイルで規定され、記述がない場合はバージョン次第(?)。show engines; で確認することができる。下記の例だとデフォルトはInnoDBになっている。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| myproject           |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

mysql> use information_schema;
Database changed
mysql> select table_schema, table_name, engine from tables;
+--------------------+------------------------------------------------------+--------------------+
| TABLE_SCHEMA       | TABLE_NAME                                           | ENGINE             |
+--------------------+------------------------------------------------------+--------------------+
| myproject           | admin_settings                                       | InnoDB             |

MyISAM

MyISAMのデータベースではトランザクション機能がない。後発で生まれたInnoDBのデータベースにはトランザクション機能がある。(IMO) 普通はInnoDBを使うので、MyISAMを使うことはほぼないだろう。

ディレクトリ・ログ・設定ファイル

初期設定

データが格納されるところ

データベースのディレクトリ

トランザクションログ

MySQLのトランザクションログには、InnoDBログとバイナリログがある。InnoDBログとバイナリログの違いはやや理解が曖昧(TODO)。InnoDBログはインスタンス障害時に次回起動時に自動で復旧させるためのもの、バイナリログは自分で復旧させる際に使うもの、という理解をしている(?)。

InnoDBログファイル:

バイナリログファイル:

テーブルスペースとログファイルの具体的な構成

/var/lib/mysql に以下が入っている。

その他

参考:

ログの削除

クエリキャッシュ

確認:

SHOW VARIABLES LIKE '%query_cache%';

以下は、クエリキャッシュが無効になっている例。キャッシュ領域も小さい。

+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| have_query_cache             | YES     | キャッシュクエリを使用可能か
| query_cache_limit            | 1048576 | クエリキャッシュ最大サイズ(1MB)
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 1048576 | クエリキャッシュ領域(1MB)
| query_cache_strip_comments   | OFF     |
| query_cache_type             | OFF     | クエリをキャッシュするか
| query_cache_wlock_invalidate | OFF     | 書込みロック時にロックしたテーブルに関するクエリキャッシュを無効にするか
+------------------------------+---------+

※ 最後の項目は、更新中にキャッシュから結果を返したら困る場合に設定する。

SHOW STATUS LIKE 'Qcache%';  -- クエリキャッシュの状態確認

Qcache_free_blocks が1でないときは断片化しているため、FLUSH QUERY CACHE でキャッシュのデフラグも検討したほうがよい(?)。以下の例では、キャッシュの設定がOFFになっていることがわかる。

+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| Qcache_free_blocks      | 1       | 空きメモリーブロック数。起動時は1でOK。
| Qcache_free_memory      | 1031320 | クエリキャッシュ用の空きメモリーの量
| Qcache_hits             | 0       | クエリキャッシュヒットの数
| Qcache_inserts          | 0       | クエリキャッシュに追加されるクエリの数
| Qcache_lowmem_prunes    | 0       | メモリーが少ないためクエリキャッシュから削除されたクエリの数
| Qcache_not_cached       | 0       | 非キャッシュクエリの数
| Qcache_queries_in_cache | 0       | クエリキャッシュ内に登録されたクエリの数
| Qcache_total_blocks     | 1       | クエリキャッシュ内のブロックの合計数
+-------------------------+---------+

my.cnf への記載例([mysqld] セクションの下に書く。一番下に書くとエラーになる点に注意):

[mysqld]
# #################
# query cache
# #################
query_cache_limit=16M
query_cache_size=128M
query_cache_type=1

再起動して確認する:

systemctl restart mariadb.service

(IME) WEBサイトにアクセスして SHOW STATUS LIKE 'Qcache%'; で確認したところ、memcachedが効いていたため Qcache_hits 自体は変わらなかったが、Qcache_inserts が増えていたのでクエリキャッシュ自体は機能していることが確認できた。

+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| Qcache_free_blocks      | 1         |
| Qcache_free_memory      | 134180216 |
| Qcache_hits             | 0         |
| Qcache_inserts          | 12        |
| Qcache_lowmem_prunes    | 0         |
| Qcache_not_cached       | 1         |
| Qcache_queries_in_cache | 12        |
| Qcache_total_blocks     | 27        |
+-------------------------+-----------+