NFSサーバの設定

NFSサーバの設定についてい記載します。

対象は、NFSv3で、NFSv4については、今のところ掲載していません。

なお、検証環境はCentOS-6です。

 

NFSサーバのインストール

NFSサーバに必要なパッケージをインストールします。

yum install nfs-utils rpcbind

 

NFSに必要なデーモンは以下の通りです。

rpcbind
nfslock
nfs

 

必要なデーモンの起動設定をします。

/sbin/chkconfig rpcbind on
/sbin/chkconfig nfslock on
/sbin/chkconfig nfs on 

 

 

NFSサーバ側の設定

NFSで公開するディレクトリを、/etc/exportsで設定します。

ここでは、/exports/www/export/docs/exports/logsをNFSで公開する設定をします。

書式は、[公開ディレクトリ] [IPアドレス][オプション]です。ここでは、よく利用するオプションで設定しています。

/etc/exports

192.168.1.0/24のネットワークに読み書き可能で公開
/exports/www 192.168.1.0/24(rw,sync)
192.168.1.0/24のネットワークに読み込み専用で公開
/exports/docs 192.168.1.0/24(ro)
192.168.1.100に読み書き可能で公開。192.168.1.200に読み込み専用で公開
/exports/logs 192.168.1.100(rw,no_root_squash,sync) 192.168.1.200(ro)

 

設定したら必要なサービスを起動します。

/etc/init.d/rpcbind start
/etc/init.d/nfslock start
/etc/init.d/nfs start

 

設定を変更した場合は、nfs のみ再起動します。

/etc/init.d/nfs restart

 

NFSサーバのオプション

/etc/exports で指定できるオプションの内、利用頻度の多いものをご紹介します。

ro ファイルシステムのマウントを読み取り専用にします。
rw ファイルシステムのマウントを読み書き可能とします。
wdelay 別の書き込み要求が発生する場合に、 NFSサーバはディスクへの 書き込みを遅らせます。別々の書き込みによってディスクにアクセスする回数を減らし書き込みオーバーヘッドを少なくなることでパフォーマンスを向上します。
no_wdelay wdelayの機能をOFFします。この指定にはsyncオプションを利用している必要があります。
root_squash NFSクライアントから、root権限での書き込みを禁止します。これはデフォルト値です。
no_root_squash NFSクライアントが、root権限での書き込み可能とします。
sync NFSサーバがディスクへの書き込みが実際に行われるのを確認してから、次の書き込み要求に応答します。
async NFSサーバはディスクへの書き込みが実際に行われる前に書き込み要求に応答します。ただし、この非同期オプションを利用した場合には、パフォーマンスは上がりますが、NFSサーバがクラッシュした場合などには、検出不可能なデータ損失が起こる恐れがあります。

 


NFSクライアントの設定

NFSサーバで公開されているディレクトリをマウントして利用する設定をします。

マウントする場合の書式は以下の通りです。

IPアドレスorFQDN:公開ディレクトリ マウントディレクトリ オプション

 

パッケージのインストールと起動設定

必要なパッケージと、起動デーモンの設定をします。

・インストール

yum install rpcbind nfs-utils

 

・起動デーモンの設定

chkconfig rpcbind on
chkconfig netfs on

 

・手動での起動

/etc/init.d/rpcbind start
/etc/init.d/netfs start

 

 

コマンドでマウント

コマンドでマウントする場合は以下のようにします。

mount -t nfs 192.168.1.1:/exports/www /exports/www -o rsize=8192,wsize=8192,hard,intr

 

自動マウント

起動時に自動でマウントする場合は、/etc/fstabに設定します。

192.168.1.1:/exports/www	/exports/www	nfs	rsize=8192,wsize=8192,hard,intr	0	0
192.168.1.1:/exports/docs	/exports/docs	nfs	rsize=8192,hard,intr		0	0

 

 

マウントオプション

ここでは、主なマウントオプションを解説します。

オプション 説明
rsize 読み出しのバッファサイズを指定します。
通常8kb程度が最も性能が出るでしょう。
wsize 書き込みのバッファサイズを指定します。
通常8kb程度が最も性能が出るでしょう。
soft / hard NFSのファイル操作がタイムアウトした場合の設定です。
softはI/Oエラーを返し、hardはコンソールにメッセージを表示しリトライを続けます。
intr hardが設定されている場合に、リトライの中断を許可します。
指定が無い場合はリトライが永遠に続きます。
noatime 読み込み時にタイムスタンプを更新しません。これによりパフォーマンスを向上させます。

MySQLのインストールと設定

MySQLのインストールと初期設定について記載します。

なお、MySQLはCentOS-6に含まれるパッケージを利用します。

 

MySQLのインストール

CentOS-6のMySQLをインストールするには、以下の2つのパッケージをインストールします。

yum install mysql mysql-server

 


MySQLの初期設定

MySQLの設定は、/etc/my.cnfにて行います。

my.cnfのテンプレートファイルは、/usr/share/mysql/以下にいくつか用意されていますので、これを複製して利用します。今回は、my-small.cnfを利用しました。

まず、利用するテンプレートファイルを、/etc/my.cnfとしてコピーします。

cp /usr/share/mysql/my-small.cnf /etc/my.cnf

 

 

文字コードの設定

次に、/etc/my.cnfにデフォルトの文字コード設定を追加します。

[client]
#password	= your_password
port		= 3306
socket		= /var/lib/mysql/mysql.sock
default-character-set=utf8 <--追加

[mysqld]
port		= 3306
socket		= /var/lib/mysql/mysql.sock
default-character-set=utf8 <--追加

[mysqldump]
quick
max_allowed_packet = 16M
default-character-set=utf8 <--追加

[mysql]
no-auto-rehash
default-character-set=utf8 <--追加

 

 

innodbを利用する場合

innodbを利用する場合は、以下の行のコメントを外します。

innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
innodb_log_arch_dir = /var/lib/mysql/
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

 

 

MySQLの起動と停止

MySQLを起動、停止するには以下のコマンドを利用します。

 

起動

/etc/init.d/mysqld start

 

停止

/etc/init.d/mysqld stop

 

 

 起動デーモンの設定

OS起動時に、自動で起動するように以下も設定します。

/sbin/chkconfig mysqld on

 


MySQLのレプリケーション設定

MySQLには、マスタサーバのデータが更新された時に、自動的にスレーブサーバに反映させ同期するレプリケーション機能が標準で付いています。

MySQLのレプリケーションでは、1台のマスタサーバと複数台のスレーブサーバで構成するシングルマスタ方式です。

ここでは、マスタサーバを1台、スレーブサーバを1台の最小構成での設定例を示します。

レプリケーションを設定するには、以下の手順を行います。

・レプリケーションユーザの追加

・MySQLの設定/etc/my.cnf

・レプリケーションの実行

 

レプリケーションユーザの追加

マスタサーバにレプリケーション用のデータベースユーザを追加します。

なお、スレーブサーバは、192.168.1.101とします。

grant replication slave on *.* to repl@'192.168.1.101' identified by 'パスワード'

*複数のスレーブサーバがある場合は、台数分の権限設定を行ってください。

 

MySQLの設定/etc/my.cnf

マスタサーバの設定

/etc/my.cnf

[mysqld]
log-bin <---ログをバイナリ形式に指定
server-id	= 1 <---サーバの識別IDを設定

 

スレーブサーバの設定

/etc/my.cnf

[mysqld]
log-bin  <---ログをバイナリ形式に指定
server-id	= 2  <---サーバの識別IDを設定
master-host	= 192.168.1.100  <---マスタサーバのIPを指定
master-user	= repl  <---レプリケーションユーザを指定
master-password	= passowdtext  <---レプリケーションユーザのパスワードを指定
master-port	= 3306  <---マスタサーバのポート番号を指定
replicate-ignore-db=mysql
report-host 	= db02.unixlife.local  <---レプリケーションホスト(自ホスト)を指定

設定が終了したら、マスタサーバ、スレーブサーバとも再起動してください。

 

レプリケーションの開始

設定が終わった状態で、マスタサーバとスレーブサーバが再起動されているとします。

ここで、スレーブサーバで以下のコマンドを発行します。

start slave;

スレーブサーバでレプリケーションを開始すると、データの同期が開始されます。

 

レプリケーションの確認

レプリケーションが正常に動作しているか確認します。

マスタサーバで以下のコマンドを発行し、 Binlog Dump のスレッドか起動しているか確認してください。

show processlistG

 

次に、スレーブサーバで以下のコマンドを発行し、 Slave_IO-Running と Slave_SQL_Running がともにyesであることを確認してください。

show slave status;

MySQLの基本操作

MySQLで利用頻度の高いコマンドの使用例を列挙します。

 

ユーザ管理

MySQLを利用するために、MySQLにユーザを登録や変更を行います。

 

rootユーザでのログインとパスワード設定

インストール直後にMySQLにログインするには、以下のコマンドを利用します。

mysql -u root

これで、MySQLにrootでログインし操作することが可能な状態になります。

rootユーザはMySQLのすべてに関して管理権限を持ったユーザになりますので、必ずパスワードの設定を行いましょう。

 

パスワードの設定には、以下のコマンドを利用します。

set password = password('パスワード')

 

パスワードを設定したMySQLにログインするには、以下のコマンドを利用します。

mysql -u root -p パスワード

 

なお、rootユーザで他のユーザのパスワードを変更するには、以下のコマンドを利用します。

set password for username@'localhost' = password('パスワード');

 

 

インストール直後のユーザ

インストール後のMySQLには、以下のユーザが登録されています。

select user, host, user from mysql.user;
+------+-------------------------+------+
| user | host                    | user |
+------+-------------------------+------+
| root | 127.0.0.1               | root |
|      | localhost               |      |
| root | localhost               | root |
|      | localhost.localdomain   |      |
| root | localhost.localdomain   | root |
+------+-------------------------+------+

初期では、rootユーザのみが登録されていますが、hostは複数の表記があります。

MySQLのユーザは、ユーザ名@アクセス元 がセットになって一位のユーザと見なされます。

127.0.0.1とlocalhost、localhost.localdomainはいずれも自ホストを表し、ここでは、自ホストから接続してくる root ユーザのみが登録されていることになります。

 

匿名ユーザの削除

匿名ユーザとは、hostの設定があるものの、userの設定値がない物を示します。

匿名ユーザが設定してあるとデータベースに匿名ユーザとしてログオンできてしまうため、特別な理由がない限り匿名ユーザは削除しておくといいでしょう。

なお、匿名ユーザの削除には以下のコマンドを利用します。

例)host = localhostの匿名ユーザを削除

delete from mysql.user where user like '' and host like 'localhost';
flush privileges;

 

 

ユーザの追加と削除

ユーザの追加

ここでは、ユーザhoge@localhostをデータベースtestdbのユーザとして登録します。

すべての権限を付加して登録する

grant all on testdb.* to hoge@localhost identified by 'パスワード'

 

SELECT , INSERT , DELETE , UPDATE権限を付加して登録する

grant select,insert,delete,update on testedb.* to hoge@localhost identified by 'パスワード'

 

192.168.1.100からtestdbにアクセスできるユーザhogeを登録する

grant all on testdb.* to hoge@'192.168.1.100' identified by 'パスワード'

 

192.168.1.0/24からtestdbにアクセスできるユーザhogeを登録する

grant all on testdb.* to hoge@'192.168.1.%' identified by 'パスワード'

 

ユーザの削除

ここでは、ユーザ hoge@localhostを削除する例を示します。

ユーザを削除する場合は、先にrevokeで権限を削除してから、deleteでユーザを削除します。

revoke all on tested.* from hoge@localhost; 
delete from mysql.user where user like 'hoge' and host like 'localhost'; 
flush privileges;

 

ユーザの権限設定

ユーザ権限の表示

show grants for hoge@localhost;

 

INSERT権限の追加

grant insert on tested.* to hoge@localhost;

 

INSERT権限の削除

revoke insert on testdb.* from hoge@localhost;

 


データベースの基本操作

データベースの一覧表示

show databases;

 

指定のデータベースへ移動

use testedb;

 

データベースを文字コード指定して作成

create database tested character set utf8 collate utf8_bin;

*utf8=UTF-8,sjis=Shift_JIS,ujis=EUC-JP

 

データベースの削除

drop database testedb;

 

 

テーブルの基本

 

テーブルの一覧表示

show tables;

 

テーブルの追加(作成)

user_tblテーブルを以下の条件で作成します。

プライマリキー uid (自動採番)、エンジンタイプ MyISAM

create table user_tbl (u_id int auto_increment NOT NULL, name text NOT NULL, primary key(u_id)) type MyISAM;

 

テーブルの削除

user_tblテーブルを削除します。

drop table user_tbl;

 

 

テーブルの変更

1度作成したテーブルを変更するには、alter table文を利用します。

テーブル名を変更する

alter table 旧テーブル名 rename 新テーブル名;

 

カラムの名を変更する

alter table テーブル名 change 旧カラム名 新カラム名;

 

カラムの型を変更する

alter table テーブル名 modif カラム名 型 not ull default デフォルト値;

 

カラムを自動インクリメントに変更する

alter table テーブル名 modify カラム名 int auto_increment;

 

カラムを追加する

alter table テーブル名 add 追加するカラム名 型;

 

カラムを削除する

alter table テーブル名 drop 削除するカラム名;

 

主キー(プライマリキー)を設定する

alter table テーブル名 add primary key (カラム名);

 

主キー(プライマリキー)を削除する

alter table テーブル名 drop primary key;

 

ユニークインデックスを設定する

alter table テーブル名 add unique (カラム名);

 

インデックスを設定する

alter table テーブル名 add index カラム名;

 

インデックスを削除する

alter table テーブル名 drop index インデックス名;

 

 

バックアップとリストア

MySQLサーバのバックアップの取得方法とリストア方法について記載します。

なお、バックアップには、mysqldumpを利用します。

MySQLデータベース全体をバックアップ

mysqldump -u root -p -x --all-databases > dump.sql

 

バックアップを圧縮する

 mysqldump -u root -p -x --all-database | gzip > dump.sql.gz

 

特定のデータベースを指定してバックアップ

mysqldump -u root -p データベース名 > database.dump.sql

 

自動バックアップ

cronで自動バックアップを取得する場合は、以下のようにします。(圧縮して取得)

mysqldump -x --all-databases -u root --password='パスワード' | gzip > dump.sql.gz >/dev/null 2>&1

 

MySQLデータベース全体をリストア

mysql -u root -p < dump.sql

 

MySQLデータベース全体のリストア(圧縮)

 zcat dump.sql.gz | mysql -u root -p

 

特定のデータベースを指定してリストア

mysql -u root -p データベース名 < database.dump.sql