2012年4月8日日曜日

[MySQL]レプリケーション環境構築手順 for メモリかつかつ人 vol1~1サーバーにMySQL2つインストール

簡単お手軽なMySQLレプリケーション。一昔前だと、環境作って動作確認するのにハードウェアが最低2台は必要だったのでしょうが、現代はというと…いや~仮想マシンって本当にいいもんですね。ハード1台でも、独立したサーバー環境を複数作成できちゃいます。

ただ、仮想マシンは当然それなりにメモリを食います。そして、いくらメモリ激安な現代と言えど、かつかつな環境で日夜スワッピングと戦いながら仕事をしているプログラマはきっと存在する筈。ちなみに僕も前の会社ではこんな感じで、転職してからこんなんだったのが、現在は何と12Gというデラインコグニタですよ。

というわけで、そんな戦うプログラマの方々のために、1つのサーバー環境でレプリケーション環境を構築する手順を捧げます。つっても、+αの作業は、1台のサーバーにMySQLを複数インストールってことだけですけど。仮想環境を複数起動する余裕があり、レプリケーション環境構築手順だけ知りたい方は、このエントリ読み飛ばしてこちらを参照ください
尚、実運用においてはマスターとスレーブを別々の箱に置くべきであることは言うまでもありません。

試した環境

  • CentOS 5.6(64bit), 6.2
  • MySQL 5.1.61

1.MySQLインストール(マスター用)

yumでさくっと入れちゃいましょう。2行目移行のセキュア設定と自動起動設定はお好みで。
# yum -y install mysql-server
# /etc/init.d/mysqld start
# mysql_secure_installation
# /sbin/chkconfig mysqld on

2.MySQLインストール(スレーブ用)

こっちはソースからインストールします。
事前準備
コンパイラをインストール。バージョン5.1移行の場合は、2行目も必要。makeが入ってない場合はインストールしてください。
# yum install gcc gcc-c++
# yum install ncurses-devel
# yum install make
ソースダウンロード
以下のページから入手できるので、wgetかブラウザでダウンロード。

# wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.61.tar.gz
コンパイル&インストール
以下の例では「/usr/local/mysql」にインストールします。
ポート番号はマスターや既存サービスと被らないものを指定するように。
あとInnoDB有効とするconfigureオプションは、バージョン5.1では
「--with-plugins=innobase」
です(「--with-innodb」ではない。「./configure --help」で調べてみ。)。
$ tar xvzf mysql-5.1.61.tar.gz
$ cd mysql-5.1.61
$ ./configure --with-charset=utf8 --with-extra-charsets=all --with-mysqld-user=mysql --prefix=/usr/local/mysql --with-tcp-port=53306 --with-unix-socket-path=/usr/local/mysql/var/mysql.sock --with-plugins=innobase
$ make
# make install
# chown -R mysql:mysql /usr/local/mysql/
DB初期化
# {ソースディレクトリ}/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql
my.cnf作成
一例。配置場所はbasedirかdatadirに。まあbasedirが一般的だろうか。
# vim /usr/local/mysql/my.cnf
[mysqld]
port=53306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var
default-character-set=utf8

[mysql.server]
user=mysql
basedir=/usr/local/mysql

[mysqld_safe]
socket=/usr/local/mysql/var/mysql.sock
log-error=/var/log/mysqld_slave.log
pid-file=/var/run/mysqld/mysqld_slave.pid

[client]
default-character-set=utf8

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8
起動スクリプトコピー
インストールディレクトリ配下にある「mysql.server」をリネームコピーし、ルートディレクトリのパスなどを追記。
# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld_slave
# chmod 755 /etc/init.d/mysqld_slave
# vim /etc/init.d/mysqld_slave
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var
pid_file=/var/run/mysqld/mysqld_slave.pid
起動確認と自動起動設定
# /etc/init.d/mysqld_slave start
# /usr/local/mysql/bin/mysql -u root
# /sbin/chkconfig --add mysqld_slave
# /sbin/chkconfig mysqld_slave on
# /sbin/chkconfig --list | grep mysql

記事ボリュームが結構でかくなったので

肝心のレプリケーション設定は次回に持ち越します。
録画しといたIPPONグランプリも早く観たいし。