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グランプリも早く観たいし。

2012年3月7日水曜日

PHP4環境構築とPEAR強制アップグレードメモ

PHP4…CakePHPがバージョン2になってついにサポート対象から外れたこんな時代に需要なんて殆ど無いだろうけど、まあ仮想マシンなら物理的な場所とらないってことで一応環境作って残しときましょう…ってことで実際需要が発生したので、まあブログなら物理的な場(以下同文)

願わくば、我のみならず俗世においても当エントリを必要とする状況があまり発生せんことを。停滞は後退だ。2010年にもなって新規案件でVBScriptてIE6てJava1.4て…(はいわざわざ過去をほじくり返してイラついている大馬鹿者です)

試した環境

  • CentOS 5.6(64bit)
  • Apache 2.2
  • PHP 4.3.11
ちなみに、PHP4.2以前はApache2系と相性悪いらしく、実際僕もインストールできませんでした。

事前準備

Apacheインストール
apxsってのも必要なのでhttpd-develも一緒に。
# yum -y install httpd httpd-devel
Flexとlibxml2インストール
# yum -y install flex libxml2-devel

PHPインストール

yumでのインストールはできないので、ソースからインストールせざるをえない。
ダウンロード、コンパイル、インストール
旧バージョンも含めたPHPのソース置き場は以下。
configureオプションはとりあえず必要最低限の設定。
$ wget http://museum.php.net/php4/php-4.3.11.tar.gz
$ tar zxvf php-4.3.11.tar.gz
$ cd php-4.3.11
$ ./configure --enable-mbstring --with-apxs2=/usr/sbin/apxs
$ make
# make install
php.ini作成
解凍したソース一式の中にある「php.ini-dist」という雛形があるので、それをコピー。
# cp php.ini-dist /etc/php.ini
Apache設定
httpd.confに以下の設定を追加。その後再起動。
AddType application/x-httpd-php .php
最低限の設定は完了。あとはおなじみのphpinfo()で動作確認。
動かなかったら、ファイアウォールやSELinuxの設定を確認してみろ、と自分に向けて書いておく。

HTTP_Requestインストールから学ぶ、PEARパッケージ強制アップグレード

作成したPHP4環境では、HTTP_Requestも必要だったのだけど、これも一筋縄ではいかなかったのでメモする次第。
普通にインストールできるかと思いきや…
# pear install HTTP_Request -a
HTTP error, got response: HTTP/1.1 410 Gone
Didn't receive 200 OK from remote server. (HTTP/1.1 410 Gone)
何か「そんな古いパッケージはもう置いてねえよ」とでも言ってるようなエラーメッセージだ。
以下によると、PEARのバージョンが古いからだろうとのこと。
確かにパッケージのドキュメントに「PEAR Installer 1.4.3」って書いてあるわ。PHP 4.3.11を当エントリの手順でインストールした場合、PEARのバージョンは1.3.5だった。

ということで、上記記事を参考に、PEARを強制アップグレード…の前にまず「Archive_Tar」を強制アップグレード。これやっとかないと、PEAR強制アップグレード自体で同様の「410 Gone」エラーが発生する。
# pear upgrade --force http://pear.php.net/get/Archive_Tar-1.3.1.tar
# pear upgrade --force http://pear.php.net/get/PEAR-1.4.3.tar
# pear install HTTP_Request -a

終わり。自分で書いときながらだけど、このエントリ読み返したくねぇ(読み返すような状況に遭遇したくねぇってことです)。

2012年2月5日日曜日

VirtualBox ディスク容量変更方法

「これだけあれば事足りるだろう」との決定を下した後、「こんな筈じゃなかった!」とハードディスクの容量が足りなくなる事は人の世の常。今回はVirtualBoxのディスク容量を変更する方法をご紹介します。やらなきゃいけない事は
  1. 仮想ディスクの容量変更
  2. パーティションサイズの変更
です。

試した環境

  • VirtualBox 4.1.8
  • ゲストOS:CentOS 6.2
  • ホストOS:Windows 7, Vista

仮想ディスクの容量変更

容量増やしたい場合
作業前に念のためバックアップ(クローン)を作成しておくことを推奨します。
コマンドプロンプトを起動し、VirtualBoxのインストールフォルダに移動し、以下のコマンドを実行。
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd VDIファイルパス --resize 希望サイズ(MB)
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
容量減らしたい場合(需要あるのか?)

注:これまでもそしてこれからも未検証

仮想ディスクのサイズ変更だけなら、以下の方法でいけるかもしれませんが…
  1. 希望のサイズの空仮想ディスクを新規作成
  2. 既存の仮想ディスクの内容を空仮想ディスクにコピー
ただし後述の通りパーティションサイズはそのままなので、この場合起動できるかどうか分からん。

仮想ディスクのコピーは以下コマンドを実行。
ああでもコピー先の方が容量少ないとこの段階でエラー発生しそうだな。
C:\Program Files\Oracle\VirtualBox>VBoxManage.exe clonevdi コピー元VDIファイル コピー先VDIファイル --existing
※参考

パーティションサイズの変更

仮想ディスクの容量変更しても、残念ながらパーティションサイズは元のままですので、ここも変更する必要があります。普通にCentOSをインストールした場合、ルートディレクトリはLVMパーティションとして作成されるので、ここではLVMパーティションのサイズ変更手順を解説します。
尚、LVMパーティションかどうかを確認するには以下コマンド。
# fdisk -l
/dev/sda1 …
/dev/sda2 … Linux LVM

そもそもLVMって何なのかってのは割愛。
ちなみに僕がとった流れは以下の通り。多分もっとスマートなやり方があると思うけど…
  1. 未割り当て領域に新規パーティション作成
  2. LVMパーティションに1.で割り当てたパーティションがっちゃんこしてサイズ拡大
未割り当て領域に新規パーティション作成
僕はGparted使いました。以下ページからISOファイルをダウンロード。
ダウンロードしたISOファイルをIDEコントローラにマウントした状態(「設定」→「ストレージ」で「IDEコントローラ」にISOファイルを割り当て)で仮想マシン起動。

その後は以下の流れを辿って、GpartedをGUIモードで起動。
  • Gparted Live (Default settings)
  • 言語:「Japan」
  • モード:GUI(「0」)
未割り当て領域を右クリック→「New」で表示されるダイアログにて新規パーティションを作成。以下のような感じで。

その後は
  • ツールバーの「Apply」をクリックし、変更を適用。
  • 左上の「Exit」アイコンをダブルクリックし、一旦シャットダウン。
  • シャットダウンしたらGpartedのISOファイルの割り当て解除し、仮想マシンを再度起動。
起動したら以下コマンドで新規パーティションの作成確認。
# fdisk -l
/dev/sda1 …
/dev/sda2 … Linux LVM
/dev/sda3 … Linux
LVMパーティションに新規作成したパーティションがっちゃんこしてサイズ拡大
まずは新規パーティションをPVとして作成。
# pvcreate /dev/sda3
…
Physical volume "/dev/sda3" successfully created
# pvdisplay ←PVの情報を表示

次に新規PVをVGへ登録。vgdisplayでVGの名前を確認し、vgextendでその名前を指定する。vgextendが成功したら、vgdisplayでVGサイズを確認してみてください。増えてればOKです。
またこの時、「Free PE / Size」の右側をメモしておいてください。
# vgdisplay
--- Volume group ---
VG Name               vg_virtualbox
…
# vgextend vg_virtualbox /dev/sda3
Volume group "vg_virtualbox" successfully extended
# vgdisplay
--- Volume group ---
…
VG Size  9.50 GiB
…
Free PE / Size  511 / 2.00 GiB

最後に、LVのサイズを拡大。
「lvextend -L [拡大サイズ] [LV名]」と打ち込みます。サイズには前述の「Free PE / Size」の右側の数字の値を、LV名はlvdisplayで表示される「LV Name」を指定。
# lvextend -L +2G /dev/vg_virtualbox/lv_root
Logical volume lv_root successfully resized
# resize2fs /dev/vg_virtualbox/lv_root

すべてが完了したら、lvdisplayやdfでサイズを確認してみてください。

※参考