MySQLのファイル分散

ストレージエンジンにInnoDBを利用した場合のファイル分散の設定を行う。
私の場合は既にテーブル等を作成してしまっていたため、データ移行を含めて作業を実施した。

作業の流れとしては概ね下記のとおり。
1.データのエクスポート
2.既存データファイルの退避
3.my.cnfの変更
4.データのインポート

1.mysqldumpを利用してデータベース(定義を含む)のエクスポート

[root@c1 mysql]# mysqldump --user=root --password={パスワードを指定} --socket=/tmp/mysql.sock --single-transaction --master-data --flush-logs --hex-blob --default-character-set=utf8 --all-databases --result-file=/tmp/all-backup.dmp

2.既存のデータ保存ディレクトリを別名にて保存

[root@c1 mysql]#mv mysql mysql.bak

3.新規にデータ保存ディレクトリを作成

[root@c1 mysql]# mkdir ./mysql/archive ./mysql/data ./mysql/data1 ./mysql/data2 ./mysql/logdir
[root@c1 mysql]# chown -R mysql:mysql archive data data1 data2 logdir

4.my.cnfを変更

下記を追加
innodb_data_home_dir =
innodb_data_file_path = /home/mysql/data1/ibdata1:300M;/home/mysql/data2/ibdata2:300M
innodb_file_per_table

データファイルを分散させる場合はinnodb_data_home_dirを空にして、innodb_data_file_pathでデータファイルを指定する。
上記の場合はmysql/data1/ibdata1とmysql/data2/ibdata2をそれぞれ300Mで作成。

5.データのインポート

MySQLの起動

MySQLを下記のオプションをつけて起動する。
権限テーブルがないので、--skip-grant-tablesをつける。
[root@c1 mysql]# mysqld_safe --defaults-file=/etc/my.cnf --skip-networking --skip-grant-tables &

データのインポート

[root@c1 mysql]# mysql --user=root --password={パスワードを指定} --socket=/tmp/mysql.sock < /home/share/dev/mysql/archive/all-20080216.dmp

MySQLの停止

[root@c1 mysql]# /etc/rc.d/init.d/mysql stop
Shutting down MySQL. [ OK ]

ログの削除

インポートした際にリレー用のログがいくつか作成されるのが、不要なため削除する。
[root@c1 data]# cd /home/mysql/data
[root@c1 data]# rm -rf c1-relay-bin.000001 c1-relay-bin.index master.info relay-log.info

MySQLの起動

[root@c1 mysql]# /etc/rc.d/init.d/mysql start
Starting MySQL.
[ OK ]

MySQLによる最速RDBMS構築ガイドMySQLによる最速RDBMS構築ガイド
(2005/09/17)
鶴長 鎮一、MCEA DB研究会 他

商品詳細を見る