【MySQL】2023年最新版 mysqldump で DB のバックアップをとるときのエラー解決策×3

MySQL/MariaDB

mysql のバージョンアップにより、よく記事に書かれている従来の方法に+αで 3 つ必要なことがあります。

今回は、個人開発の Quuum.com の ver2.0 の大型アップデートで DB の構造を若干変更する必要があり、念のために、 DB のバックアップを保存しておく必要ができたので、そのために、 Heroku の ClearDB (MySQL) から mysqldump で取得しようとしました。

cf. ↓詳細は以下 (現在書いてる中)

【開発日記】Quuum.com を ver2.0 への大型アップデート記録 (Laravel, middleware-auth, ajax, session-api)
Quuum.com の公開6ヶ月を記念して、ver2.0 へと大型アップデートを行いました。 公開時から要望の多かった、ログイン機能を追加し、耐久を「お気に入り」できるようになりました。PCやスマホなど複数デバイスでシームレスにお気に...

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

そのとき、なぜか赤い文字が画面一面に大量発生して、なんかやらかしたかもって焦ったんですが、よく見るとただのログが赤赤と表示されているだけで、なんだよってなりました笑



cf. ↓どうやらここで報告されているのと同じ事象のようです

Unwanted log messages with shell=Powershell (#29462) · Issues · GitLab.org / gitlab-runner · GitLab
Summary With Gitlab-runner 15.6.0 and 15.6.1 for Windows, jobs produce unwanted job logs: #< CLIXML and <Objs Version="1.1.0.1" xmlns=""><Obj...

(本題) 令和に mysqldump でエクスポートをする上での 3 つのトラブル

基本的には、ローカルにしても外部にしても、 DB に接続して、 mysqldump を使ってバックアップを得るというだけなのですが、 DB との接続に際して、mysql のバージョンアップによりいくつかの仕様変更が行われています。

Heroku の場合、ClearDB の接続情報は、

$ heroku config

で取得できます。

基本的な流れ

基本的な流れは以下の記事が参考になります。

cf.

[heroku]HerokuのclearDBとPostgresでのインポートとエクスポートまとめ - KayaMemo
【Heroku】MySQLにローカルのクライアントから接続
Heroku上に作成したMySQLのデータベースに、ローカルPCのクライアントから接続してデータを確認します。
ClearDB から Azure VM 上の MySQL に移行 – プログラミング生放送
Azure App Service のギャラリーで作成した WordPress は、サードパーティのクラウドデータベース「ClearDB」の提供する MySQL を使用します。こ...

ただ、上の記事の通りやると、現バージョン (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.

mysqldumpで「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」となる場合の対処方法を紹介します。
3. mysqldump: Couldn't execute ...
mysqldump: Couldn't execute 'SELECT COLUMN_NAME, ...

→ --column-statistics=0 を追加する

MySQL のバージョン違いにより発生するエラーです。

詳細は以下の記事が参考になります。

cf.

mysqldumpで Couldn’t execute … と表示されるときの解決法 - GOOTA TECH
mysqldumpコマンドでバックアップを取ろうと思って実行すると`mysqldump: Couldn't execute 'SELECT COLUMN_NAME, ...`というエラーメッセージが表示され実行できませんでした。その解決法を残しておきます。
まとめると...

結論、こうなります。

$ 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 になりログイン機能やお気に入り機能が追加されます!

もしよければ使ってあげて下さい。

Quuum 耐久メーカー(n時間耐久/作業用) キューム

コメント