<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>TATSUNET</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/" />
    <link rel="self" type="application/atom+xml" href="http://tatsunet.net/atom.xml" />
    <id>tag:tatsunet.net,2010-04-27://2</id>
    <updated>2012-05-18T06:33:02Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.01</generator>

<entry>
    <title>CakePHP 導入手順</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/05/rootlocalhost-wget-httpsgithubcomcakephpcakephpzipball13rootlocalhost-unzip-13--d-varwwwhtmlrootloca.html" />
    <id>tag:tatsunet.net,2012://2.1595</id>

    <published>2012-05-17T14:26:25Z</published>
    <updated>2012-05-18T06:33:02Z</updated>

    <summary>来週からCakePHPで作られているソーシャルゲームに携わることになったので復習...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cakephp" label="CakePHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[来週からCakePHPで作られているソーシャルゲームに携わることになったので復習を兼ねて・・・<br />1月まで触ってたんだけど、直近はCodeIgniterばかりだったので、少し忘れてるなぁ。<br /><br />以下のスクリプトを実行して、ApacheとPHPをインストールする。<br />install_apache_php.sh<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">#!/bin/sh

yum -y install httpd mod_ssl
sed -i "s/#ServerName www.example.com:80/ServerName localhost.localdomain:80/" /etc/httpd/conf/httpd.conf
sed -i "s/Options Indexes FollowSymLinks/Options Includes ExecCGI FollowSymLinks/" /etc/httpd/conf/httpd.conf
sed -i "338s/AllowOverride None/AllowOverride All/" /etc/httpd/conf/httpd.conf
sed -i "s/LogFormat \"%h %l %u %t \\\\\"%r\\\\\" %&gt;s %b \\\\\"%{Referer}i\\\\\" \\\\\"%{User-Agent}i\\\\\"\" combined/LogFormat \"%h %l %u %t \\\\\"%\!414r\\\\\" %&gt;s %b \\\\\"%{Referer}i\\\\\" \\\\\"%{User-Agent}i\\\\\"\" combined/" /etc/httpd/conf/httpd.conf
sed -i "s/ServerSignature On/ServerSignature Off/" /etc/httpd/conf/httpd.conf
sed -i "s/AddDefaultCharset UTF-8/#AddDefaultCharset UTF-8/" /etc/httpd/conf/httpd.conf
sed -i "s/#AddHandler cgi-script .cgi/AddHandler cgi-script .cgi .pl/" /etc/httpd/conf/httpd.conf
sed -i "s/Options Indexes MultiViews FollowSymLinks/Options MultiViews FollowSymLinks/" /etc/httpd/conf/httpd.conf
/etc/rc.d/init.d/httpd start
chkconfig httpd on
yum -y install php php-mbstring php-mysql
sed -i "s/;date.timezone =/date.timezone = \"Asia\/Tokyo\"/g" /etc/php.ini
/etc/rc.d/init.d/httpd restart</pre><br />CakePHPをダウンロードして、公開ディレクトリに配置する。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# wget https://github.com/cakephp/cakephp/zipball/1.3<br />[root@localhost ~]# unzip 1.3 -d /var/www/html/<br />[root@localhost ~]# mv /var/www/html/cakephp-cakephp-3d8f090/ /var/www/html/cakephp/<br />[root@localhost ~]# rm -f 1.3<br />[root@localhost ~]# chmod -R o+w /var/www/html/cakephp/app/tmp/cache/<br /></pre><br />サンプルを作成して、動作確認を行う。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /var/www/html/cakephp/app/controllers/hello_controller.php<br />&lt;?php<br />class HelloController extends AppController {<br />    public $name = 'Hello';<br />    public $uses = null;<br />    public $autoRender = false;<br /><br />    function index() {<br />        echo 'Hello world!';<br />    }<br />}<br />[root@localhost ~]# lynx http://localhost/cakephp/hello/<br /><br />   Hello world!</pre><br />
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tatsunet-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4798026646&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>
]]>
        
    </content>
</entry>

<entry>
    <title>RockMongo インストール手順</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/05/rockmongo.html" />
    <id>tag:tatsunet.net,2012://2.1594</id>

    <published>2012-05-14T23:08:58Z</published>
    <updated>2012-05-15T08:28:48Z</updated>

    <summary>MongoDBをインストールしたついでに、RockMongoもインストールしてみ...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mongodb" label="MongoDB" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[<a href="http://tatsunet.net/2012/05/mongodb.html">MongoDBをインストール</a>したついでに、<a href="http://rockmongo.com/wiki/introduction?lang=ja_jp">RockMongo</a>もインストールしてみた。<br />phpMyAdminのようなツール、こんなのもあるという程度で・・・<br /><br />ダウンロードして解凍するだけ。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# wget http://rockmongo.com/downloads/go?id=6 -P /var/www/html/<br />[root@localhost ~]# unzip /var/www/html/rockmongo-v1.1.2.zip -d /var/www/html/<br />[root@localhost ~]# rm -f /var/www/html/rockmongo-v1.1.2.zip<br /></pre><br />以下のURLにアクセスする。<br />http://localhost/rockmongo/<br />※デフォルトのUserNameとPasswordは「admin」。  ]]>
        
    </content>
</entry>

<entry>
    <title>MongoDB インストール手順</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/05/mongodb.html" />
    <id>tag:tatsunet.net,2012://2.1591</id>

    <published>2012-05-14T13:41:17Z</published>
    <updated>2012-05-15T09:42:33Z</updated>

    <summary>最近、ソーシャル系でMongoDBを使う案件をチラホラ見かけるようになってきたの...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mongodb" label="MongoDB" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[最近、ソーシャル系でMongoDBを使う案件をチラホラ見かけるようになってきたので、少し触ってみた。<br /><br />【環境】<br />OS：CentOS 6<br /><br />MongoDBをインストールする。<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/yum.repos.d/10gen.repo<br />[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
enabled=0<br />[root@localhost ~]# yum -y install --enablerepo=10gen mongo-10gen-server<br />[root@localhost ~]# /etc/rc.d/init.d/mongod start<br />[root@localhost ~]# chkconfig mongod on<br /></pre> 
<br />EPELリポジトリをインストールする。<br />※「<a href="http://tatsunet.net/2011/12/rpmforgeepelremi-centos-632bit.html">RPMforge/EPEL/Remi リポジトリインストール手順(CentOS 6)</a>」参照<br /><br />PHPのドライバをインストールする。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# yum -y install php-pecl-mongo</pre><br />PHPのサンプルを書いてみる。<br />※自動的に作られるので、データベース、コレクションを事前に作成しておく必要は無い。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /var/www/html/mongodb.php<br />&lt;?php<br />$m = new Mongo();<br /><br />$db = $m-&gt;comedy;<br /><br />$collection = $db-&gt;cartoons;<br /><br />$obj = array( "title" =&gt; "Calvin and Hobbes", "author" =&gt; "Bill Watterson" );<br />$collection-&gt;insert($obj);<br /><br />$obj = array( "title" =&gt; "XKCD", "online" =&gt; true );<br />$collection-&gt;insert($obj);<br /><br />$cursor = $collection-&gt;find();<br /><br />foreach ($cursor as $obj) {<br />    echo $obj["title"] . "&lt;br&gt;";<br />}<br /></pre><br />実行結果<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /var/www/html/mongodb.php<br />[root@localhost ~]# lynx http://localhost/mongodb.php<br /><br />   Calvin and Hobbes<br />   XKCD<br /><br /></pre><br />クライアントツールで確認する。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mongo<br />MongoDB shell version: 2.0.5<br />connecting to: test<br />&gt; show dbs<br />comedy  0.203125GB<br />local   (empty)<br />&gt; use comedy<br />switched to db comedy<br />&gt; show collections<br />cartoons<br />system.indexes<br />&gt; db.cartoons.find()<br />{ "_id" : ObjectId("4fb1f6327f8b9a2b08000000"), "title" : "Calvin and Hobbes", "author" : "Bill Watterson" }<br />{ "_id" : ObjectId("4fb1f6327f8b9a2b08000001"), "title" : "XKCD", "online" : true }<br />&gt; exit<br />bye<br /></pre><br />【参考】<br /><pre id="line1"><a href="http://www.php.net/manual/ja/book.mongo.php"><span>PHP: Mongo - Manual</span></a></pre><br />
]]>
        
    </content>
</entry>

<entry>
    <title>MySQL-MHA 設定</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/05/mysql-mha.html" />
    <id>tag:tatsunet.net,2012://2.1587</id>

    <published>2012-05-13T14:06:42Z</published>
    <updated>2012-05-14T07:22:45Z</updated>

    <summary>MHAはMaster High Availabilityの略、文字通りレプリケー...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[MHAはMaster High Availabilityの略、文字通りレプリケーション構成のMySQLのマスタサーバの高可用性を実現する技術だ。早速、検証してみる。<br /><br />
            
            構成は以下のとおり<br /><br />管理サーバ<br />OS：CentOS 6<br />MySQL Client 5.1<br />192.168.0.11/24<br /><br />マスタサーバ<br />OS：CentOS 6<br />MySQL Server 5.1<br />192.168.0.21/24<br /><br />スレーブ1サーバ<br />OS：CentOS 6<br />MySQL Server 5.1<br />192.168.0.22/24<br /><br />スレーブ2サーバ<br />OS：CentOS 6<br />MySQL Server 5.1<br />192.168.0.23/24<br /><br />マスタサーバ、スレーブ1サーバ、スレーブ2サーバの環境構築は「<a href="http://tatsunet.net/2012/04/mysql-6.html">MySQL レプリケーション設定</a>」参照<br />ただし、マスタサーバのbinlog-do-db、および、スレーブサーバのread-only、replicate-do-dbの設定をしていないことを前提とする。<br /><br /><br />RPMforgeリポジトリをインストールする。<br />※全サーバ共通作業<br />※「<a href="http://tatsunet.net/2011/12/rpmforgeepelremi-centos-632bit.html">RPMforge/EPEL/Remi リポジトリインストール手順(CentOS 6)</a>」参照<br /><br />
MySQL-MHAのマネージャをインストールする。<br />※管理サーバ作業<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# yum -y install perl-Config-Tiny perl-Time-HiRes perl-Log-Dispatch perl-Parallel-ForkManager perl-DBD-MySQL<br />[root@localhost ~]# wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.53-0.el6.noarch.rpm<br />[root@localhost ~]# rpm -Uvh mha4mysql-node-0.53-0.el6.noarch.rpm<br />[root@localhost ~]# wget http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.53-0.el6.noarch.rpm<br />[root@localhost ~]# rpm -Uvh mha4mysql-manager-0.53-0.el6.noarch.rpm<br />[root@localhost ~]# rm -f mha4mysql-* <br /></pre>
<br />
MySQL-MHAのノードをインストールする。<br />※マスタサーバ、スレーブ1サーバ、スレーブ2サーバ共通作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# yum -y install perl-Config-Tiny perl-Time-HiRes perl-Log-Dispatch perl-Parallel-ForkManager perl-DBD-MySQL<br />[root@localhost ~]# wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.53-0.el6.noarch.rpm<br />[root@localhost ~]# rpm -Uvh mha4mysql-node-0.53-0.el6.noarch.rpm<br />[root@localhost ~]# rm -f mha4mysql-node-0.53-0.el6.noarch.rpm<br /></pre>
<br />SSHのキーを作成する。<br />※パスフレーズ無しで生成する。<br />※管理サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# ssh-keygen -t rsa<br />[root@localhost ~]# cat .ssh/id_rsa.pub &gt; .ssh/authorized_keys<br />[root@localhost ~]# chmod 600 .ssh/authorized_keys<br />[root@localhost ~]# rm -f .ssh/id_rsa.pub<br /></pre>
<br />作成したキーを各ノードにコピーする。<br />※管理サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# tar czf key.tar.gz .ssh<br />[root@localhost ~]# scp key.tar.gz root@192.168.0.21:/root/<br />Are you sure you want to continue connecting (yes/no)? <span style="color:#ff0000">※</span><span style="color:#ff0000">｢yes｣を入力(初回接続時のみ)</span><br />root@192.168.0.21's password: <span style="color:#ff0000">※</span><span style="color:#ff0000">マスタサーバのrootユーザのパスワードを入力</span><br />[root@localhost ~]# scp key.tar.gz root@192.168.0.22:/root/<br />Are you sure you want to continue connecting (yes/no)? <span style="color:#ff0000">※</span><span style="color:#ff0000"></span><span style="color:#ff0000">｢yes｣を入力(初回接続時のみ)</span><br />root@192.168.0.22's password: <span style="color:#ff0000">※</span><span style="color: rgb(255, 0, 0);">スレーブ1サーバのrootユーザのパスワードを入力<br /></span>[root@localhost ~]# scp key.tar.gz root@192.168.0.23:/root/<br />Are you sure you want to continue connecting (yes/no)? <span style="color:#ff0000">※</span><span style="color:#ff0000"></span><span style="color:#ff0000">｢yes｣を入力(初回接続時のみ)</span><br />root@192.168.0.23's password: <span style="color:#ff0000">※</span><span style="color: rgb(255, 0, 0);">スレーブ2</span><span style="color:#ff0000">サーバのrootユーザのパスワードを入力</span><br />[root@localhost ~]# rm -f key.tar.gz<br /></pre>
<br />各ノードでキーを配置する。<br />※マスタサーバ、スレーブ1サーバ、スレーブ2サーバ共通作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# tar zxf key.tar.gz<br />[root@localhost ~]# rm -f key.tar.gz<br /></pre>
<br />スレーブ1サーバ、スレーブ2サーバでもバイナリログを出力するように設定を変更する。<br />※スレーブ1サーバ、スレーブ2サーバ共通作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/my.cnf<br />[mysqld]<br />log-bin = mysql-bin<br />[root@localhost ~]# /etc/rc.d/init.d/mysqld restart<br /></pre>
<br />他ホストからroot権限でデータベースに接続できるようにする。<br />※マスタサーバ作業<br />※レプリケーションされるのでスレーブ1サーバ、スレーブ2サーバで同様の作業は不要。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mysql -u root --password=password
mysql&gt; GRANT all privileges ON *.* TO 'root'@'192.168.0.0/255.255.255.0' IDENTIFIED BY 'password' WITH GRANT OPTION;<br /></pre><br />MySQL-MHAの設定ファイルを作成する。<br />※管理サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/app1.cnf<br />[server default]<br /># mysql user and password<br />user=root<br />password=password<br />ssh_user=root<br /># working directory on the manager<br />manager_workdir=/var/log/masterha/app1<br /># working directory on MySQL servers<br />remote_workdir=/var/log/masterha/app1<br /><br />[server1]<br />hostname=192.168.0.21<br /><br />[server2]<br />hostname=192.168.0.22<br /><br />[server3]<br />hostname=192.168.0.23<br /></pre><br />各ノード間でSSH接続可能なことを確認する。<br />※管理サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# masterha_check_ssh --conf=/etc/app1.cnf<br />Fri May 11 14:19:18 2012 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.<br />Fri May 11 14:19:18 2012 - [info] Reading application default configurations from /etc/app1.cnf..<br />Fri May 11 14:19:18 2012 - [info] Reading server configurations from /etc/app1.cnf..<br />Fri May 11 14:19:18 2012 - [info] Starting SSH connection tests..<br />Fri May 11 14:19:18 2012 - [debug]<br />Fri May 11 14:19:18 2012 - [debug]  Connecting via SSH from root@192.168.0.21(192.168.0.21:22) to root@192.168.0.22(192.168.0.22:22)..<br />Warning: Permanently added '192.168.0.22' (RSA) to the list of known hosts.<br />Fri May 11 14:19:18 2012 - [debug]   ok.<br />Fri May 11 14:19:18 2012 - [debug]  Connecting via SSH from root@192.168.0.21(192.168.0.21:22) to root@192.168.0.23(192.168.0.23:22)..<br />Warning: Permanently added '192.168.0.23' (RSA) to the list of known hosts. <br />Fri May 11 14:19:18 2012 - [debug]   ok.<br />Fri May 11 14:19:19 2012 - [debug]<br />Fri May 11 14:19:18 2012 - [debug]  Connecting via SSH from root@192.168.0.22(192.168.0.22:22) to root@192.168.0.21(192.168.0.21:22)..<br />Warning: Permanently added '192.168.0.21' (RSA) to the list of known hosts.<br />Fri May 11 14:19:19 2012 - [debug]   ok.<br />Fri May 11 14:19:19 2012 - [debug]  Connecting via SSH from root@192.168.0.22(192.168.0.22:22) to root@192.168.0.23(192.168.0.23:22)..<br />Warning: Permanently added '192.168.0.23' (RSA) to the list of known hosts.<span style="color:#ff0000"><br /></span>Fri May 11 14:19:19 2012 - [debug]   ok.<br />Fri May 11 14:19:19 2012 - [debug]<br />Fri May 11 14:19:19 2012 - [debug]  Connecting via SSH from root@192.168.0.23(192.168.0.23:22) to root@192.168.0.21(192.168.0.21:22)..<br />Fri May 11 14:19:19 2012 - [debug]   ok.<br />Fri May 11 14:19:19 2012 - [debug]  Connecting via SSH from root@192.168.0.23(192.168.0.23:22) to root@192.168.0.22(192.168.0.22:22)..<br />Fri May 11 14:19:19 2012 - [debug]   ok.<br />Fri May 11 14:19:19 2012 - [info] <span style="color: rgb(255, 0, 0);"></span><span style="color:#ff0000">All SSH connection tests passed successfully.</span><br /></pre><br />各ノード間でレプリケーション可能なことを確認する。<br />※管理サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# masterha_check_repl --conf=/etc/app1.cnf<br />Fri May 11 14:41:28 2012 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.<br />Fri May 11 14:41:28 2012 - [info] Reading application default configurations from /etc/app1.cnf..<br />Fri May 11 14:41:28 2012 - [info] Reading server configurations from /etc/app1.cnf..<br />Fri May 11 14:41:28 2012 - [info] MHA::MasterMonitor version 0.53.<br />Creating directory /var/log/masterha/app1.. done.<br />Fri May 11 14:41:28 2012 - [info] Dead Servers:<br />Fri May 11 14:41:28 2012 - [info] Alive Servers:<br />Fri May 11 14:41:28 2012 - [info]   192.168.0.21(192.168.0.21:3306)<br />Fri May 11 14:41:28 2012 - [info]   192.168.0.22(192.168.0.22:3306)<br />Fri May 11 14:41:28 2012 - [info]   192.168.0.23(192.168.0.23:3306)<br />Fri May 11 14:41:28 2012 - [info] Alive Slaves:<br />Fri May 11 14:41:28 2012 - [info]   192.168.0.22(192.168.0.22:3306)  Version=5.1.61-log (oldest major version between slaves) log-bin:enabled<br />Fri May 11 14:41:28 2012 - [info]     Replicating from 192.168.0.21(192.168.0.21:3306)<br />Fri May 11 14:41:28 2012 - [info]   192.168.0.23(192.168.0.23:3306)  Version=5.1.61-log (oldest major version between slaves) log-bin:enabled<br />Fri May 11 14:41:28 2012 - [info]     Replicating from 192.168.0.21(192.168.0.21:3306)<br />Fri May 11 14:41:28 2012 - [info] Current Alive Master: 192.168.0.21(192.168.0.21:3306)<br />Fri May 11 14:41:28 2012 - [info] Checking slave configurations..<br />Fri May 11 14:41:28 2012 - [info]  read_only=1 is not set on slave 192.168.0.22(192.168.0.22:3306).<br />Fri May 11 14:41:28 2012 - [warning]  relay_log_purge=0 is not set on slave 192.168.0.22(192.168.0.22:3306).<br />Fri May 11 14:41:28 2012 - [info]  read_only=1 is not set on slave 192.168.0.23(192.168.0.23:3306).<br />Fri May 11 14:41:28 2012 - [warning]  relay_log_purge=0 is not set on slave 192.168.0.23(192.168.0.23:3306).<br />Fri May 11 14:41:28 2012 - [info] Checking replication filtering settings..<br />Fri May 11 14:41:28 2012 - [info]  binlog_do_db= , binlog_ignore_db=<br />Fri May 11 14:41:28 2012 - [info]  Replication filtering check ok.<br />Fri May 11 14:41:28 2012 - [info] Starting SSH connection tests..<br />Fri May 11 14:41:30 2012 - [info] All SSH connection tests passed successfully.<br />Fri May 11 14:41:30 2012 - [info] Checking MHA Node version..<br />Fri May 11 14:41:31 2012 - [info]  Version check ok.<br />Fri May 11 14:41:31 2012 - [info] Checking SSH publickey authentication settings on the current master..<br />Fri May 11 14:41:31 2012 - [info] HealthCheck: SSH to 192.168.0.21 is reachable.<br />Fri May 11 14:41:31 2012 - [info] Master MHA Node version is 0.53.<br />Fri May 11 14:41:31 2012 - [info] Checking recovery script configurations on the current master..<br />Fri May 11 14:41:31 2012 - [info]   Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/var/lib/mysql,/var/log/mysql --output_file=/var/log/masterha/app1/save_binary_logs_test --manager_version=0.53 --start_file=mysql-bin.000002<br />Fri May 11 14:41:31 2012 - [info]   Connecting to root@192.168.0.21(192.168.0.21)..<br />  Creating /var/log/masterha/app1 if not exists.. Creating directory /var/log/masterha/app1.. done.<br />   ok.<br />  Checking output directory is accessible or not..<br />   ok.<br />  Binlog found at /var/lib/mysql, up to mysql-bin.000002<br />Fri May 11 14:41:32 2012 - [info] Master setting check done.<br />Fri May 11 14:41:32 2012 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..<br />Fri May 11 14:41:32 2012 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user=root --slave_host=192.168.0.22 --slave_ip=192.168.0.22 --slave_port=3306 --workdir=/var/log/masterha/app1 --target_version=5.1.61-log --manager_version=0.53 --relay_log_info=/var/lib/mysql/relay-log.info  --relay_dir=/var/lib/mysql/  --slave_pass=xxx<br />Fri May 11 14:41:32 2012 - [info]   Connecting to root@192.168.0.22(192.168.0.22:22)..<br />Creating directory /var/log/masterha/app1.. done.<br />  Checking slave recovery environment settings..<br />    Opening /var/lib/mysql/relay-log.info ... ok.<br />    Relay log found at /var/lib/mysql, up to mysqld-relay-bin.000008<br />    Temporary relay log file is /var/lib/mysql/mysqld-relay-bin.000008<br />    Testing mysql connection and privileges.. done.<br />    Testing mysqlbinlog output.. done.<br />    Cleaning up test file(s).. done.<br />Fri May 11 14:41:32 2012 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user=root --slave_host=192.168.0.23 --slave_ip=192.168.0.23 --slave_port=3306 --workdir=/var/log/masterha/app1 --target_version=5.1.61-log --manager_version=0.53 --relay_log_info=/var/lib/mysql/relay-log.info  --relay_dir=/var/lib/mysql/  --slave_pass=xxx<br />Fri May 11 14:41:32 2012 - [info]   Connecting to root@192.168.0.23(192.168.0.23:22)..<br />Creating directory /var/log/masterha/app1.. done.<br />  Checking slave recovery environment settings..<br />    Opening /var/lib/mysql/relay-log.info ... ok.<br />    Relay log found at /var/lib/mysql, up to mysqld-relay-bin.000008<br />    Temporary relay log file is /var/lib/mysql/mysqld-relay-bin.000008<br />    Testing mysql connection and privileges.. done.<br />    Testing mysqlbinlog output.. done.<br />    Cleaning up test file(s).. done.<br />Fri May 11 14:41:32 2012 - [info] Slaves settings check done.<br />Fri May 11 14:41:32 2012 - [info]<br />192.168.0.21 (current master)<br /> +--192.168.0.22<br /> +--192.168.0.23<br /><br />Fri May 11 14:41:32 2012 - [info] Checking replication health on 192.168.0.22..<br />Fri May 11 14:41:32 2012 - [info]  ok.<br />Fri May 11 14:41:32 2012 - [info] Checking replication health on 192.168.0.23..<br />Fri May 11 14:41:32 2012 - [info]  ok.<br />Fri May 11 14:41:32 2012 - [warning] master_ip_failover_script is not defined.<br />Fri May 11 14:41:32 2012 - [warning] shutdown_script is not defined.<br />Fri May 11 14:41:32 2012 - [info] Got exit code 0 (Not master dead).<br /><br /><span style="color:#ff0000">MySQL Replication Health is OK.</span></pre><br />マネージャを起動する。<br />※管理サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# masterha_manager --conf=/etc/app1.cnf &amp;<br />[1] 2002<br />[root@localhost ~]# Fri May 11 14:47:02 2012 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.<br />Fri May 11 14:47:02 2012 - [info] Reading application default configurations from /etc/app1.cnf..<br />Fri May 11 14:47:02 2012 - [info] Reading server configurations from /etc/app1.cnf..<br />Fri May 11 14:47:02 2012 - [info] MHA::MasterMonitor version 0.53.<br />Fri May 11 14:47:02 2012 - [info] Dead Servers:<br />Fri May 11 14:47:02 2012 - [info] Alive Servers:<br />Fri May 11 14:47:02 2012 - [info]   192.168.0.21(192.168.0.21:3306)<br />Fri May 11 14:47:02 2012 - [info]   192.168.0.22(192.168.0.22:3306)<br />Fri May 11 14:47:02 2012 - [info]   192.168.0.23(192.168.0.23:3306)<br />Fri May 11 14:47:02 2012 - [info] Alive Slaves:<br />Fri May 11 14:47:02 2012 - [info]   192.168.0.22(192.168.0.22:3306)  Version=5.1.61-log (oldest major version between slaves) log-bin:enabled<br />Fri May 11 14:47:02 2012 - [info]     Replicating from 192.168.0.21(192.168.0.21:3306)<br />Fri May 11 14:47:02 2012 - [info]   192.168.0.23(192.168.0.23:3306)  Version=5.1.61-log (oldest major version between slaves) log-bin:enabled<br />Fri May 11 14:47:02 2012 - [info]     Replicating from 192.168.0.21(192.168.0.21:3306)<br />Fri May 11 14:47:02 2012 - [info] Current Alive Master: 192.168.0.21(192.168.0.21:3306)<br />Fri May 11 14:47:02 2012 - [info] Checking slave configurations..<br />Fri May 11 14:47:02 2012 - [info]  read_only=1 is not set on slave 192.168.0.22(192.168.0.22:3306).<br />Fri May 11 14:47:02 2012 - [warning]  relay_log_purge=0 is not set on slave 192.168.0.22(192.168.0.22:3306).<br />Fri May 11 14:47:02 2012 - [info]  read_only=1 is not set on slave 192.168.0.23(192.168.0.23:3306).<br />Fri May 11 14:47:02 2012 - [warning]  relay_log_purge=0 is not set on slave 192.168.0.23(192.168.0.23:3306).<br />Fri May 11 14:47:02 2012 - [info] Checking replication filtering settings..<br />Fri May 11 14:47:02 2012 - [info]  binlog_do_db= , binlog_ignore_db=<br />Fri May 11 14:47:02 2012 - [info]  Replication filtering check ok.<br />Fri May 11 14:47:02 2012 - [info] Starting SSH connection tests..<br />Fri May 11 14:47:04 2012 - [info] All SSH connection tests passed successfully.<br />Fri May 11 14:47:04 2012 - [info] Checking MHA Node version..<br />Fri May 11 14:47:04 2012 - [info]  Version check ok.<br />Fri May 11 14:47:04 2012 - [info] Checking SSH publickey authentication settings on the current master..<br />Fri May 11 14:47:04 2012 - [info] HealthCheck: SSH to 192.168.0.21 is reachable.<br />Fri May 11 14:47:04 2012 - [info] Master MHA Node version is 0.53.<br />Fri May 11 14:47:04 2012 - [info] Checking recovery script configurations on the current master..<br />Fri May 11 14:47:04 2012 - [info]   Executing command: save_binary_logs --command=test --start_pos=4 --binlog_dir=/var/lib/mysql,/var/log/mysql --output_file=/var/log/masterha/app1/save_binary_logs_test --manager_version=0.53 --start_file=mysql-bin.000002<br />Fri May 11 14:47:04 2012 - [info]   Connecting to root@192.168.0.21(192.168.0.21)..<br />  Creating /var/log/masterha/app1 if not exists..    ok.<br />  Checking output directory is accessible or not..<br />   ok.<br />  Binlog found at /var/lib/mysql, up to mysql-bin.000002<br />Fri May 11 14:47:05 2012 - [info] Master setting check done.<br />Fri May 11 14:47:05 2012 - [info] Checking SSH publickey authentication and checking recovery script configurations on all alive slave servers..<br />Fri May 11 14:47:05 2012 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user=root --slave_host=192.168.0.22 --slave_ip=192.168.0.22 --slave_port=3306 --workdir=/var/log/masterha/app1 --target_version=5.1.61-log --manager_version=0.53 --relay_log_info=/var/lib/mysql/relay-log.info  --relay_dir=/var/lib/mysql/  --slave_pass=xxx<br />Fri May 11 14:47:05 2012 - [info]   Connecting to root@192.168.0.22(192.168.0.22:22)..<br />  Checking slave recovery environment settings..<br />    Opening /var/lib/mysql/relay-log.info ... ok.<br />    Relay log found at /var/lib/mysql, up to mysqld-relay-bin.000008<br />    Temporary relay log file is /var/lib/mysql/mysqld-relay-bin.000008<br />    Testing mysql connection and privileges.. done.<br />    Testing mysqlbinlog output.. done.<br />    Cleaning up test file(s).. done.<br />Fri May 11 14:47:05 2012 - [info]   Executing command : apply_diff_relay_logs --command=test --slave_user=root --slave_host=192.168.0.23 --slave_ip=192.168.0.23 --slave_port=3306 --workdir=/var/log/masterha/app1 --target_version=5.1.61-log --manager_version=0.53 --relay_log_info=/var/lib/mysql/relay-log.info  --relay_dir=/var/lib/mysql/  --slave_pass=xxx<br />Fri May 11 14:47:05 2012 - [info]   Connecting to root@192.168.0.23(192.168.0.23:22)..<br />  Checking slave recovery environment settings..<br />    Opening /var/lib/mysql/relay-log.info ... ok.<br />    Relay log found at /var/lib/mysql, up to mysqld-relay-bin.000008<br />    Temporary relay log file is /var/lib/mysql/mysqld-relay-bin.000008<br />    Testing mysql connection and privileges.. done.<br />    Testing mysqlbinlog output.. done.<br />    Cleaning up test file(s).. done.<br />Fri May 11 14:47:05 2012 - [info] Slaves settings check done.<br />Fri May 11 14:47:05 2012 - [info]<br />192.168.0.21 (current master)<br /> +--192.168.0.22<br /> +--192.168.0.23<br /><br />Fri May 11 14:47:05 2012 - [warning] master_ip_failover_script is not defined.<br />Fri May 11 14:47:05 2012 - [warning] shutdown_script is not defined.<br />Fri May 11 14:47:05 2012 - [info] Set master ping interval 3 seconds.<br />Fri May 11 14:47:05 2012 - [warning] secondary_check_script is not defined. It is highly recommended setting it to check master reachability from two or more routes.<br />Fri May 11 14:47:05 2012 - [info] Starting ping health check on 192.168.0.21(192.168.0.21:3306)..<br />Fri May 11 14:47:05 2012 - [info] <span style="color:#ff0000">Ping(SELECT) succeeded, waiting until MySQL doesn't respond..</span><br /><span style="color:#ff0000"></span></pre><br />マネージャの動作状況を確認する。<br />※管理サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# masterha_check_status --conf=/etc/app1.cnf<br />app1 (pid:2002) is running(0:PING_OK), master:192.168.0.21<br /></pre><br />以下、動作検証。<br /><br />スレーブ1サーバで、現在のマスタサーバを確認する。<br />※スレーブ1サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mysql -u root --password=password<br />mysql&gt; SHOW SLAVE STATUS;<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />| Slave_IO_State                   | Master_Host  | Master_User | Master_Port | Connect_Retry | Master_Log_File  | Read_Master_Log_Pos | Relay_Log_File          | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error |<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />| Waiting for master to send event | <span style="color:#ff0000">192.168.0.21</span> | repl        |        3306 |            60 | mysql-bin.000002 |                 289 | mysqld-relay-bin.000008 |           434 | mysql-bin.000002      | Yes              | Yes               |                 |                     |                    |                        |                         |                             |          0 |            |            0 |                 289 |             590 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 | No                            |             0 |               |              0 |                |<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />1 row in set (0.00 sec)<br /><br /></pre><br />スレーブ2サーバで、現在のマスタサーバを確認する。<br />※スレーブ2サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mysql -u root --password=password<br />mysql&gt; SHOW SLAVE STATUS;<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />| Slave_IO_State                   | Master_Host  | Master_User | Master_Port | Connect_Retry | Master_Log_File  | Read_Master_Log_Pos | Relay_Log_File          | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error |<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />| Waiting for master to send event | <span style="color:#ff0000">192.168.0.21</span> | repl        |        3306 |            60 | mysql-bin.000002 |                 289 | mysqld-relay-bin.000008 |           434 | mysql-bin.000002      | Yes              | Yes               |                 |                     |                    |                        |                         |                             |          0 |            |            0 |                 289 |             590 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 | No                            |             0 |               |              0 |                |<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />1 row in set (0.00 sec)<br /></pre><br />マスタサーバのMySQLサーバを停止する。<br />※マスタサーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; EXIT<br />[root@localhost ~]# /etc/rc.d/init.d/mysqld stop<br /></pre><br />マネージャのコンソールには、以下のようなメッセージが表示される。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">----- Failover Report -----<br /><br />app1: MySQL Master failover 192.168.0.21 to 192.168.0.22 succeeded<br /><br />Master 192.168.0.21 is down!<br /><br />Check MHA Manager logs at localhost.localdomain for details.<br /><br />Started automated(non-interactive) failover.<br />The latest slave 192.168.0.22(192.168.0.22:3306) has all relay logs for recovery.<br />Selected 192.168.0.22 as a new master.<br />192.168.0.22: OK: Applying all logs succeeded.<br />192.168.0.23: This host has the latest relay log events.<br />Generating relay diff files from the latest slave succeeded.<br />192.168.0.23: OK: Applying all logs succeeded. Slave started, replicating from 192.168.0.22.<br />192.168.0.22: Resetting slave info succeeded.<br />Master failover to 192.168.0.22(192.168.0.22:3306) completed successfully.<br /></pre><br />新マスタサーバ(元スレーブ1サーバ)で、現在のステータスを確認する。<br />※新マスタサーバ(元スレーブ1サーバ)作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; SHOW SLAVE STATUS;<br />Empty set (0.00 sec)<br /><br />mysql&gt; SHOW MASTER STATUS;<br />+------------------+----------+--------------+------------------+<br />| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |<br />+------------------+----------+--------------+------------------+<br />| mysql-bin.000001 |      106 |              |                  |<br />+------------------+----------+--------------+------------------+<br /></pre><br />スレーブ2サーバで、現在のマスタサーバを確認する。<br />※スレーブ2サーバ作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mysql -u root --password=password<br />mysql&gt; SHOW SLAVE STATUS;<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />| Slave_IO_State                   | Master_Host  | Master_User | Master_Port | Connect_Retry | Master_Log_File  | Read_Master_Log_Pos | Relay_Log_File          | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error |<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />| Waiting for master to send event | <span style="color:#ff0000">192.168.0.22</span> | repl        |        3306 |            60 | mysql-bin.000001 |                 106 | mysqld-relay-bin.000002 |           251 | mysql-bin.000001      | Yes              | Yes               |                 |                     |                    |                        |                         |                             |          0 |            |            0 |                 106 |             407 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 | No                            |             0 |               |              0 |                |<br />+----------------------------------+--------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+<br />1 row in set (0.00 sec)<br /></pre><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>「田原総一朗責任編集　ホリエモンの最後の言葉」読了</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/05/post-412.html" />
    <id>tag:tatsunet.net,2012://2.1592</id>

    <published>2012-05-13T10:56:51Z</published>
    <updated>2012-05-14T03:30:15Z</updated>

    <summary>ライブドア元社長の堀江さんが収監されてから、もうすぐ1年が経つ。堀江さんも収監日...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="本棚" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[ライブドア元社長の堀江さんが収監されてから、もうすぐ1年が経つ。堀江さんも収監日にTシャツで訴えていたとおり、ライブドアよりも巨額の粉飾決算をやらかした企業の経営者が執行猶予付きの判決で、堀江さんは懲役2年6ヶ月の実刑というのは、まさに21世紀の村八分としか言えない。秩序や掟って怖いなぁ。<br /><br />ここ数日騒いでるコンプガチャ問題も、さしづめ既得権益(パチンコか？)を侵害したから、やられたんだろうけど、第二、第三のホリエモンになりたくなかったのか、モバゲーもグリーも廃止決定の動きが早かった。「絵合わせ」の違法性については議論の必要性があるとしても、若い世代が新しいビジネスをやろうとしたら、既得権益にぶら下がる亡者に潰されるという構図を何とかしないと、日本の未来は暗いなぁ。日本のソーシャルゲームの技術、市場作りは世界中から注目されてるのに。だいぶ話がそれた・・・<br /><br />
<blockquote style="border-width: 1px 1px 1px 10px; border-style: solid; border-color: rgb(0, 0, 255); padding: 10px;">はじめに<br />堀江さんが、この国の年寄りたちから蛇蝎のごとく嫌われ、恐れられた理由は、年寄りたちにゴマをすらなかったこと、年寄り支配を打破して若者中心の時代をつくろうとしたこと、そして、スーツを着用せずネクタイも締めなかったことである。<br /><br />ライブドア以外の大企業の粉飾決算事件で経営者に下されのは、いずれも執行猶予付きの判決であって、堀江イジメだけが明らかに度を越している。<br />つまり検察というのは、世の中の爺たちの味方であり、爺たちだけの正義をもたらす存在なのだ。裁判所も同じだ。要するに、堀江貴文のような若い世代に取って代わられることを恐れた爺世代が、彼を徹底的に叩き潰したのである。<br /><br /><br />第1章　それでも僕はネクタイを締めない！<br />まわりと同じことをしなかったから、廊下に立たされた<br />堀江<br />普通の人というのは、たとえば大学を卒業するとき就職活動をして、スーツを着て毎日会社に通って、社内でコツコツと出世していく。あるいは公務員になってコツコツ出世して定年まで勤めて、老後は悠々自適の生活を送る。あと、家庭をつくって、子どもをつくる。そういうものから僕は、完全に逸脱しているじゃないですか。そういう生き方は気に入らない。くだらないと、僕は自分で言っていたわけです。<br /><br />日本人は静かに、等しく、貧しくなっていく<br />田原<br />ひところ4人家族の典型的なサラリーマン家庭は年収600万円と言われたけど、いまは500万円を切るところまで落ちてきた。非正規雇用が増え、ワーキング・プアという言葉も生まれた。年収200万円以下で働く人は1100万人もいる。<br /><br />第2章　僕はインターネットに出会って変わった<br />僕はビル・ゲイツや孫正義とここが違う<br />堀江<br />マックはネットワークを前提にしたパソコンでしたから、そのネットワーク、ひいてはインターネットをベースにした世の中ができる。世の中にあるすべてのインフラっていうものが、必ずインターネットでつながるようになるはずだと。<br /><br />孫さんも三木谷さんも失敗して、儲けたのは僕だけだった<br />堀江<br />TBSの株価、半分以下になったでしょう。あれなんか、僕ははっきり言って本当は三木谷さん、もっと怒っていいと思う。怒っていいと思うし、楽天の株主は国賠訴訟(国家賠償を求める裁判)をやってもいいくらいだと思いますよ。ほんとひどいですよ、あれば、何がひどいって、楽天はTBS株式を堂々とかったにもかかわらず、株式の3分の1以上は単独企業が持ってはいけないというふうに、途中で放送法を改正した。マスコミが報道しないから誰も知らないんだけど、要は三木谷さんが買っている最中に放送法を改正されて、買収できなくしちゃったんです。<br />田原<br />実はテレビ朝日を孫さんたちが買収するというとき、テレビ朝日の職員の多くは万歳って思った。朝日新聞支配をよく思わないテレビマンたちがいたからね。<br /><br />第3章　なぜ、僕はフジテレビを買収しようとしたのか<br />日枝氏のフジテレビ支配の総仕上げを僕が邪魔をした<br />田原<br />僕はテレビ局の社長・会長たちのうちで「経営者」と言えるのはフジの日枝さんだけだなと思っている。あとは全部、新聞社からの天下り。<br /><br />第4章　本当は僕が最初にスマートフォンを作っていた<br />マイクロソフトもアップルも、才能をつぶされなかったからできた<br />堀江<br />アメリカという国は、ビル・ゲイツやジョブズといった人たちをつぶさない。のびのびと好きなことができる。たぶんどこの国にもそういう人は絶対いると思う。ジョブズって変わっているじゃないですか。でも、ああいう個性が子供のころから褒められるという文化はある。日本の場合、僕みたいなバッシングに耐えられるような人は、最後は検察にやられる。そうじゃない人は、だいたいニートで引きこもりになって、心の弱い人は自殺しちゃったりもする。<br /><br />総花的にやるからソニーはサムスンに負けるのだ<br /><br />アップルの戦略は、時代に合ってようやく花開いた<br />田原<br />アンドロイド陣営は、どうしてもばらけるわけね。<br />堀江<br />そうそう。iPhoneは1機種しかないから、大量発注でき単価を安くできる。それと、アンドロイドは、デベロッパーのことをまったく考えていないんです。<br />田原<br />どういうこと？<br />堀江<br />アンドロイドのプラットホームでソフトを作ろうとすると、全世界で何十機種どころじゃない機種が出てて、しかも全部バージョンが違う。あるアプリを作ったら全部テストしなきゃいけないんです。そうしないとクレームが殺到してしまう。アプリの検証を専門にやっている会社すらある。でもiPhoneだったら、バージョンがいくつかしかないから、テストが簡単なんです。<br /><br />第5章　あるひ突然、東京地検特捜部がやってきた！<br />4億円程度のカネを横領するわけがない<br /><br />田原<br />・・・。僕は、どうも宮内さんたちが、自分たちがやったことを全部、堀江さんになすりつけたんじゃないかと思っているんだ。<br />堀江<br />ああ、それはそうですよ。「おまえが社長なんだから、責任取れよ」という。彼らはそういうスタンスだと思うし、宮内さんたちは横領もしていましたから。<br /><br />検察の人間は「カネ儲けは悪だ」と思っているのだ<br />田原<br />カネは儲ける。言いたいことは言う。世の中に遠慮しない。スーツを着ない。ネクタイもしない。だから堀江は悪いやつだ、というふうに検察は思ったんですね？<br />堀江<br />思っていますね。<br /><br />第6章　ロケット開発、映画監督・・・、2年後にやりたいことがいっぱいある<br />70億の人たちを「うおっ、すげえ」と思わせたい！<br />堀江<br />やっぱり世界を相手にしたい。たった1億2000万人じゃなくて、70億の人たちが「うおっ、すげえ」と思うようなことをやりたいですよね。「なんて便利なんだ」「なんてすごいんだ」「科学の力ってすごいな」みたいに、みんなが思うようなことをやりたいですね。絶対にそのほうが楽しいなと。<br /><br />第7章　僕はノマドになりたい<br />2年半後は「ノマド」になる<br />堀江<br />・・・。だんだん、いろんな物をいらないんじゃないかと思い始めた、というのがあります。だから、ますます自由に生きたいというふうになったんですけど、そこで「家って何なんだ」と思った。僕らは畑を耕しているわけでもないのに、何で定住してるんだろうなというのが、最近の一番の疑問ですね。定住する必要なんてないんじゃないかと。<br /><br />世界は広いんだよ。日本は閉塞感があるけど、世界は全然そうじゃないんだよ<br />田原<br />これが最後の質問です。刑務所に入る前に最後に、読者あるいは日本人に言い残しておきたいことを教えてください。<br />堀江<br />世界という広い視野で日本を考えてほしい、ということです。狭い日本村で考えているとよくない。視野が狭くなると、よくないですね。たとえば小学校とか中学校とかでいじめを受けた人って、これが自分のすべての世界だと思って、自殺しちゃったりするじゃないですか。そうじゃなくて、世界は広いんだよ、と。日本ってすごい閉塞感があるけど、世界は全然そうではないんだよというようなことを、みんなに考えてほしいなと思っています。<br />
 
</blockquote>

<br />
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tatsunet-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4776206803&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>
]]>
        
    </content>
</entry>

<entry>
    <title>MySQL レプリケーション設定(その2)</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/05/mysqldump--u-root---passwordpassword--h-192168022---databases-testdb---master-data---single-transact.html" />
    <id>tag:tatsunet.net,2012://2.1589</id>

    <published>2012-05-10T22:57:10Z</published>
    <updated>2012-05-11T03:30:40Z</updated>

    <summary>先日、MySQL レプリケーションの設定方法を書いたが、InnoDBの場合は無停...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[先日、<a href="http://tatsunet.net/2012/04/mysql-6.html">MySQL レプリケーションの設定</a>方法を書いたが、InnoDBの場合は無停止で(マスタでロックを取得すること無しに)、スレーブサーバにデータベースを複製できるようなので、その方法も書いておく。<br /><br />この方法ならマスタサーバで「FLUSH TABLES WITH READ LOCK」を実行して、ロックを取得する必要が無い。<a href="http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html">マニュアル</a>によるとデータをダンプする前に、BEGIN SQLステートメントを発行しているとか･･･<br /><br />構成とデータベースの複製以前の操作は「<a href="http://tatsunet.net/2012/04/mysql-6.html">MySQL レプリケーション設定</a>」参照<br /><br />スレーブサーバにデータベースを複製する。<br />※ここでは検証のため、リモートからrootで接続できるようにしています。<br />※スレーブ1サーバ、スレーブ2サーバ共通作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mysqldump -u root --password=password -h 192.168.0.21 --databases testdb --master-data --single-transaction &gt; dump.sql<br />[root@localhost ~]# mysql -u root --password=password &lt; dump.sql<br />[root@localhost ~]# mysql -u root --password=password<br />mysql&gt; CHANGE MASTER TO MASTER_HOST='192.168.0.21', MASTER_USER='repl', MASTER_PASSWORD='password';<br />mysql&gt; START SLAVE;<br /></pre><br />※MASTER_LOG_FILEとMASTER_LOG_POSの値はdump.sqlの中の次の一行で設定される。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;<br /></pre><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>今更ながらPS3購入</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/ps3.html" />
    <id>tag:tatsunet.net,2012://2.1593</id>

    <published>2012-04-30T12:59:16Z</published>
    <updated>2012-05-15T06:09:47Z</updated>

    <summary>2月に16年ぶりにテレビを購入(前回は18歳の頃、上京時に購入)したので、GWに...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="ゲーム" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[2月に16年ぶりにテレビを購入(前回は18歳の頃、上京時に購入)したので、GWに自宅でテレビゲームでもプレイしようと思い、今更ながらPS3を購入。HDMIケーブルと合わせて29,018円也。<br /><br />同時購入ソフトは「グランツーリスモ5 Spec II」をチョイス。VF5を買おうと思ったんだけど、夏にVF5FSが出るみたいなので、VF5はしばらくお預け。<br /><br />ハンコン無しでも楽しめるかなと思ったけど、NASCARのシビアな操作とかはパッドでは厳しい。<br />先日、HORIからリーズナブルなハンコンが発売されたみたいなので、購入を検討中。早く誰かAmazonとかにレビュー買いてくれないかなぁ。<br /><br />
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tatsunet-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=B006JHDV0O&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tatsunet-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=B005GYRIE6&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>
]]>
        
    </content>
</entry>

<entry>
    <title>「心も生活も整理されて輝く!貯金・節約のすすめ」読了</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/post-411.html" />
    <id>tag:tatsunet.net,2012://2.1588</id>

    <published>2012-04-28T05:53:19Z</published>
    <updated>2012-04-29T02:43:54Z</updated>

    <summary>年齢的にも、もっと意識して貯金しないといけないなぁ・・・ 相談者の傾向・浪費を繰...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="本棚" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[年齢的にも、もっと意識して貯金しないといけないなぁ・・・<br /><br />
<blockquote style="border-width: 1px 1px 1px 10px; border-style: solid; border-color: rgb(0, 0, 255); padding: 10px;">相談者の傾向<br />・浪費を繰り返して赤字になるタイプ<br />・浪費こそしないものの、常に漠然としたお金の不安に支配されているタイプ<br /><br />お金のステージ<br />①お金を管理する<br />②お金を学ぶ<br />③お金を活かす<br /><br />お金上手の定義<br />①常に物事のマイナス面ではなく、プラス面を見る<br />②たとえ1円でも、無意識には使わない<br />③毎月、少しでも貯金総額をプラスにすることを意識している<br />④自分の中で、「お金を使うところ」「お金を使わないところ」がはっきり区別されていて、ブレがない<br /><br />財布を開ける回数が多くて、その回数も把握していないのは、無意識にお金を使っている証拠です。<br /><br />コツコツ貯める堅実さと、周囲に流されない自分軸の確立が、お金上手の大前提<br /><br />お金上手になる8つのステップ<br />①自分の「お金ヒストリー」を振り返る<br />②無理なくできる節約方法を考える<br />③固定支出を疑う<br />④具体的な目標を持つ<br />⑤いま、お金を貯められる環境なのかを判断する<br />⑥期間設定と数字で自分を知る<br />⑦90日間での成果を振り返る<br />⑧とにかく繰り返す<br /><br />(収入 － 支出) × 心 × 時間 ＝ 貯金力<br />「無欲であること」は、別に素晴らしくも美しくもない<br />お金を使うことを楽しみにする心がないと、貯金力はゼロになり、不安まみれの人生になってしまう<br /><br />自分を見つめ直し、「目標」を決め、そこにだけお金を使うスタイルを確立しよう<br /><br />長期的に続く無理のない方法で、節約しながらお金を使う「スマートな節約家」になろう<br /><br />「衣」を削るポイント<br />「着用料」が1回100円以下になるような服選びをする<br /><br />「食」を削るポイント<br />食材の購入に際して「買うところ」「買い方」「削っていいところ」「削れないところ」を見極める<br /><br />「住」を削るポイント<br />面倒な手続きや交渉をいとわなければ、住居費を大幅に削るのも夢ではない<br /><br />便利さを放棄し、他人の手を借りれば、挫折しにくくなる<br /><br />MMF、インデックスファンド、金投資のコツは、少額ずつ売買すること<br />
 
</blockquote>
<br />
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tatsunet-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=482720683X&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe>
]]>
        
    </content>
</entry>

<entry>
    <title>MySQL レプリケーション設定</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/mysql-6.html" />
    <id>tag:tatsunet.net,2012://2.1586</id>

    <published>2012-04-25T23:12:39Z</published>
    <updated>2012-05-10T01:28:09Z</updated>

    <summary>             構成は以下のとおりマスタサーバOS：CentOS 6M...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mysql" label="MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[
            構成は以下のとおり<br /><br />マスタサーバ<br />OS：CentOS 6<br />MySQL Server 5.1<br />192.168.0.21/24<br /><br />スレーブ1サーバ<br />
OS：CentOS 6<br />MySQL Server 5.1<br />
192.168.0.22/24<br /><br />スレーブ2サーバ<br />
OS：CentOS 6<br />MySQL Server 5.1<br />
192.168.0.23/24<br /><br />MySQL Server のインストールは「<a href="http://tatsunet.net/2012/01/mysql-centos-6.html">MySQL インストール手順(CentOS 6)</a>」参照<br /><br />先に検証用のデータベースを作成する。<br />※マスタサーバでの作業<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi create.sql<br />CREATE DATABASE testdb CHARSET utf8;<br />CREATE TABLE testdb.category (id TINYINT NOT NULL AUTO_INCREMENT, name varchar(30) default NULL, PRIMARY KEY (id)) ENGINE=InnoDB CHARSET=utf8;<br />INSERT INTO testdb.category (name) VALUES ('文学・評論');<br />INSERT INTO testdb.category (name) VALUES ('人文・思想');<br />INSERT INTO testdb.category (name) VALUES ('社会・政治･法律');<br />[root@localhost ~]# mysql -u root --password=password &lt; create.sql
</pre>
<br />
マスタサーバの設定<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/my.cnf<br />[mysqld]<br />log-bin = mysql-bin<br />server-id = 1001<br />binlog-do-db = testdb # バイナリログを取得するデータベースを限定(任意設定項目)<br />[root@localhost ~]# /etc/rc.d/init.d/mysqld restart
</pre><br />スレーブ1サーバの設定<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/my.cnf<br />[mysqld]<br />server-id = 1002<br />read-only    # SUPER権限を持つユーザ以外のユーザによる更新を禁止(任意設定項目)<br />replicate-do-db = testdb # レプリケーションするデータベースを限定(任意設定項目)<br />[root@localhost ~]# /etc/rc.d/init.d/mysqld restart
</pre>
<br />スレーブ2サーバの設定<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/my.cnf<br />[mysqld]<br />server-id = 1003<br />read-only    # SUPER権限を持つユーザ以外のユーザによる更新を禁止(任意設定項目)<br />replicate-do-db = testdb # レプリケーションするデータベースを限定(任意設定項目)<br />[root@localhost ~]# /etc/rc.d/init.d/mysqld restart
</pre>
<br />スレーブサーバから接続するためのユーザをマスターサーバに作成する。<br />※マスタサーバでの作業<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mysql -u root --password=password
mysql&gt; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.0/255.255.255.0' IDENTIFIED BY 'password';
</pre>
<br />全てのデータをフラッシュし、書き込みステートメントをブロックする。<br />マスタのバイナリログのステータス情報を取得する。<br />※マスタサーバでの作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; FLUSH TABLES WITH READ LOCK;<br />mysql&gt; SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| <span style="color:#ff0000">mysql-bin.000001</span> |      <span style="color:#ff0000">106</span> |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
</pre>
<br />スレーブサーバにデータベースを複製する。<br />※ここでは検証のため、リモートからrootで接続できるようにしています。<br />※スレーブ1サーバ、スレーブ2サーバ共通作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mysqldump -u root --password=password -h 192.168.0.21 --databases testdb &gt; dump.sql
[root@localhost ~]# mysql -u root --password=password &lt; dump.sql
</pre>
<br />マスターサーバのロックを解除する。<br />※マスタサーバでの作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; UNLOCK TABLES;
</pre>
<br />スレーブサーバでレプリケーションの設定を行う。<br />※スレーブ1サーバ、スレーブ2サーバ共通作業<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# mysql -u root --password=password
mysql&gt; CHANGE MASTER TO MASTER_HOST='192.168.0.21', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='<span style="color:#ff0000">mysql-bin.000001</span>', MASTER_LOG_POS=<span style="color:#ff0000">106</span>;
</pre>
<br />スレーブスレッドを開始する。<br />※スレーブ1サーバ、スレーブ2サーバ共通作業<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; START SLAVE;
</pre>
<br />以下、動作検証。<br /><br />マスタサーバでレコードを追加する。<br />※マスタサーバでの作業<br /><span style="color:#ff0000">※binlog-do-db、replicate-do-dbの設定を行った場合は、デフォルトデータベース(USEステートメントで指定したDB)だけが、レプリケーションの対象になることに注意！下記の場合、「USE testdb」を実行しないと、以降の更新がスレーブサーバに反映されない。</span><br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; USE testdb<br />mysql&gt; INSERT INTO testdb.category (name) VALUES ('ノンフィクション');
</pre>
<br />スレーブサーバにレプリケーションされていることを確認する。<br />※スレーブ1サーバ、スレーブ2サーバ共通作業<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; SELECT * FROM testdb.category;<br />+----+--------------------------+<br />| id | name                     |<br />+----+--------------------------+<br />|  1 | 文学・評論               |<br />|  2 | 人文・思想               |<br />|  3 | 社会・政治･法律          |<br />|  4 | ノンフィクション         |<br />+----+--------------------------+<br />4 rows in set (0.00 sec)
</pre>
<br />スレーブサーバを停止する。<br />※スレーブ1サーバ、スレーブ2サーバ共通作業<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; EXIT<br />[root@localhost ~]# /etc/rc.d/init.d/mysqld stop<br /></pre><br />マスタサーバでレコードを追加する。<br />※マスタサーバでの作業<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">mysql&gt; INSERT INTO testdb.category (name) VALUES ('歴史・地理');
</pre>
<br />
スレーブサーバを起動する。<br />スレーブサーバが停止している間に、マスタサーバで更新されたデータもレプリケーションされていることを確認する。<br />※スレーブ1サーバ、スレーブ2サーバ共通作業<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# /etc/rc.d/init.d/mysqld start<br />[root@localhost ~]# mysql -u root --password=password<br />mysql&gt; SELECT * FROM testdb.category;<br />+----+--------------------------------+<br />| id | name                           |<br />+----+--------------------------------+<br />|  1 | 文学・評論                     |<br />|  2 | 人文・思想                     |<br />|  3 | 社会・政治･法律                |<br />|  4 | ノンフィクション               |<br />|  5 | 歴史・地理                     |<br />+----+--------------------------------+<br />5 rows in set (0.00 sec)<br /><br /></pre>
<br /><br />
]]>
        
    </content>
</entry>

<entry>
    <title>Apache+Tomcat ロードバランス設定</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/apachetomcat.html" />
    <id>tag:tatsunet.net,2012://2.1585</id>

    <published>2012-04-24T00:08:17Z</published>
    <updated>2012-04-24T10:11:51Z</updated>

    <summary>構成は以下のとおりWebサーバOS：CentOS 6Apache 2.2.15 ...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="java" label="Java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tomcat" label="Tomcat" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[構成は以下のとおり<br /><br />Webサーバ<br />OS：CentOS 6<br />Apache 2.2.15 (RPMパッケージ)<br />192.168.0.11/24<br /><br />アプリケーションサーバ1(以下APサーバ1)<br />OS：CentOS 6<br />Apache Tomcat 7.0.27 (バイナリ)<br />192.168.0.21/24<br /><br />アプリケーションサーバ2(以下APサーバ2)<br />
OS：CentOS 6<br />Apache Tomcat 7.0.27 (バイナリ)<br />
192.168.0.22/24<br /><br />Apacheのインストールは「<a href="http://tatsunet.net/2012/01/apache-mod-ssl-censos-6.html">Apache インストール手順(CensOS 6)</a>」参照<br />Tomcat7(バイナリ)のインストールは「<a aiotitle="Tomcat7(バイナリ) インストール手順" href="http://tatsunet.net/2012/04/tomcat-8.html">Tomcat7(バイナリ) インストール手順</a>」参照<br /><br />
Webサーバでロードバランスの設定を行う。<br />※ここでは各APサーバに均等に配分する。<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/httpd/conf.d/proxy.conf<br />ProxyPass / balancer://tomcat/<br />&lt;Proxy balancer://tomcat/&gt;<br />  BalancerMember ajp://192.168.0.21:8009 loadfactor=100<br />  BalancerMember ajp://192.168.0.22:8009 loadfactor=100<br />&lt;/Proxy&gt;<br />[root@localhost ~]# /etc/rc.d/init.d/httpd restart<br /></pre>
<br />各APサーバでレプリケーションの設定を行う。<br />※server.xmlのReceiverタグのaddress属性の値は、各APサーバのIPアドレスを設定する。<br />※ここではデフォルトでデプロイされているexamplesに対して設定を行う。<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /usr/local/tomcat/conf/server.xml<br />    &lt;Engine&gt;<br />         ・<br />         ・<br />         ・<br />      &lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6"&gt;<br />        &lt;Manager className="org.apache.catalina.ha.session.DeltaManager"<br />                 expireSessionsOnShutdown="false" notifyListenersOnReplication="true" /&gt;<br />        &lt;Channel className="org.apache.catalina.tribes.group.GroupChannel"&gt;<br />          &lt;Membership className="org.apache.catalina.tribes.membership.McastService"<br />                      address="228.0.0.4" port="45564" frequency="500" dropTime="3000" /&gt;<br />          &lt;Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"<br />                    address="<span style="color:#ff0000">192.168.0.21</span>" port="5000" selectorTimeout="100" maxThreads="6" /&gt; ←※cent2では192.168.0.12に設定<br />          &lt;Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"&gt;<br />            &lt;Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" /&gt;<br />          &lt;/Sender&gt;<br />          &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" /&gt;<br />          &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor" /&gt;<br />          &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor" /&gt;<br />        &lt;/Channel&gt;<br />        &lt;Valve className="org.apache.catalina.ha.tcp.ReplicationValve"<br />               filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" /&gt;<br />        &lt;ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" /&gt;<br />      &lt;/Cluster&gt;<br />         ・<br />         ・<br />         ・<br />    &lt;/Engine&gt;<br />[root@localhost ~]# vi /usr/local/tomcat/webapps/examples/WEB-INF/web.xml<br />&lt;web-app&gt;<br />         ・<br />         ・<br />         ・<br />  &lt;distributable /&gt;<br />&lt;/web-app&gt;<br />[root@localhost ~]# /etc/rc.d/init.d/tomcat restart<br /></pre>
<br />examplesに含まれる「Sessions Example」を利用して、動作検証を行う。<br /><br />APサーバ1のTomcatを停止する。<br /><br />ブラウザで以下のURLを開く。<br />http://192.168.0.11/examples/servlets/servlet/SessionExample<br /><br />画面に表示されている「Session ID」を確認後、適当な「Name」と「Value」を入力して、「送信」ボタンをクリックする。<br />※Webサーバを介して、APサーバ2に接続されている。<br /><br />APサーバ1のTomcatを起動後、APサーバ2のTomcatを停止する。<br /><br />
再度、「Name」と「Value」に適当な値を入力して、「送信」ボタンをクリックする。<br />画面に表示されている「Session ID」が、上記で確認した「Session ID」と変わりないことを確認する。また、上記で入力した「Name」と「Value」が表示されていることを確認する。<br />※Webサーバを介して、APサーバ1に接続されている。<br /><br />APサーバ2のTomcatを起動後、APサーバ1のTomcatを停止する。<br />
<br />

再度、「Name」と「Value」に適当な値を入力して、「送信」ボタンをクリックする。<br />
画面に表示されている「Session ID」が、上記で確認した「Session ID」と変わりないことを確認する。また、上記で入力した「Name」と「Value」が表示されていることを確認する。<br />※Webサーバを介して、APサーバ2に接続されている。<br />
<br />]]>
        
    </content>
</entry>

<entry>
    <title>Tomcat7(バイナリ) インストール手順</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/tomcat-8.html" />
    <id>tag:tatsunet.net,2012://2.1584</id>

    <published>2012-04-23T21:55:54Z</published>
    <updated>2012-04-24T08:45:11Z</updated>

    <summary>JDKをダウンロードして、インストールする。http://www.oracle....</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="java" label="Java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tomcat" label="Tomcat" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[JDKをダウンロードして、インストールする。<br /><a href="http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html">http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html</a><br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# rpm -Uvh jdk-7u3-linux-x64.rpm<br />[root@localhost ~]# java -version<br />java version "1.7.0_03"<br />Java(TM) SE Runtime Environment (build 1.7.0_03-b04)<br />Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)<br />[root@localhost ~]# rm -f jdk-7u3-linux-x64.rpm <br /></pre>
<br />バイナリのTomcatをダウンロードする。<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# wget http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27.tar.gz<br />[root@localhost ~]# tar zxf apache-tomcat-7.0.27.tar.gz<br />[root@localhost ~]# mv apache-tomcat-7.0.27 /usr/local/<br />[root@localhost ~]# ln -s /usr/local/apache-tomcat-7.0.27/ /usr/local/tomcat<br />[root@localhost ~]# rm -f apache-tomcat-7.0.27.tar.gz
</pre>
<br />環境変数の設定を行うスクリプトを作成する。<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/profile.d/tomcat.sh<br />export JAVA_HOME=/usr/java/default<br />export PATH=$PATH:$JAVA_HOME/bin<br />export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar<br />export TOMCAT_HOME=/usr/local/tomcat<br />export CATALINA_HOME=/usr/local/tomcat<br />export CLASSPATH=$CLASSPATH:$CATALINA_HOME/common/lib
</pre>

<br />起動/停止スクリプトを作成する。<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /etc/rc.d/init.d/tomcat<br />#!/bin/bash<br />#<br /># Startup script for the tomcat<br />#<br /># chkconfig: 345 80 15<br /># description: Tomcat is a Servlet+JSP Engine.<br /><br /># Source function library.<br />. /etc/rc.d/init.d/functions<br />source /etc/profile.d/tomcat.sh<br /><br />start(){<br />    if [ -z $(/sbin/pidof java) ]; then<br />        echo "Starting tomcat"<br />        /usr/local/tomcat/bin/startup.sh<br />        touch /var/lock/subsys/tomcat<br />    else<br />        echo "tomcat allready running"<br />    fi<br />}<br /><br />stop(){<br />    if [ ! -z $(/sbin/pidof java) ]; then<br />        echo "Shutting down tomcat"<br />        /usr/local/tomcat/bin/shutdown.sh<br />        until [ -z $(/sbin/pidof java) ]; do :; done<br />        rm -f /var/lock/subsys/tomcat<br />    else<br />        echo "tomcat not running"<br />    fi<br />}<br /><br />case "$1" in<br />    start)<br />        start<br />        ;;<br />    stop)<br />        stop<br />        ;;<br />    restart)<br />        stop<br />        start<br />        ;;<br />    status)<br />        /usr/local/tomcat/bin/catalina.sh version<br />        ;;<br />    *)<br />        echo "Usage: $0 {start|stop|restart|status}"<br />esac<br /><br />exit 0<br />[root@localhost ~]# chmod +x /etc/rc.d/init.d/tomcat
</pre><br />Tomcatを起動し、自動起動を有効にする。<br /><pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# /etc/rc.d/init.d/tomcat start<br />[root@localhost ~]# chkconfig --add tomcat<br />[root@localhost ~]# chkconfig tomcat on<br /></pre>
<br />
]]>
        
    </content>
</entry>

<entry>
    <title>CodeIgniter キャプチャヘルパー使用時の注意点</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/codeigniter-1.html" />
    <id>tag:tatsunet.net,2012://2.1583</id>

    <published>2012-04-16T22:43:08Z</published>
    <updated>2012-04-17T04:01:47Z</updated>

    <summary>以前はプラグインだったが、現在はヘルパーになっている。マニュアルにも書いてあるが...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="codeigniter" label="CodeIgniter" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[以前はプラグインだったが、現在はヘルパーになっている。<br /><br /><a href="http://codeigniter.com/user_guide/helpers/captcha_helper.html">マニュアル</a>にも書いてあるが、GDライブラリを必要とするので、事前にインストールしておく必要がある。<br /><br />

<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# yum -y install php-gd<br />[root@localhost ~]# /etc/rc.d/init.d/httpd restart <br /></pre>
]]>
        
    </content>
</entry>

<entry>
    <title>「ソーシャルメディアマーケター美咲」読了</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/post-410.html" />
    <id>tag:tatsunet.net,2012://2.1582</id>

    <published>2012-04-16T12:23:51Z</published>
    <updated>2012-04-16T13:23:45Z</updated>

    <summary>ソーシャルメディアを活用したウェブマーケティングのお話。転職直後ソーシャルメディ...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="本棚" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[ソーシャルメディアを活用したウェブマーケティングのお話。転職直後ソーシャルメディアマーケティングチームに配属された美咲と、少しおとなしい性格の拓也という登場人文の奮闘記を通して、ソーシャルメディアマーケティングを解説していく形になっている。<br /><br />マーケティング用語の解説が多いので、自分のように技術側の人間が読んでもスラスラと読むことが出来る。物語として読んでいるだけでも、結構面白い。続編が出ているようなので、近いうちにそっちも読んでみよう。美咲と拓也の、その後も気になる。<br /><br />本格的にマーケティングの勉強したいな・・・<br /><br />
<blockquote style="border-width: 1px 1px 1px 10px; border-style: solid; border-color: rgb(0, 0, 255); padding: 10px;">認知の向上に一番向いているのはマスメディアを使った広告やPR。顕在顧客の効率的な刈り取りにはリスティングやアフィリエイト。ソーシャルメディアは潜在顧客の育成や、既存顧客のロイヤリティ向上に向いている。<br /><br />ソーシャルメディアで話題になるもの<br />①政治・社会・芸能・スポーツなどのニュース<br />②おもしろ系動画<br />③診断系コンテンツ<br />④その時々のイベントや本、映画など<br />⑤身内ネタ<br />話題の影響範囲として、大きい順に、世の中ゴト、仲間ゴト、自分ゴト、の3つがある。<br /><br />ソーシャルメディアは仲間ゴトが形成される場所。マスメディアはソーシャルグラフを超えて情報を伝え、世の中ゴトを形成するメディア。どっちがいいという議論ではなく、両方役割が違うし、必要。<br /><br />やらないことのメリット。<br /><br />企業のSMM効果測定における5つの問題<br />・目的が曖昧だから成果が測れない<br />・効果測定における手段の目的化が起きている<br />・KPIばかりでKGIを測定していない<br />・測定指標と評価方法が間違っている<br />・マーケティングゴールとコミュニケーションゴールが混同されている<br /><br />ソーシャルメディアマーケティングは魔法の杖ではない<br />
 
</blockquote>
<br />
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tatsunet-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4798123498&amp;ref=tf_til&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"></iframe>
]]>
        
    </content>
</entry>

<entry>
    <title>CodeIgniter Formヘルパー使用時の注意点</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/codeigniter-form.html" />
    <id>tag:tatsunet.net,2012://2.1580</id>

    <published>2012-04-16T11:25:36Z</published>
    <updated>2012-04-19T06:36:45Z</updated>

    <summary>Formヘルパーのset_value()関数を使って画面に値を出力していたところ...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="codeigniter" label="CodeIgniter" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[Formヘルパーのset_value()関数を使って画面に値を出力していたところ、<br />ダブルクォーテーション等がエンコードされないという症状に・・・<br /><br /><a href="http://d.hatena.ne.jp/Kenji_s/20100316/1268701194">こちら</a>に書いてあるとおり<br />set_value() で同じフィールドを 2回目以上表示すると 2回目以降は文字参照に変換されず XSS脆弱性になる可能性がある<br />とのこと。<br /><br />対策としてはform_helper.phpのform_prep()関数を修正すると良いらしい。<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /var/www/html/CodeIgniter/system/helpers/form_helper.php<br />        <span style="color:#ff0000">//if (isset($prepped_fields[$field_name]))<br />        if (isset($prepped_fields[$field_name]) &amp;&amp; $prepped_fields[$field_name] === $str)</span><br />        {<br />            return $str;<br />        }<br /><br />        $str = htmlspecialchars($str);<br /><br />        // In case htmlspecialchars misses these.<br />        $str = str_replace(array("'", '"'), array("&amp;#39;", "&amp;quot;"), $str);<br /><br />        if ($field_name != '')<br />        {<br />            <span style="color:#ff0000">//$prepped_fields[$field_name] = $field_name;<br />            $prepped_fields[$field_name] = $str;</span><br />        }<br /><br />        return $str;
</pre>
<br /><br /><a href="http://codeigniter.com/user_guide/helpers/form_helper.html">ユーザガイド</a>のform_prep()関数の説明に、自動的に変換されると書いてあるだけに怖いなぁ。<br /> ]]>
        
    </content>
</entry>

<entry>
    <title>CodeIgniter+Smarty バリデーション</title>
    <link rel="alternate" type="text/html" href="http://tatsunet.net/2012/04/codeignitersmarty-5.html" />
    <id>tag:tatsunet.net,2012://2.1579</id>

    <published>2012-04-11T22:23:11Z</published>
    <updated>2012-04-13T07:16:40Z</updated>

    <summary>環境CodeIgniter 2.1.0Smarty 3.1.8CodeIgnit...</summary>
    <author>
        <name>tatsu</name>
        
    </author>
    
        <category term="システム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="codeigniter" label="CodeIgniter" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="smarty" label="Smarty" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://tatsunet.net/">
        <![CDATA[環境<br />CodeIgniter 2.1.0<br />Smarty 3.1.8<br />CodeIgniterとSmartyの連携には<a href="http://www.coolphptools.com/codeigniter-smarty">こちら</a>を使用<br />&nbsp;<br />
<pre style="color: rgb(255, 255, 255); background-color: rgb(0, 0, 128); width: 600px; overflow-x: auto;">[root@localhost ~]# vi /var/www/html/CodeIgniter/application/controllers/sample.php<br />&lt;?php<br />class Sample extends CI_Controller {<br />    function __construct() {<br />        parent::__construct();<br /><br />        $this-&gt;load-&gt;helper(array('form', 'url'));<br />        $this-&gt;load-&gt;library('session');<br /><br />        $this-&gt;output-&gt;set_header('Content-Type: text/html; charset=UTF-8');<br /><br />        $this-&gt;load-&gt;library('form_validation');<br />        $this-&gt;form_validation-&gt;set_error_delimiters('&lt;div class="error"&gt;', '&lt;/div&gt;');<br />        $this-&gt;form_validation-&gt;set_rules('name', '名前', 'trim|required|max_length[20]');<br />        $this-&gt;form_validation-&gt;set_rules('email', 'メールアドレス', 'trim|required|valid_email');<br />        $this-&gt;form_validation-&gt;set_rules('comment', 'コメント', 'required|max_length[200]');<br />    }<br /><br />    function index() {<br />        $this-&gt;ticket = md5(uniqid(mt_rand(), TRUE));<br />        $this-&gt;session-&gt;set_userdata('ticket', $this-&gt;ticket);<br />        $this-&gt;smarty-&gt;view('sample.tpl');<br />   }<br /><br />    function confirm() {<br />        $this-&gt;ticket = $this-&gt;session-&gt;userdata('ticket');<br />        if(!$this-&gt;input-&gt;post('ticket') || $this-&gt;input-&gt;post('ticket') !== $this-&gt;ticket) {<br />            echo 'Ticket check NG!';<br />            exit;<br />        }<br /><br />        if($this-&gt;form_validation-&gt;run() == TRUE) {<br />            echo 'OK!';<br />        } else {<br />            $this-&gt;smarty-&gt;view('sample.tpl');<br />        }<br />    }<br />}<br /><br />[root@localhost ~]# vi /var/www/html/CodeIgniter/application/views/templates/sample.tpl<br />&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;<br />&lt;html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"&gt;<br />  &lt;head&gt;<br />    &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br />    &lt;link rel="stylesheet" href="{base_url()}css/sample.css" type="text/css" /&gt;<br />    &lt;title&gt;サンプル&lt;/title&gt;<br />  &lt;/head&gt;<br />  &lt;body&gt;<br />    &lt;div&gt;<br />      &lt;div&gt;<br />        &lt;img src="{base_url()}images/icons/sample_titile.jpg" width="580" height="70" /&gt;<br />      &lt;/div&gt;<br />      &lt;div&gt;<br />        {form_open('sample/confirm')}<br />          {form_hidden('ticket', $ci-&gt;ticket)}<br />          &lt;table&gt;<br />            &lt;tr&gt;<br />              &lt;th&gt;名前&lt;/th&gt;<br />              &lt;td&gt;<br />                &lt;input type="text" name="name" value="{set_value('name')}" size="30" /&gt;<br />                {form_error('name')}<br />              &lt;/td&gt;<br />            &lt;/tr&gt;<br />            &lt;tr&gt;<br />              &lt;th&gt;メールアドレス&lt;/th&gt;<br />              &lt;td&gt;<br />                &lt;input type="text" name="email" value="{set_value('email')}" size="30" /&gt;<br />                {form_error('email')}<br />              &lt;/td&gt;<br />            &lt;/tr&gt;<br />            &lt;tr&gt;<br />              &lt;th&gt;コメント&lt;/th&gt;<br />              &lt;td&gt;<br />                &lt;textarea name="comment" rows="4" cols="30"&gt;{set_value('comment')}&lt;/textarea&gt;<br />                {form_error('comment')}<br />              &lt;/td&gt;<br />            &lt;/tr&gt;<br />            &lt;tr&gt;<br />              &lt;td&gt;&lt;/td&gt;<br />              &lt;td&gt;<br />                &lt;input type="submit" value="確認" /&gt;<br />              &lt;/td&gt;<br />            &lt;/tr&gt;<br />          &lt;/table&gt;<br />        {form_close()}<br />      &lt;/div&gt;<br />    &lt;/div&gt;<br />  &lt;/body&gt;<br />&lt;/html&gt;<br /><br /></pre>
<br />]]>
        
    </content>
</entry>

</feed>

