2021年11月10日
運用に必要な知識
MySQLのプロセスアーキテクチャ
- MySQLはシングルプロセス・マルチスレッドモデルのデータベース。
- psコマンドのauxや-elfなどのオプションではmysqldのプロセスは1つしか見えない。
- 内部的には複数のスレッドを使い分けている
- スレッドは、フォアグランドスレッドとバックグランドスレッドに分けられる
- フォアグランドスレッドは外部のクライアントと1対1で紐づく
- 1つの接続が1つのスレッドになり、接続が切断されるまでの同一のスレッドが処理をする
- 現在のコネクション(= スレッド)の情報はperformance_schemaのthreadsテーブルまたはSHOW PROCESSLISTで確認できる
- 実行時のオーバーヘッドや情報の粒度などからperformance_schema.threadsテーブルの方が推奨されている
MySQLのパラメータ
- MySQLにはたくさんのパラメータ(設定可能項目)があり、分類ごとにいくつかの特性を持っている。
- オンラインで変更が可能なパラメータと設定変更にMySQLの再起動が必要なパラメータがある。
- my.cnfの読み込み順序
- /etc/my.cnf
- /etc/mysql/my.cnf
- SYSCONFDIR/my.cnf
- $MYSQL_HOME/my.cnf
- -default-extra-file
- $HOME/my.cnf
- $HOME/.mylogin.cnf
- DATADIR/mysqld-auto.cnf
- コマンドラインオプションで与えられた引数
- オンラインで変更したパラメータを永続化するにはSET PERSISTステートメントが使える
- SET PERSIST/SET PERSIST_ONLYで変更されたパラメータはDATADIR/mysqld-auto.cnfにJSONの形式で記録される
- このファイルは管理者が直接編集することを想定していない。
- mysqld-auto.cnfに記録されたパラメータの設定を削除するには、RESET PERSISTステートメントを利用する
- 各パラメータがどこで設定されたかはperformance_schema.variables_infoテーブルで確認できる
MySQLのバージョン情報
MySQLのバージョンは、SELECT VERSION(); や SHOW VARIABLES LIKE 'version'; などで調べることができる。
運用設計
バージョン選定
MySQL 8.0系列は同一リリース系列内でも非互換性があるため、バージョンの選定は慎重にされなくてはならない。
クライアントやライブラリのバージョンはMySQLサーバと同じかそれ以上であることが必須。MySQL 8.0系列ではバージョン番号の信仰に伴って新機能が追加されてしまうため、 その機能やその周辺に新規にバグが内在する可能性がある。
現時点で確実に進められることは次の通り。
- 導入時点での最新バージョンを選び動作確認をする
- 導入以後のアップグレードに備えてSQLレベルでの非互換性を検出できるように回帰テストを作成する
- アップグレードをする際にはクライアントのバージョンを先にあげる
バックアップ設計