ことはじめ

データベースを使ったアプリを作ろうとしているのだが、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

データベースの作り方

create database “name”

ユーザの作り方

create user “user_name” identified by ‘password’;;

sqlでよく使うコマンド

データベース一覧表示

show databases

使用するデータベースを選択

use 'database_name'

レコードの取得

SELECT * FROM db_name;

テーブルの削除

DROP TABLE table_name

参考文献

qiita データサイエンティストの備忘録