created: 2023-10-24T08:30:41.164Z

開発環境の構築で毎回つける mysqldump のオプション

mysqldump \
      --single-transaction \
      --no-tablespaces \
      --login-path=me \
      --compression-algorithms=zstd \
      --column-statistics=0 \
      --set-gtid-purged=OFF

--single-transaction

このオプションをつけないと LOCK TABLE がかかる場合がある。開発用のデータ取得は整合性はいらないのでつける。

--no-tablespaces

CREATE LOGFILE GROUP ステートメントおよび CREATE TABLESPACE ステートメントを出力に書き出さない

tablespaces とはテーブルの中身や binlog の保管場所を特別に指定する設定情報のことで、これは通常は開発には必要ない。この情報を取得しようとすると PROCESS 権限が必要になり多くの場合で権限エラーになったりする。

--login-path

mysqldump でも login-path は使える。本番につなぐ場合とかもアカウント管理が楽になるので、もし使っていなかったら使うようにする。

--compression-algorithms=zstd

取得するデータを zstd で圧縮してくれる。mysqldump が向けられる DB サーバではほとんどの場合は CPU よりも帯域がリソースとして重要なはずなのでつける。というか zstd だと CPU 負荷も低廉。以前は --compress というオプションで zlib で圧縮していたが容量が 10MB とかを超える場合は zstd のほうが体感できるレベルで早い。

圧縮で送信データを少なくしても CPU 負荷って下がるんじゃないのかなとも思うけどどうなんだろう。

--column-statistics=0

テーブルの統計情報を取得しない。統計情報は開発用は通常不要なのでつける。 ドキュメントには「デフォルトでは無効」と書いてあるので、今はもうつけなくてもいいのかも。

--set-gtid-purged=OFF

グローバルトランザクション識別子(GTID)を一緒にもってくるかの設定、開発用で整合性が重視されない場合なので不要としておく。GTID が有効なプロジェクトだと考慮が必要なようだ。

SLO サービスレベル目標 ―SLI、SLO、エラーバジェット導入の実践ガイド
[ad] SLO サービスレベル目標 ―SLI、SLO、エラーバジェット導入の実践ガイド
Alex Hidalgo, 山口 能迪 (単行本(ソフトカバー))