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