データベースにはMySQL 8.0を使用しています。
マッピングライブラリはgorpを使用しています。選定理由は@p1assのブログをご覧ください。
クエリのSQL文を作る際はGoのファイル上で書くより、GUIのツールで書くと便利です。 Golandを使用しているならデータベースツールが使いやすいです。
skeemaというCLIツールを使って管理しています。
スキーマファイルは./mysql/schemasにあります。
- 差分のSQLを積んていくのではなく、現在のスキーマの状態をSQLファイルとして管理します。
- 差分の取り込み、反映はコマンド経由で行います。
- パット見で現在のスキーマが分かるところがメリットです。
upstreamでスキーマが更新された場合は、ローカルのDBにも反映させる必要があります。
SUPER
かSYSTEM_VARIABLES_ADMIN
、SESSION_VARIABLES_ADMIN
の権限が必要です。
$ skeema diff local -p
$ skeema push local -p
破壊的な変更がある場合は失敗します。
--allow-unsafe
オプションを付けることで適用することができますが、リリースしてからは注意して行うようにしてください。
好きな方法(mysqlコマンド、GUIクライアント)などでスキーマを変更してください。その後以下のコマンドで差分を取り込んでください。
$ skeema pull local -p
rootではなく一般ユーザを使う場合は適切に権限を設定する必要があります。
dev環境の場合↓
mysql> show grants for relaym_dev;
+-------------------------------------------------------------+
| Grants for relaym_dev@% |
+-------------------------------------------------------------+
| GRANT USAGE ON *.* TO `relaym_dev`@`%` |
| GRANT SESSION_VARIABLES_ADMIN ON *.* TO `relaym_dev`@`%` |
| GRANT ALL PRIVILEGES ON `_skeema_tmp`.* TO `relaym_dev`@`%` |
| GRANT ALL PRIVILEGES ON `relaym_dev`.* TO `relaym_dev`@`%` |
+-------------------------------------------------------------+
4 rows in set (0.00 sec)