データベース実体の保存先の変更
ことはじめ データベースを使ったアプリを作ろうとしているのだが、rootディレクトリ以下がマウントされているSSDの容量が圧迫されており、データベースの実体の保存先を外部HHDに移さないといけなくなった。ので、備忘録もかねて移し方を解説していく。 データベースの実体 Mysqlで管理されているデータベースの実体は結局はファイルである。そのファイルをどこに置くのかは /etc/mysql/mysql.conf.d/ 以下のファイルで定義されている。デフォルトでは /var/lib/mysql がmysqlのデータベースの実体が置かれる場所となる。 データベースの実体の保存場所の変更 データベースの実体の保存場所をhddに移動させる方法を解説する。新しくdbの実体を保存するhddを、 /dev/sda1 とする。なお、hddをファイルシステムに認識させるには、パーティションを作成し、その上にファイルシステムを作らないといけない。これについては別の記事を参照すること。 多くの参考サイトは以下のコマンドを打つだけでHDDにデータの保存先を変更できると書いてある。 sudo mount /dev/sda1 /var/lib/mysql しかし、これは間違いである。実際は、/var/lib/mysqlのすべての内容を一度/dev/sda1にコピーする必要がある。 なぜなら、/var/lib/mysql以下にはmysqlが動作するために必要なモジュールやファイル一式が格納されているからである。 よって、まず初めに、mysqlデーモンを停止する。そして適当なポイント(e.g., /mnt/mnt_db/)に/dev/sda1をマウントし、/var/lib/mysqlをまるっと持ってくる。 sudo systemctl stop mysql.servive sudo mount /dev/sda1 /mnt/mnt_db cp -rp /var/lib/mysql/* /mnt/mnt_db ここまで来て初めて、 sudo mount /dev/sda1 /var/lib/mysql でマウントする。 sudo systemctl start mysql.service で再起動すれば問題なくできるはずである。 mysqlにログインしてデータベース作成、ユーザに権限を与え、外部アクセスを可能にするまで 外からデータベースにアクセスする方法。意外と手間取ったから、軽く流れを書いておく。 まずはローカルで、rootでmariadbにアクセス create database name identified by 'password'; でデータベースを作る。その後、外部アクセス用のユーザを作る。 作り方は、 create user user_name; そして、先ほど作ったデータベースの権限を今作ったユーザに与える。 こんな感じで。 そのあと、やることとしては、データベース用のポート解放(3306)。あと設定ファイルの変更 /etc/mysql/conf でbind=127.0.0.1が設定されていると特定のアドレスからしかアクセス出来なくなるのでコメントアウトすること。 しかし実際に運用するときはセキュリティを高めるために通信を許可するアドレスを設定したほうがいい。 その他、mysqlで忘れがちなこと localhostでのログイン方法 ルートでログインする際: sudo mysql -u root -p ...