9月 27

MySQLのデータベースを、データベースごとに別々の物理ディスクに分散配置するには

以前、MySQLデータベースの配置先をまるごと別の領域に移転する方法を紹介しました[ 1, 2, 3 ]。

これをさらに、その中のデータベースごとに、保存先を変えることができたなら。
別々のHDDやSSDを用意して、特定のデータベースだけ移動することで、
負荷分散や、容量不足への対応が可能になります。

たまたま「MySQL symbolic link」で検索したところ、どうもできるらしい!(←これ、ちょっとわかりづらい)ことに気がつきました。
今回、実際やってみたので、レポートします。

まずは当方のデータベースの現状が、以下の通りです。

[code.zobe.jp]# ls -al /var/zobe/mysql (注意: 普通は /var/lib/mysql です)
drwxr-xr-x 11 mysql mysql     4096  9月  6 20:51 .
drwxr-xr-x  3 root  root      4096  9月  5 16:56 ..
drwx------  2 mysql mysql     4096  9月  6 15:17 blog_mt_pcparts
drwx------  2 mysql mysql     4096  6月 19 17:43 blog_wp_code
-rw-rw----  1 mysql mysql 20971520  9月 25 01:15 ib_logfile0
-rw-rw----  1 mysql mysql 20971520  9月 18 12:43 ib_logfile1
-rw-rw----  1 mysql mysql 94371840  9月 25 01:15 ibdata1

 

blogが2つと、InnoDBのログファイルがあるのがわかります。
blog_mt_pcparts は MovableType を使用したブログサイトです。
blog_wp_code が WordPress を使用した、当サイトです。

今回は当ブログのデータベース、blog_wp_code を移転してみます。
失敗したらこの記事は閲覧することができません…みえていますか?

 

今回は移転先を「/var/zobe/mysql2」としています。
実際にはお手持ちの環境に合わせて適宜変更してください。

ディレクトリを作成して、アクセス権限を root から mysql に変更します。

[code.zobe.jp]# mkdir /var/zobe/mysql2
[code.zobe.jp]# chown mysql:mysql /var/zobe/mysql2

 

データベース移転作業を行います。まずは関連サービスを停止します。

[code.zobe.jp]# service httpd stop
httpd を停止中:                                            [  OK  ]
[code.zobe.jp]# service mysqld stop
MySQL を停止中:                                            [  OK  ]

 

データベースを移転します。
データベースが大きい場合や、ディスクの速度が遅い場合は、
結構待たされちゃうかもしれません。

[code.zobe.jp]# mv /var/zobe/mysql/blog_wp_code /var/zobe/mysql2/

 

移動が完了したら、移動後のディレクトリの内容を見てみましょう。
mysql ディレクトリから mysql2 に blog_wp_code だけ移動したことがわかります。

[code.zobe.jp]# ls -al /var/zobe/mysql
drwxr-xr-x 11 mysql mysql     4096  9月  6 20:51 .
drwxr-xr-x  3 root  root      4096  9月  5 16:56 ..
drwx------  2 mysql mysql     4096  9月  6 15:17 blog_mt_pcparts
-rw-rw----  1 mysql mysql 20971520  9月 25 01:15 ib_logfile0
-rw-rw----  1 mysql mysql 20971520  9月 18 12:43 ib_logfile1
-rw-rw----  1 mysql mysql 94371840  9月 25 01:15 ibdata1

[code.zobe.jp]# ls -al /var/zobe/mysql2
合計 24
drwxr-xr-x 3 mysql mysql 4096  9月 25 01:26 .
drwxr-xr-x 4 root  root  4096  9月 25 01:23 ..
drwx------ 2 mysql mysql 4096  6月 19 17:43 blog_wp_code

 

移転元から参照できるよう、移転先へのシンボリックリンクを作成します。

[code.zobe.jp]# ln -s /var/zobe/mysql2/blog_wp_code /var/zobe/mysql/blog_wp_code

 

正しく移転作業が行えたかどうか、再度確認してみます。
ここまでの作業によって、データベースの実体は移転し、MySQLのデータベースディレクトリから、
移転したデータベースへのシンボリックリンクが張られました。

[code.zobe.jp]# ls -al /var/zobe/mysql/
drwxr-xr-x 10 mysql mysql     4096  9月 25 01:32 .
drwxr-xr-x  4 root  root      4096  9月 25 01:23 ..
drwx------  2 mysql mysql     4096  9月  6 15:17 blog_mt_pcparts
lrwxrwxrwx  1 root  root        29  9月 25 01:32 blog_wp_code -> /var/zobe/mysql2/blog_wp_code
-rw-rw----  1 mysql mysql 20971520  9月 25 01:24 ib_logfile0
-rw-rw----  1 mysql mysql 20971520  9月 18 12:43 ib_logfile1
-rw-rw----  1 mysql mysql 94371840  9月 25 01:24 ibdata1

 

あとはサービスを起動して、動作を確認してみましょう。
(このサイトが閲覧できているということは、成功ということです。)

 

[code.zobe.jp]# service mysqld start
MySQL を起動中:                                            [  OK  ]
[code.zobe.jp]# service httpd start
httpd を起動中:                                            [  OK  ]

 

 

どうだったでしょうか?

 

これと、CentOSに新しくHDDやSSDを追加する方法を組み合わせる[ 1, 2 ]ことで、
データベースに負担のかかるシステムを、低コストに高速化したり、
容量追加したりすることができるようになります。

コメントを残す

Your email address will not be published.