DockerでMySQLをインストールする方法

Dockerを使用してMySQLをインストールしてセットアップする手順を簡単にまとめます。Dockerを使うことで、MySQLのインストールや管理がシンプルになり、複数の環境での開発が容易に行えます。

ただしインストールの際に注意点があるので後述します。

すでにDockerをインストールしている環境が前提となります。

MySQLのDockerイメージをダウンロードする

MySQLのDockerイメージをDocker Hubから取得します。以下のコマンドを使って最新版のMySQLイメージをダウンロードします。

公式のイメージがあるのでそちらをダウンロードします。

Bash
docker pull mysql:latest

latestは最新バージョンのMySQLイメージを指しますが、特定のバージョンが必要な場合は、バージョン番号を指定して取得することもできます。

コンテナを起動する

イメージがダウンロード出来たらコンテナを起動します

Bash
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コンテナ上のパスではないことに留意してください。

設定したボリュームは以下のコマンドで確認することができます。ボリュームの一覧が表示されます。

Bash
docker volume ls

さらに以下のコマンドで特定のボリュームがどこに保存されているか確認することができます。

Bash
docker volume inspect volume-name #任意のvulume-name
Bash
docker volume inspect mysql-data

Mysqlを移行する際の注意点

MySQLはバージョン8あたりでデフォルトの認証プラグインに変更がありました。

mysql_native_passwordからcaching_sha2_passwordにアルゴリズムが変更されています。

rootなどユーザー情報が保存されているデータベースを移行した場合に
プラグインが異なりMySQLにログインできなくなります。

Bash
# バージョン8以前のデータベースのバックアップ
mysqldump -u root -p --all-databases > /yourpath/backup.sql
Bash
# dockerコンテナ内にコピー
docker cp /yourpath/backup.sql mysql-container:/backup.sql
Bash
# Dockerコンテナ内にシェルで接続
docker exec -it mysql-container bash
Bash
# バックアップを取り込む
mysql -u root -p < /backup.sql

バックアップを取り込んだあとに再度ログインしようとすると
私の環境では以下のようなエラーが出てログインすることができませんでした。

Bash
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

mysql_native_passwordは最新のMysqlから削除されているので認証はできないということでした。

このエラーを回避するためにユーザー情報が登録されていないデータベースだけを指定して取り込む。そのあとユーザーは別途新しく登録しなおすという操作を行いました。

一般的にはMySQLという名前のデータベースにrootなどユーザー情報が登録されていると思います。

Bash
# 以下のコマンドでデータベース一覧を表示できる
show databases;

もっといい方法があるかもしれませんが、いったんこれで解決とします。

まとめ

こんかいはDockerをつかってMySQLをインストールする方法をご紹介しました。

思いがけないところではまりどころがありました。

皆さんもご注意ください。

以上、お疲れ様でした。

タイトルとURLをコピーしました