最終更新日: 2026-08-25
TOP(About this memo)) > 一覧(RDB) > 設定・ログ・ディレクトリ(MySQL)
my.cnf の場所確認:
locate my.cnf
/etc/my.cnf
設定変更:
vi /etc/my.cnf
cat /var/log/mariadb/mariadb.log
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のデータベースではトランザクション機能がない。後発で生まれたInnoDBのデータベースにはトランザクション機能がある。(IMO) 普通はInnoDBを使うので、MyISAMを使うことはほぼないだろう。
/etc/my.cnf。ただし、中身は空で /etc/my.cnf.d/ 配下の設定ファイルをインクルードするようになっている。/etc/my.cnf.d/ ディレクトリ内にあるファイルの中身も、同じくほとんど設定が入っていない場合が多い(?)。/usr/share/mysql/ から設定ファイルを持ってくる必要がある。/usr/share/mysql/ 内には、データベースの規模に応じて使えるように各種設定ファイルが用意されている。/var/lib/mysql ディレクトリ(データ本体が入るところ)。/var/lib/mysql が作成される。/var/lib/mysql に作成される。db.opt しかないが、テーブルを作成すると以下のファイルが作成される。
.frm ファイル: フィールド定義などテーブル情報を記録するファイル。.ibd ファイル: テーブルごとにディレクトリとインデックスを記録するファイル(テーブルスペースではなく、ibdファイルに記録する)。MySQLのトランザクションログには、InnoDBログとバイナリログがある。InnoDBログとバイナリログの違いはやや理解が曖昧(TODO)。InnoDBログはインスタンス障害時に次回起動時に自動で復旧させるためのもの、バイナリログは自分で復旧させる際に使うもの、という理解をしている(?)。
InnoDBログファイル:
バイナリログファイル:
/var/lib/mysql に以下が入っている。
ibdata*): 全データを管理する共有テーブルスペース。ib_logfile0, ib_logfile1)
ib_logfile0, 1 はログファイル(OracleではREDOログに相当)。bin-log.000001…)
--slow-query-log を付けてmysqldを起動すると有効になる(初期では存在しない)。my.cnf に log-bin を追記しても有効化できる(?)。my.cnf で定義できる。--log-bin を付けてmysqldを起動すると有効になる(?)。ibdata* はデータベースの中身が増えていくと増大していく。データベースを定期的に削除していればそれに伴って減るはず(?)。定期的にデータを削除する設計にすればよい。ib_logfile*)は、1つのDBあたり2つ程度しか作成されない(?)。my.cnf で expire-logs-days=7 などと指定すればよい(古い情報の可能性がある(?))。innodb_log_file_size で調整できるが、変更するとログファイルを削除しないとエラーになるケースがある(?)。参考:
確認:
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 |
+-------------------------+-----------+