MySQL のデータディレクトリを外付けHDDに移す

背景

Raspberry Pi 4 (8GB) を購入し、MySQL のサーバにしたいと思いました*1。MicroSDの容量は限られているのと、データベースのようなアクセス頻度が高いものをMicroSDに置いた場合のカードの寿命を考え*2、外付けHDDにデータを置きたいと考えました。

結論

シンボリックリンクを使う。

具体的方法

外付けHDDをマウントした場所を /mnt/foobar であるとします。

1. MySQL を止める

$ sudo service mysql stop

2. 既存のデータディレクトリの内容をマウントしたHDDに移す

パーミッションも一緒に移します。念のため、元データは残したままにしておきましょう。

$ sudo rsync -avuz /var/lib/mysql /mnt/foobar

3. 既存のデータディレクトリの名前を変更する

既存のデータディレクトリの名前を変更します。同じ名前を対象としてシンボリックリンクを作るため、名前の重複を避けるためです。

$ sudo mv /var/lib/mysql /var/lib/BACKUP_mysql

4. シンボリックリンクを張る

既存のデータディレクトリの場所にシンボリックリンクを張ります。リンク先は外付けHDDのMySQLのデータディレクトリです。

$ sudo ln -s /mnt/foobar/mysql /var/lib/mysql

5. MySQLのサーバの設定ファイルを一部編集する

この段階で MySQL サーバを開始するとエラーになります*3。エラーを回避するために設定ファイルを編集します。設定ファイルの場所は次のとおりです。

  • /etc/mysql/mysql.conf.d/mysqld.cnf

修正(コメントイン)する場所は次のとおりです。

tmpdir = /tmp
log_bin = /var/log/mysql/mysql-bin.log

6. MySQL サーバを起動する

MySQL サーバを起動して、エラーが出なければ OK です。

$ sudo service mysql start

補足

こういう標準外のことを行う場合にはパーミッションでハマることが多い*4ので、設定ファイルをいじくり回すなどの派手なことはなるべくせずに解決したいものです。

*1:あまり推奨されませんが

*2:そうでなくても、ラズパイのMicroSDは壊れるものと思っておくほうがいいです

*3:ここで半日ハマりました

*4:ハマりました

Powered by はてなブログ