ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
設定ファイルの場所
| OS / Distro | 設定ファイルパス |
|---|---|
| Linux (Debian/Ubuntu) | /etc/mysql/my.cnf → /etc/mysql/mysql.conf.d/mysqld.cnf |
| Linux (RHEL/CentOS) | /etc/my.cnf + /etc/my.cnf.d/*.cnf |
| macOS (Homebrew) | /opt/homebrew/etc/my.cnf (Apple Silicon) |
| Windows | C:\ProgramData\MySQL\MySQL Server X.X\my.ini |
| Docker (公式イメージ) | /etc/mysql/conf.d/*.cnf をボリュームマウント |
読み込み順を確認:
mysql --help | grep -A 1 "Default options"
# Default options are read from the following files in the given order:
# /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
mysqld --verbose --help | grep -A 1 "Default options"
基本構成 (my.cnf)
# /etc/mysql/my.cnf
# サーバ本体
[mysqld]
# === ネットワーク ===
bind-address = 0.0.0.0 # 外部接続許可 (本番は LAN 内に絞る)
port = 3306
socket = /var/run/mysqld/mysqld.sock
skip-name-resolve # DNS 逆引き無効 (高速化)
# === 文字コード (必ず utf8mb4) ===
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
# === InnoDB ===
default-storage-engine = InnoDB
innodb_buffer_pool_size = 4G # ★ RAM の 60-80%
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1 # 1=ACID 厳密 / 2=高速化 / 0=最速 (危険)
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
# === 接続 ===
max_connections = 200
max_connect_errors = 100000
wait_timeout = 28800 # 8 時間
interactive_timeout = 28800
# === クエリログ ===
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1 # 1 秒以上を記録
log_queries_not_using_indexes = 0 # 本番では基本 0
# === エラーログ ===
log_error = /var/log/mysql/error.log
# === バイナリログ (レプリ/PITR 用) ===
server-id = 1
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW
expire_logs_days = 7
sync_binlog = 1
# クライアント共通
[client]
default-character-set = utf8mb4
port = 3306
socket = /var/run/mysqld/mysqld.sock
# mysql CLI
[mysql]
default-character-set = utf8mb4
prompt = '\u@\h [\d]> '
# mysqldump
[mysqldump]
default-character-set = utf8mb4
quick
single-transaction
必須の初期設定: mysql_secure_installation
sudo mysql_secure_installation
# 対話で:
# 1) VALIDATE PASSWORD COMPONENT の有効化 (任意)
# 2) root のパスワード設定
# 3) 匿名ユーザー削除
# 4) リモート root ログイン禁止
# 5) test データベース削除
# 6) 権限再読込
主要パラメータの意味
| パラメータ | 意味 | 推奨 |
|---|---|---|
innodb_buffer_pool_size | InnoDB のメモリキャッシュ (最重要) | RAM の 60-80% |
innodb_log_file_size | Redo Log サイズ | 256M-2G |
innodb_flush_log_at_trx_commit | fsync 戦略 | 1 (ACID) / 2 (やや高速) |
max_connections | 同時接続数上限 | アプリ Pool x ノード数 + 余裕 |
wait_timeout | アイドル接続切断時間 (秒) | 120-28800 |
max_allowed_packet | 1 クエリの最大サイズ | 64M (デフォルト) / 大量 INSERT で増やす |
character-set-server | サーバデフォルト文字コード | 必ず utf8mb4 (絵文字対応) |
slow_query_log | スロークエリログ | 本番 ON / long_query_time=1 |
server-id | レプリケーション用 ID | レプリ環境では各ノード一意 |
character-set: utf8 と utf8mb4 の違い
MySQL の utf8 は最大 3 バイトしか格納できない壊れた UTF-8 です。絵文字 (4 バイト) を保存できません。必ず utf8mb4 を使ってください:
-- 現状確認
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
-- 既存テーブルの文字コード変換
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- ❌ NG (絵文字消失)
character-set-server = utf8
-- ⇔ utf8mb3 のエイリアス (廃止予定)
-- ✅ OK
character-set-server = utf8mb4
innodb_buffer_pool_size のチューニング
-- 現在のバッファプールサイズ
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
-- ヒット率 (99%+ が理想)
SHOW STATUS LIKE 'Innodb_buffer_pool_reads'; -- ディスクから読んだ
SHOW STATUS LIKE 'Innodb_buffer_pool_read_requests'; -- キャッシュから読んだ
-- ヒット率 = 1 - reads / read_requests
-- 動的変更 (MySQL 5.7+)
SET GLOBAL innodb_buffer_pool_size = 8 * 1024 * 1024 * 1024; -- 8G
-- 推奨値:
-- 専用 DB サーバ: RAM の 60-80%
-- 共用サーバ: RAM の 50%
-- 32GB RAM 専用: 24G
-- 8GB RAM 専用: 6G
稼働中の動的変更
-- セッションのみ
SET wait_timeout = 600;
-- 全体に即時反映 (再起動で失われる)
SET GLOBAL wait_timeout = 600;
SET GLOBAL max_connections = 500;
SET GLOBAL slow_query_log = ON;
-- 永続化 (MySQL 8.0+: SET PERSIST)
SET PERSIST max_connections = 500;
-- → /var/lib/mysql/mysqld-auto.cnf に保存される
-- 確認
SHOW VARIABLES LIKE 'max_connections';
SELECT @@global.max_connections;
-- どの GLOBAL 変数が動的に変更可能か
SELECT VARIABLE_NAME, VARIABLE_VALUE
FROM performance_schema.global_variables
WHERE VARIABLE_NAME = 'max_connections';
パスワード変更とユーザー作成
-- root パスワード変更 (MySQL 8)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_strong_password';
-- 新規ユーザー作成
CREATE USER 'appuser'@'%' IDENTIFIED BY 'app_pass';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
-- 確認
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'appuser'@'%';
-- パスワード認証方式の指定 (古いクライアント対応)
ALTER USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
サービス操作
# systemd (Linux)
sudo systemctl start mysql
sudo systemctl restart mysql
sudo systemctl status mysql
sudo systemctl enable mysql
# 設定リロード (再起動なし) ※ 一部パラメータのみ
mysql -uroot -p -e "SET GLOBAL ..."
# 設定確認 (起動前にシンタックスチェック)
mysqld --validate-config
# どこから読まれているか確認
mysql --print-defaults
mysqld --print-defaults
Docker で my.cnf を渡す
# docker-compose.yml
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
MYSQL_USER: appuser
MYSQL_PASSWORD: apppass
volumes:
- ./my.cnf:/etc/mysql/conf.d/custom.cnf:ro
- dbdata:/var/lib/mysql
ports:
- "3306:3306"
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
dbdata:
FAQ
Q: my.cnf を変更したのに反映されない
A: ファイルが読み込まれていない可能性。mysqld --print-defaults で確認。複数の my.cnf があると後勝ちです。
Q: innodb_buffer_pool_size を大きくしすぎたら?
A: OS がスワップし始め、むしろ遅くなります。free -m で空きメモリを確認しながら調整。
Q: MariaDB と MySQL で設定は同じ?
A: 基本同じですが、一部パラメータ名が違います (例: query_cache_size は MariaDB ではまだ有効、MySQL 8 では廃止)。バージョン別ドキュメント参照。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
同階層のページ
- ダウンロード&インストール方法(Windows)
- インストール方法(Linux)
- コマンド一覧
- SQL
- データ型
- 関数
- 管理ツール
- 設定
- パフォーマンスチューニング関連
- エクスポートおよびインポート
- エラー&トラブル
- 文字コードの確認
- 実行中の SQL の状態確認およびプロセスキルの方法
- パスワードの無効化設定
- root ユーザーの初期パスワード確認方法
- rootユーザーのパスワード変更方法
- LIMIT, OFFSET の始まりと挙動
- mysqlのバージョン確認方法
- MySQLで実行計画を表示する方法
- レプリケーションのステータス確認方法
- 中央値の導き方(バージョン8未満)
- 階層SQL(バージョン8未満)
- パーセンタイルの導き方
- 特定スキーマの全テーブルの全カラム情報を取得する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?