v1.10 へのアップグレード
MygramDB v1.10.0 では、管理操作へのアクセスを既定で閉じ、安全でないネットワーク設定を拒否します。実行中の MySQL 接続先を変更する機能も廃止しました。実行中のノードを置き換える前に以下を確認してください。
更新前の確認
管理トークンを設定する
TCP リスナーをループバック以外に公開する前に api.admin_token を設定します。TCP リスナーがループバック以外のアドレスを使い、Unix ソケットを設定していない場合はトークンが必須です。
本番環境では MYGRAM_API_ADMIN_TOKEN 環境変数を優先してください。十分な長さの値を生成し、設定ファイルやシェル履歴に残さないように管理します。
openssl rand -hex 32TCP クライアントは、管理コマンドより前に同じ接続で AUTH <token> を送信します。HTTP の管理リクエストでは Authorization: Bearer <token> を使います。TCP はトークンを暗号化しないため、信頼できるネットワークか、暗号化した経路で使ってください。リクエストの形式は、プロトコルリファレンスと HTTP API ガイドを参照してください。
ネットワーク設定を検証する
設定パーサーは、ネットワークの境界を弱める次の組み合わせを拒否します。
- ループバック以外のリスナーと、
0.0.0.0/0または::/0の公開許可リスト cors_allow_originを指定していない CORS の有効化- サーバー証明書の検証を有効にしたまま CA を指定していない MySQL TLS 接続
- GTID を使えない MySQL ソース
MYGRAM_MYSQL_USERの適用後にmysql.userが未設定または空であること
組み込みスキーマはカスタムスキーマより先に検証されます。カスタムスキーマで制約を追加できますが、これらの検証は外せません。展開前に本番環境で使うファイルを検証します。
mygramdb -t /etc/mygramdb/config.yamlDocker デプロイを更新する
同梱の Compose スタックは、TCP と HTTP のポートを 127.0.0.1 に公開します。別ホストからコンテナへ接続する場合は、ホスト側のポートマッピングを明示的に変更します。
現在の環境変数テンプレートから .env を作り直し、次の値を確認してください。
API_ADMIN_TOKENは必須で、プレースホルダー値は拒否されます。MYSQL_PASSWORDに既定値はありません。- コンテナ内のリスナーは
API_CONTAINER_BINDとAPI_HTTP_CONTAINER_BINDで設定します。Compose はその用途にAPI_BINDとAPI_HTTP_BINDを使いません。 NETWORK_ALLOW_CIDRSには、ホスト側のクライアントが使ったアドレスだけでなく、MygramDB から見える Docker ブリッジのアドレスを含めます。
リモートアクセスが必要な場合だけ、ホスト側のポートをループバック以外に公開してください。現行の一式は Docker デプロイガイドを参照してください。
実行中の MySQL 接続先変更をやめる
mysql.host と mysql.port は起動時にだけ読み込みます。SET mysql.host=... と SET mysql.port=... は immutable-variable エラーを返します。接続先を変えるときは、設定ファイルを修正して MygramDB を再起動してください。
自動再接続は設定済みの接続先を使い続け、ソースサーバー UUID が変わっていると拒否します。実行中のプロセスを SET で別の接続先へ向けるフェイルオーバー自動化は削除してください。
ダンプコマンドとキャッシュの振る舞いを更新する
DUMP SAVE の呼び出しから --with-stats を削除してください。このオプションは解析されません。DUMP SAVE [path] は引き続き使えます。
キャッシュキーの直列化プレフィックが変わりました。更新後のノードは、以前のリリースが作成したエントリを再利用せず、空のクエリキャッシュから開始します。
ダンプと起動時復旧
v1.9 で書き出したダンプのファイル形式は解析できますが、version 1 の互換性メタデータにはソースサーバー UUID がありません。通常の v1.10 起動時復元はこのダンプを拒否し、MySQL スナップショットへ切り替えます。実行中のソース UUID が分かっている場合は、手動の DUMP LOAD も拒否します。更新と同期が終わったら新しいダンプを作成・検証し、それからダンプ復旧に使ってください。現行の互換性メタデータは version 2 で、ソース UUID を記録します。
新しい dump.load_on_startup は、MySQL の初期スナップショットより前に dump.dir/default_filename を読み込みます。MygramDB はダンプのホスト、ポート、データベース、ソースサーバー UUID、GTID が設定済みのソースと一致するかを確認します。検証または読み込みに失敗すると、MySQL の初期スナップショットへ切り替えます。
dump:
dir: /var/lib/mygramdb/dumps
default_filename: mygramdb.dmp
load_on_startup: trueファイルとその生成元を検証してから有効にしてください。復元時の上限と運用手順は、スナップショットコマンドを参照してください。
レプリケーション復旧
解析できない binlog イベントはエラーコード 2017 を返します。この理由でレプリケーションが停止した場合は、最優先のテーブルから SYNC を実行し、その後に他のすべてのレプリケーション対象テーブルを再構築してください。最初の SYNC が共有ストリームを問題のイベントより後ろへ進めるため、再構築しないテーブルにはスキップした区間の変更が反映されません。
その他のレプリケーション失敗は、この復旧経路を使わず、停止前にドレインした位置から再開します。再構築の前に SYNC コマンドの使い方を確認してください。
更新チェックリスト
- 十分な長さの管理トークンを設定し、すべての管理クライアントを更新する。
mygramdb -tで本番設定を検証する。- リスナーアドレス、CIDR 許可リスト、CORS、TLS、GTID の要件を確認する。
- Docker の環境変数ファイルを作り直し、ホスト側のポート公開範囲を確認する。
- 実行中の MySQL 接続先変更と
DUMP SAVE --with-statsの呼び出しを削除する。 - 現在のダンプを検証し、ロールバックに使えるバックアップを残す。
- 再起動後に ready になるまで待ち、検索と管理操作のスモークテストを実行し、レプリケーション遅延が更新されることを確認する。
変更の全体は v1.10.0 リリースノートを参照してください。