mysql のバージョンアップにより、よく記事に書かれている従来の方法に+αで 3 つ必要なことがあります。
今回は、個人開発の Quuum.com の ver2.0 の大型アップデートで DB の構造を若干変更する必要があり、念のために、 DB のバックアップを保存しておく必要ができたので、そのために、 Heroku の ClearDB (MySQL) から mysqldump で取得しようとしました。
cf. ↓詳細は以下 (現在書いてる中)
tl;dr
↓これを使う
$ mysqldump --no-tablespaces --column-statistics=0 -u [DB_USERNAME] -p[DB_PASSWORD] -h [DB_HOST] -r [(出力ファイル名) backup.sql] --single-transaction [DB_NAME]
(余談) choco で mysql をインストール
ふだん、開発は個人開発も仕事も今現在100%、 wsl で Docker を使っているので、mysql を今使ってるラップトップの Windows に直接入れてなかったのですが、 mysqldump を使うだけならと思って、お馴染みの chocolatey で入れました。
$ choco install mysql
そのとき、なぜか赤い文字が画面一面に大量発生して、なんかやらかしたかもって焦ったんですが、よく見るとただのログが赤赤と表示されているだけで、なんだよってなりました笑
画面真っ赤だからエラーかと思って焦ったら、ただのログが赤赤と表示されてて草#今日のめともく pic.twitter.com/GXSLF8Qa5S
— Taniii (@taniiicom) May 25, 2023
cf. ↓どうやらここで報告されているのと同じ事象のようです
(本題) 令和に mysqldump でエクスポートをする上での 3 つのトラブル
基本的には、ローカルにしても外部にしても、 DB に接続して、 mysqldump を使ってバックアップを得るというだけなのですが、 DB との接続に際して、mysql のバージョンアップによりいくつかの仕様変更が行われています。
Heroku の場合、ClearDB の接続情報は、
$ heroku config
で取得できます。
基本的な流れ
基本的な流れは以下の記事が参考になります。
cf.
ただ、上の記事の通りやると、現バージョン (MySQL 8) では、エラーが起こる可能性があります。
1. DBへのログインができない
mysqldump: Got error: 1045: Access denied for user ... (using password: YES) when trying to connect
→ ワンライナ (1行) にすると解決することがある
現在、セキュリティの観点から、DB_PASS の入力をパラメータとして与える代わりに、対話型で入力するようになっていますが、これを使うと上手く接続できない場合があるようです。
非推奨なので避けたいところですが、背に腹は代えられないので、
$ mysqldump -u [DB_USERNAME] -p[DB_PASSWORD] -h [DB_HOST] -r [(出力ファイル名) backup.sql] --single-transaction [DB_NAME]
とします。
ここで -p と 実際のパスワード の間は、スペースを空けないので注意です!!
2. Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
→ --no-tablespaces を追加するだけ
テーブルスペースの情報を必要としないことを明示的に示すことで、権限不足を回避します。
詳細は以下の記事が参考になります。
cf.
3. mysqldump: Couldn't execute ...
mysqldump: Couldn't execute 'SELECT COLUMN_NAME, ...
→ --column-statistics=0 を追加する
MySQL のバージョン違いにより発生するエラーです。
詳細は以下の記事が参考になります。
cf.
まとめると...
結論、こうなります。
$ mysqldump --no-tablespaces --column-statistics=0 -u [DB_USERNAME] -p[DB_PASSWORD] -h [DB_HOST] -r [(出力ファイル名) backup.sql] --single-transaction [DB_NAME]
おしまい
YouTube上の音楽や動画を、再生回数や収益化が制作者に還元されるように、【n時間耐久】として再生できる 個人開発アプリ Quuum.com 、まもなく ver2.0 になりログイン機能やお気に入り機能が追加されます!
もしよければ使ってあげて下さい。
コメント