Dockerを使用してMySQLをインストールしてセットアップする手順を簡単にまとめます。Dockerを使うことで、MySQLのインストールや管理がシンプルになり、複数の環境での開発が容易に行えます。
ただしインストールの際に注意点があるので後述します。
すでにDockerをインストールしている環境が前提となります。
MySQLのDockerイメージをダウンロードする
MySQLのDockerイメージをDocker Hubから取得します。以下のコマンドを使って最新版のMySQLイメージをダウンロードします。
公式のイメージがあるのでそちらをダウンロードします。
docker pull mysql:latest
latestは最新バージョンのMySQLイメージを指しますが、特定のバージョンが必要な場合は、バージョン番号を指定して取得することもできます。
コンテナを起動する
イメージがダウンロード出来たらコンテナを起動します
docker run --name mysql-container \
-e MYSQL_ROOT_PASSWORD=your-password \
-v mysql-data:/var/lib/mysql \
-p 3306:3306 \
-d mysql:latest
MYSQL_ROOT_PASSWORDはMySQLにログインするために必要なパスワードです。
任意のパスワードを設定できます
mysql-data:/var/lib/mysqlは保存するボリュームの名前です。
コンテナに保存したデータを永続化するための設定です。
:/var/lib/mysqlはコンテナ上のディレクトリを示しています。
mysql-dataの部分がボリュームの名前です。
ホストマシンにmysql-dataというボリュームが保存されます。
Dockerコンテナ上のパスではないことに留意してください。
設定したボリュームは以下のコマンドで確認することができます。ボリュームの一覧が表示されます。
docker volume ls
さらに以下のコマンドで特定のボリュームがどこに保存されているか確認することができます。
docker volume inspect volume-name #任意のvulume-name
docker volume inspect mysql-data
Mysqlを移行する際の注意点
MySQLはバージョン8あたりでデフォルトの認証プラグインに変更がありました。
mysql_native_passwordからcaching_sha2_passwordにアルゴリズムが変更されています。
rootなどユーザー情報が保存されているデータベースを移行した場合に
プラグインが異なりMySQLにログインできなくなります。
# バージョン8以前のデータベースのバックアップ
mysqldump -u root -p --all-databases > /yourpath/backup.sql
# dockerコンテナ内にコピー
docker cp /yourpath/backup.sql mysql-container:/backup.sql
# Dockerコンテナ内にシェルで接続
docker exec -it mysql-container bash
# バックアップを取り込む
mysql -u root -p < /backup.sql
バックアップを取り込んだあとに再度ログインしようとすると
私の環境では以下のようなエラーが出てログインすることができませんでした。
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
mysql_native_passwordは最新のMysqlから削除されているので認証はできないということでした。
このエラーを回避するためにユーザー情報が登録されていないデータベースだけを指定して取り込む。そのあとユーザーは別途新しく登録しなおすという操作を行いました。
一般的にはMySQLという名前のデータベースにrootなどユーザー情報が登録されていると思います。
# 以下のコマンドでデータベース一覧を表示できる
show databases;
もっといい方法があるかもしれませんが、いったんこれで解決とします。
まとめ
こんかいはDockerをつかってMySQLをインストールする方法をご紹介しました。
思いがけないところではまりどころがありました。
皆さんもご注意ください。
以上、お疲れ様でした。