MySQL-5.5.13 ビルド

MySQL-5.5.13 をソースからビルドしたのでメモ。

OS は FreeBSD 7.1-RELEASE-p4 です。

MySQL-5.5.X は configure ではなく cmake を使うようになったようです。

> cmake
cmake: Command not found.

cmake が無いので、まずは cmake をインストールします。
ports からインストールします。

> whereis cmake
cmake: /usr/ports/devel/cmake
> su -
# cd /usr/ports/devel/cmake
# make configure
# make
# make install
# pkg_info | grep cmake
cmake-2.8.4_1       A cross-platform Makefile generator
# which cmake
/usr/local/bin/cmake
# make clean

次に MySQL-5.5.13 用にユーザを追加しました。

# pw groupadd mysql55
# pw useradd mysql55 -d /nonexistent -s /sbin/nologin
> id mysql55
uid=1001(mysql55) gid=1001(mysql55) groups=1001(mysql55)

いよいよ MySQL のビルドです。
MySQL も ports でインストールしようかと思ったのですが、イマイチ Makefile で指定した cmake のオプションがどのように影響するのか分からなかったのでソースからビルドする事にしました。 :mrgreen:

オプションは大体見れば分かると思いますが、 😎
既に MySQL-4.X が稼働しているサーバだったので、PREFIX 、ポート番号、socketのパスを変更しています。

> tar xfz mysql-5.5.13-freebsd7.0-i386.tar.gz
> cd mysql-5.5.13
> cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 
-DMYSQL_DATADIR=/usr/local/mysql55/data 
-DDEFAULT_CHARSET=utf8 
-DDEFAULT_COLLATION=utf8_general_ci 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DWITH_ARCHIVE_STORAGE_ENGINE=1 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 
-DMYSQL_TCP_PORT=3307 
-DMYSQL_UNIX_ADDR=/tmp/mysql55.sock 
-DWITH_READLINE=1
> make
> su -
# make install

これで MySQL-5.5.13 が /usr/local/mysql55/ にインストールされました。

次は MySQL-5.5.13 の起動です。

データディレクトリを作成します。

# mkdir -p /home/mysql55/db
# chown mysql55:mysql55 /home/mysql55/db

my.cnf コピー

# cp /usr/local/mysql55/support-files/my-medium.cnf /home/mysql55/db/my.cnf
# chown mysql55:mysql55 /home/mysql55/db/my.cnf

my.cnf の変更点。
user = mysql55 を追加。
skip-networking のコメントを外して有効化。コメントアウトって言うの? 🙂

# diff /usr/local/mysql55/support-files/my-medium.cnf /home/mysql55/db/my.cnf
26a27
> user          = mysql55
45c46
< #skip-networking
---
> skip-networking

MySQL データ初期化を行います。(mysql_install_db の実行)

# /usr/local/mysql55/scripts/mysql_install_db --basedir=/usr/local/mysql55 --datadir=/home/mysql55/db --user=mysql55
Installing MySQL system tables...
OK
Filling help tables...
OK
 
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
 
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
 
/usr/local/mysql55/bin/mysqladmin -u root password 'new-password'
/usr/local/mysql55/bin/mysqladmin -u root -h server.example.com password 'new-password'
 
Alternatively you can run:
/usr/local/mysql55/bin/mysql_secure_installation
 
which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.
 
See the manual for more instructions.
 
You can start the MySQL daemon with:
cd /usr/local/mysql55 ; /usr/local/mysql55/bin/mysqld_safe &
 
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/mysql55/mysql-test ; perl mysql-test-run.pl
 
Please report any problems with the /usr/local/mysql55/scripts/mysqlbug script!
 
# ls -l /home/mysql55/db
total 12
-rw-r--r--  1 mysql55  mysql55  4699 Jun  7 08:52 my.cnf
drwx------  2 mysql55  mysql55  2048 Jun  7 09:02 mysql
drwx------  2 mysql55  mysql55  1024 Jun  7 09:02 performance_schema
drwx------  2 mysql55  mysql55   512 Jun  7 09:02 test

スタートアップスクリプトを作成します。

ソースと一緒に入っているスクリプトをコピーします。

# cp /usr/local/mysql55/support-files/mysql.server /usr/local/etc/rc.d/mysql55-server

スタートアップスクリプト修正。
元々 linux 用のスクリプトみたいですが、FreeBSD でも大丈夫みたいです。

# vi /usr/local/etc/rc.d/mysql55-server

以下変更点です。

diff /usr/local/mysql55/support-files/mysql.server /usr/local/etc/rc.d/mysql55-server
27c27,29
<
---
>
> name="mysql55"
>
57,58c59,60
< lockdir='/var/lock/subsys'
< lock_file_path="$lockdir/mysql"
---
> lockdir='/var/run'
> lock_file_path="$lockdir/mysql55"
70c72
<     datadir=/usr/local/mysql55/data
---
>     datadir=/home/mysql55/db
283c285
<       $bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
---
>       $bindir/mysqld_safe --defaults-file="$datadir/my.cnf" --datadir="$datadir" --pid-file="$mysqld_pid_file_path" --user=mysql55 $other_args >/dev/null 2>&1 &

それと、FreeBSD では rc.conf に OS 起動時にスタートさせるスクリプトを指定するようです。

# vi /etc/rc.conf
mysql55_enable="YES" を追加しました。

mysqld を起動します。

# /usr/local/etc/rc.d/mysql55-server start
Starting MySQL.. SUCCESS!
# ps awwux | grep mysql で mysql55 が起動した事を確認しました。

停止も確認しておきますか。

# /usr/local/etc/rc.d/mysql55-server stop
Shutting down MySQL. SUCCESS!
# ps awwux | grep mysql で mysql55 が停止した事を確認しました。

root のパスワードを設定します。

# /usr/local/mysql55/bin/mysqladmin -u root password 'hogehoge'
# /usr/local/mysql55/bin/mysql -uroot
 
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 4
Server version: 5.5.13-log Source distribution
 
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MySQL4.X も問題なく稼働しているようなので、セットアップはここまででひとまず完了です。 :mrgreen:

Software RAID DegradedArray event

サーバが固まってしまった ❗

PostgreSQL でテーブルを join している最中だったので、
ちょっとムチャし過ぎ?なんて思ったのですが、復帰する事がなく 😥

久しぶりに電源スイッチ長押ししました 😎

無事再起動後ログインしてみると mdadm monitoring さんからメールがきました。
(サーバ名は変更してあります)

Subject: DegradedArray event on /dev/md1:server.example.com
From: mdadm monitoring <root@server.example.com>
To: root@server.example.com
Date: Thu, 19 May 2011 14:00:43 +0900 (JST)
 
This is an automatically generated mail message from mdadm
running on server.example.com
 
A DegradedArray event had been detected on md device /dev/md1.
 
Faithfully yours, etc.

またですか 😐

さっそく状態を確認してみました。

$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hda2[1]
      2096384 blocks [2/1] [_U]
 
md2 : active raid1 hdc3[0] hda3[1]
      75762432 blocks [2/2] [UU]
 
md0 : active raid1 hdc1[0] hda1[1]
      264960 blocks [2/2] [UU]
 
unused devices: <none>

ちなみに md1 は swap で利用しているパーティションです。

NI-Lab.さんのDebian GNU/Linux etch で RAID 1 ミラーリングの障害復旧してみるを参考にして同じ事を行ってみました。

mdadm –detail すると /dev/hdc2 が remove されています。

# mdadm --detail /dev/md1
/dev/md1:
        Version : 00.90.01
  Creation Time : Mon Feb 26 20:28:14 2007
     Raid Level : raid1
     Array Size : 2096384 (2047.59 MiB 2146.70 MB)
    Device Size : 2096384 (2047.59 MiB 2146.70 MB)
   Raid Devices : 2
  Total Devices : 1
Preferred Minor : 1
    Persistence : Superblock is persistent
 
    Update Time : Thu May 19 13:57:13 2011
          State : clean, degraded
 Active Devices : 1
Working Devices : 1
 Failed Devices : 0
  Spare Devices : 0
 
           UUID : e0e42dda:9a0f1b0d:4eb33107:12dbb51d
         Events : 0.205033
 
    Number   Major   Minor   RaidDevice State
       0       0        0        -      removed
       1       3        2        1      active sync   /dev/hda2

badblock を非破壊リードライトモードで調査します。

結構時間がかかります。。。

# badblocks -nsv -o /tmp/hdc2.bad /dev/hdc2
Checking for bad blocks in non-destructive read-write mode
From block 0 to 2096482
Checking for bad blocks (non-destructive read-write test)
Testing with random pattern: done
Pass completed, 0 bad blocks found.

”Pass completed, 0 bad blocks found.” でした 🙂

➡ それでは md1 に /dev/hdc2 を戻します。

# mdadm --manage /dev/md1 --add /dev/hdc2

resync しているか確認します。

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdc2[2] hda2[1]
      2096384 blocks [2/1] [_U]
      [==>..................]  recovery = 11.6% (243904/2096384) finish=1.1min s
peed=27100K/sec
md2 : active raid1 hdc3[0] hda3[1]
      75762432 blocks [2/2] [UU]
 
md0 : active raid1 hdc1[0] hda1[1]
      264960 blocks [2/2] [UU]
 
unused devices: <none>

➡ なんだか良さそうです 🙂

少し時間をおいてもう一度確認。

# cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 hdc2[0] hda2[1]
      2096384 blocks [2/2] [UU]
 
md2 : active raid1 hdc3[0] hda3[1]
      75762432 blocks [2/2] [UU]
 
md0 : active raid1 hdc1[0] hda1[1]
      264960 blocks [2/2] [UU]
 
unused devices: <none>

➡ 復活しました :mrgreen:

NI-Lab.さんありがとうございます。

Xen domainU の複製

Xen の domainU を複製する方法です。

既にある domainU vps1 から新たに domainU vps5 を作成します。

1. イメージファイルをコピーします。

vps1 の複製 vps5 を作成します。

vps1 を停止。

# xm shutdown vps1

イメージファイルをコピー。

# cp /var/lib/xen/images/vps1.img /var/lib/xen/images/vps5.img

2. vps5.img をマウント

2-1. イメージファイルを loop デバイスに接続します。

# losetup -a
# losetup -f
/dev/loop0
# losetup /dev/loop0 /var/lib/xen/images/vps5.img
# losetup -a
/dev/loop0: [0304]:197083 (/var/lib/xen/images/vps5.img)

2-2. パーティションを確認します。

# fdisk -l /dev/loop0
 
Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *           1          13      104391   83  Linux
/dev/loop0p2              14         652     5132767+  8e  Linux LVM
# kpartx -l /dev/loop0
     loop0p1 : 0 208782 /dev/loop0 63
     loop0p2 : 0 10265535 /dev/loop0 208845

2-3. LVM パーティションをマッピング

# kpartx -av /dev/loop0
add map loop0p1 : 0 208782 linear /dev/loop0 63
add map loop0p2 : 0 10265535 linear /dev/loop0 208845
# ls /dev/mapper/
control  loop0p1  loop0p2

2-4. 論理ヴォリューム活性化

# pvscan
  PV /dev/mapper/loop0p2   VG VolGroup00   lvm2 [4.88 GB / 0    free]
  Total: 1 [4.88 GB] / in use: 1 [4.88 GB] / in no VG: 0 [0   ]
# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "VolGroup00" using metadata type lvm2
# lvscan
  inactive          '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
  inactive          '/dev/VolGroup00/LogVol01' [544.00 MB] inherit
# vgchange -a y
  2 logical volume(s) in volume group "VolGroup00" now active
# lvscan
  ACTIVE            '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [544.00 MB] inherit

2-5. イメージファイルの root パーティションを mount

# mount /dev/VolGroup00/LogVol00 /mnt

3. イメージファイルの設定を変更

ホスト名、IP Address、macアドレス(HWADDR)を変更します。

# vi /mnt/etc/hosts
# vi /mnt/etc/sysconfig/network
# vi /mnt/etc/sysconfig/network-scripts/ifcfg-eth0

4. イメージファイルの umount

# umount /mnt
# vgchange -a n
   0 logical volume(s) in volume group "VolGroup00" now active
# lvscan
   inactive          '/dev/VolGroup00/LogVol00' [4.34 GB] inherit
   inactive          '/dev/VolGroup00/LogVol01' [544.00 MB] inherit
# kpartx -d /dev/loop0
# ls /dev/mapper/
control
# losetup -d /dev/loop0
# losetup -a
#

5. domainU vps5 設定ファイル作成

vps1 の設定ファイルをコピーして vps5 用の設定に変更します。

uuid を生成。

# uuidgen
2843d9ea-51c5-49a6-9258-fa273e682dea

vps5 を作成して、変更します。

# cp /etc/xen/vps1 /etc/xen/vps5
# vi /etc/xen/vps5
(name, uuid, disk, vif を変更)

6. vps5 起動

# xm create vps5

※vps5 を起動できるのですが、何故か vps5 の eth0 が
UP になりませんでした。
ifcfg-eth0 が ifcfg-eth0.bak にリネームされていたので、
元にもどして ifup eth0 したところ ok でした。

参考にさせていただいたサイト: http://sokohakato.wordpress.com/linux/centos/xenimgmount/

Xen ルーティングモード

Xen のルーティングモードで仮想ネットワークを構築しました。

192.168.1.111 のサーバ上に 192.168.2.0/24 の仮想ネットワークを
作成して、その仮想ネットワークに仮想サーバ vps1, vps2…を作成
しました。

イメージはこんな感じです。

Xen構成図

イロイロと試行錯誤をしたので、もう一度最初からやってみないと
どうやれば良いのか実は分かっていませんが 😎 記憶と
現状の結果を元に行った事をメモとして残します。

最初にまず、通常のブリッジモードで仮想サーバ vps1 を追加しました。
デフォルトの状態ですね。

# virt-install --name vps1 --nographics --prompt

次に仮想スイッチを作成しました。
以下のような定義ファイル yngsw1_def.xml を作成します。

<network>
  <name>yngsw1</name>
  <forward mode="route" dev="eth0" />
  <bridge name="yngsw1" />
  <ip address="192.168.2.1" netmask="255.255.255.0">
  </ip>
</network>

このファイルから仮想スイッチを作成します。

# virsh net-define yngsw1_def.xml
Network yngsw1 defined from yngsw1_def.xml

作成した yngsw1 をスタートさせます。

# virsh net-start yngsw1
Network yngsw1 started

そしてついでに、デフォルトの仮想ブリッジを削除しておきます。

# virsh net-destroy default
# rm /etc/libvirt/qemu/networks/autostart/default.xml

すると、以下のルーティングが追加されます 🙂

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 yngsw1
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
0.0.0.0         192.168.1.254     0.0.0.0         UG        0 0          0 eth0

yngsw1 を自動的にスタートするようにします。

# virsh net-autostart yngsw1
Network yngsw1 marked as autostarted

そして、デフォルトのブリッジモードではなく、ルーティングモードで
起動するように /etc/xen/xend-config.sxp を変更します。

(network-script network-bridge)
↓コメントアウト
#(network-script network-bridge)
 
(vif-script vif-bridge)
↓コメントアウト
#(vif-script vif-bridge)
 
 
#(network-script network-route)
#(vif-script     vif-route)
↓コメントを外す
(network-script network-route)
(vif-script     vif-route)

vps1 を yngsw1 に接続します。
/etc/xen/vps1 の vif の bridge を変更します。

vif = [ "mac=00:16:36:02:e0:5d,bridge=xenbr0,script=vif-bridge" ]
↓変更
vif = [ "mac=00:16:36:02:e0:5d,bridge=yngsw1,script=vif-bridge" ]

vps1 の IP Address を yngsw1 上の IP Address に変更します。

vps1# vi /etc/sysconfig/network
vps1# /etc/sysconfig/network-scripts/ifcfg-eth0

ここまでやったらサーバを再起動すれば完成です。
もっとちゃんとした手順があると思うのですが見つける事が
できませんでした。。。 :mrgreen:

※外部のサーバから yngsw1 上の vps1 と通信する為には、
外部のサーバや、ルータなどで vps1 へのルーティングを
192.168.1.111 に向けないと通信できません。

※2 台目の仮想サーバ vps2 を追加する場合、
virt-install がエラーになってしまいます。
どうやら virbr0 や xenbr0 が無いとダメみたいです。
仕方がないので /etc/xen/scripts/network-bridge を起動して
から virt-install しました。

アンドロイド端末で root shell

Galaxy S の hosts を変更したくなりまして root shell を実行できるようにしましたのでメモ。

※ここに記載されている内容は無保証です。
※ここに記載されている通りに行った結果携帯電話やPCなどがおかしくなっても
※私は何も保証はしません。
※自己責任の範囲で行ってください。

  1. Android Sdk を install
  2. android developpersから
    ダウンロードします。

    私の環境は Windows 7 なので、installer_r10-windows(Recommended)をダウンロードしました。

    • ダウンロードした installer_r10-windows.exe を起動します。
    • ウィザードが起動されるので Next をクリックして行きます。

      Next をクリック。

    • JAVA SE Development Kit が必要です。
    • JAVA SE Development Kit が必要らしく、私の PC には既にインストールされていた事を
      検知してくれました 😛

      Next をクリック。

    • android skd インストール先のフォルダ指定
    • デフォルトのまま Next をクリック。

    • スタートメニューのフォルダ指定
    • デフォルトのまま Next をクリック。

    • インストール
    • Completed となったら Next をクリック。

    • インストールウィザード完了
    • Finish をクリックして SDK Manager を起動します。

  3. Package の選択
    • install するパッケージを選択して Install をクリック。
    • どのパッケージが必要なのか分からなかったので Accept All をチェックして Install しました。 :mrgreen:

    • パッケージのインストール
    • ここは結構時間がかかります。。。 😥

    • ADB Restart
    • ADB を再起動します。

      Yes をクリック。

    • パッケージのインストール完了
    • Close をクリックして完了。

  4. PATH を追加
  5. Windows の環境変数 Path に adb.exe があるパスを追加します。

    ※ここで気がついたのですが、すでに android sdk のパスが設定されていました!
    ※このパソコンに android sdk をインストールしたのは今回で2回目みたいです 😎
    ※以前は別のパスにインストールしていたので今回インストールしたパスに変更しました。
    ※だから JAVA SE Development Kit が入っていたのか。。。

  6. SuperOneClick のインストール
  7. root shell を実行できるようにしてくれるツールが SuperOneClick です。

    • SuperOneClick のダウンロード
    • [App]SuperOneClickからダウンロードしました。

    • SuperOneClick の起動
    • ダウンロードした zip ファイルを解凍して SuperOneClick.exe を起動します。

      すると以下のアプリケーションが起動します。

      ※SuperOneClick を利用するにはxda-developersに登録が必要です。

  8. root shell 起動
    • Galaxy S を USB デバッグモードにします

      設定>アプリケーション>開発>USB デバッグ にチェックします。

      そして、USB で PC と接続します。

    • Shell Root クリック
    • SuperOneClick の Shell Root ボタンをクリックします。

      暫くすると以下が表示されます。
      うまくいったよ。Galaxy S を再起動すれば元にもどるよ。という意味だと思います。

      そして以下のようになっているかと思います。

  9. root shell による操作
    • DOSプロンプトを起動します
    • 以下のように adb shell と入力すると root ユーザの shell を取得できました。

  10. hosts の変更
  11. やっと目的である hosts の変更を行う事ができます。

      filesystem を書き込みできるようにマウントし直します

      hosts ファイルは /system/etc/hosts にあるので、/system を書き込みできるように
      マウントし直します。

      以下は mount コマンドの実行結果です。
      /system が書き込みできなくなっている事が分かります。

    • マウントし直します。
    • mount -o rw,remount /dev/block/stl9 /system

      ro から rw に変わっています。

    • hosts ファイルをバックアップします。
    • hosts にエントリを追加します
    • vi が使えないので echo で追加しました。

      echo 192.168.1.222 hoge.example.co.jp >> hosts

  12. 元に戻す
  13. 正式な方法がわからないのですが、exit で DOSコマンドプロンプトに戻り、その後でUSBケーブルを抜き、USBデバッグを停止して、端末を再起動しました。

WordPress IE9 対応

IE9 で WordPress の記事が投稿できないというお問い合わせをいただきました。

テストしてみたところ最新の 3.0.5 でもビジュアルエディタから投稿が出来ませんでした:cry:

ただ、IE9 を “互換表示” にすると投稿できる事がわかりました:mrgreen:

とは言えお客様に「互換表示にして投稿してください。」と言って対応していただく訳にもいかず、

なんとかサーバ側で対応できないか調べたところ、以下の meta タグで対応できる事がわかりました。

これをダッシュボードにログインした時のヘッダに出したいので、

wp-admin/admin-header.php

に以下を追加して対応しました。

<?php if (preg_match('/MSIEs9.0/', $_SERVER['HTTP_USER_AGENT'])) { ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php } ?>

filter をフックしてできるのかもしれませんが。。。:cool:

nkf でバッファリングしない方法

nkf で文字コード変換しながらログをモニタリングするときに

いつも困っていましたが考えてみれば

nkf でバッファリングしないようにできれば良いのではないか?

という事に気がつきました 💡

さっそく Google で検索したところ一瞬で解決 🙂

うまい棒blogさんのnkfで出力をバッファいリングしない

こんな風に -u オプションを付ければバッファリングしないんですね ❗

$ tail -f hogehoge.log | nkf -uw

MySQL Cluster DataMemory, IndexMemory の増やし方

MySQL Cluster 7.1.3 でこんなエラーが発生 🙁

#1114 - The table '○○○' is full

色々調べたところ DataMemory 使用率が 96% に達している事が判明しました。

$ ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> all report memoryusage
Connected to Management Server at: localhost:1186
Node 11: Data usage is 96%(12800 32K pages of total 12288)
Node 11: Index usage is 60%(6826 8K pages of total 4096)
Node 12: Data usage is 96%(12800 32K pages of total 12288)
Node 12: Index usage is 60%(6826 8K pages of total 4096)
(※実際の数値とは違います)

DataMemory は config.ini で指定しますので、config.ini を変更して

DataMemory, IndexMemory を増やしました。

root# vi /var/lib/mysql-cluster/config.ini
[NDBD DEFAULT]
NoOfReplicas=2
DataDir=/var/lib/mysql-cluster
# ServerPort = 63132
# MaxNoOfConcurrentOperations=10000
DataMemory=1024M
IndexMemory=128M
# TimeBetweenWatchDogCheck=30000
# MaxNoOfOrderedIndexes=512

この変更を反映させます。

  1. ndb_mgmd を再起動をします。
  2. この時、起動オプションに –reload を追加します。
    (この –reload が分かるまで何度も試行錯誤してしまいました 🙂 )

    root# kill {ndb_mgmd の PID}
    root# kill {ndb_mgmd の PID}(もういっちょ!)
    -bash: kill: ({ndb_mgmd の PID}) - No such process(停止したね!!)
    root# /usr/sbin/ndb_mgmd --config-dir=/var/lib/mysql-cluster --config-file=/var/lib/mysql-cluster/config.ini --reload
  3. データノードを順番に再起動
  4. (Node 11 を再起動します。)
    ndb_mgm> 11 restart(しばらく待ちます)
    Node 11: Node shutdown initiated
    Node 11: Node shutdown completed, restarting, no start.
    Node 11 is being restarted
     
    Node 11: Start initiated (version 7.1.3)
    ndb_mgm> Node 11: Started (version 7.1.3)(再起動完了)
     
    (Node 12 を再起動します。)
    ndb_mgm> 12 restart(しばらく待ちます)
    Node 12: Node shutdown initiated
    Node 12: Node shutdown completed, restarting, no start.
    Node 12 is being restarted
     
    Node 12: Start initiated (version 7.1.3)
    ndb_mgm> Node 12: Started (version 7.1.3)(再起動完了)
  5. メモリ使用率を確認
  6. ndb_mgm> ALL REPORT MemoryUsage
    Connected to Management Server at: localhost:1186
    Node 11: Data usage is 35%(11636 32K pages of total 32768)
    Node 11: Index usage is 10%(1652 8K pages of total 16416)
    Node 12: Data usage is 35%(11636 32K pages of total 32768)
    Node 12: Index usage is 10%(1651 8K pages of total 16416)

    DataMemory, IndexMemory が増えて使用率が減りました 🙂

    今後も使用量は増え続けるのでこの作業は繰り返し行う必要がありそうです :mrgreen:

OpenPNE3.4.8

ざっくりとセットアップの内容をメモします。

3.4.8 というバージョンをダウンロードしました。

ファイル名はopenpne-OpenPNE3-OpenPNE-3.4.8-0-gb9d705e.zip

  1. zip ファイルを解凍して DOCUMENT_ROOT 以外の任意の場所に保存します。
  2. /usr/local/apache2/OpenPNE3 に解凍しました。

  3. OpenPNE.yml 作成
  4. $ cd /usr/local/apache2/OpenPNE3
    $ cp config/OpenPNE.yml.sample config/OpenPNE.yml
    $ vi config/OpenPNE.yml

    base_url と mail_envelope_from を環境に合わせたモノに変更しました。

  5. ProjectConfiguration.class.php 作成
  6. 特に変更せずデフォルトのままです。

    $ cp config/ProjectConfiguration.class.php.sample config/ProjectConfiguration.class.php
  7. DB 作成
  8. openpne3db という名前で作成しました。

    mysql> CREATE DATABASE open3db DEFAULT CHARACTER SET utf8;

    そして、openpne ユーザがパスワード openpne で接続できるようにユーザを作成しました。

    mysql> GRANT ALL ON *.openpne3db TO 'openpne'@'localhost' IDENTIFIED BY 'openpne';
  9. インストール
  10. 対話的形式でデータベースへの接続情報を設定をした後、色々と表示されますが、
    意味が分かりませんでした。

    $ ./symfony openpne:install
  11. web ディレクトリを公開ディレクトリから参照できるようにシンボリックリンクを作成
  12. 公開ディレクトリを /usr/local/apache2/htdocs として説明します。
    /sns というサブディレクトリに公開します。
    サーバ名を www.example.com とすると、URL は http://www.example.com/sns/ になります。

    $ cd /usr/local/apache2/htdocs
    $ ln -s ../OpenPNE3/web sns
  13. .htaccess 変更
  14. RewriteBase 変更

    $ vi web/.htaccess

    RewriteBase を /sns/ に変更しました。

  15. ブラウザからアクセス
  16. http://www.example.com/sns/

    ページは表示されますが、CSS が適用されていない状態です 😥
    apache の error_log を見たら DOCUMENT_ROOT 直下の opSkinBasicPlugin を
    参照している事が分かったので、DOCUMENT_ROOT に opSkinBasicPlugin/web へ
    のシンボリックリンクを作成しました。

    # cd /usr/local/apache2/htdocs
    # ln -s ../OpenPNE3/plugins/opSkinBasicPlugin/web opSkinBasicPlugin

    簡単に参照先を変更できるかと思ったのですが、調べても分からなかったのでシンボリックリンクで対応してしまいました。

  17. 再度ブラウザでアクセス
  18. CSS が適用されたデザインされたページになりました 🙂

    プリセットされているユーザでログインします。

    メールアドレス: sns@example.com
    パスワード: password

    すると今度は以下のエラー 😥

    現在、サーバが混み合っているか、メンテナンス中です。
    ご迷惑をおかけいたしますが、しばらく時間を空けて再度アクセスしてください。
     
    Currently, our service is too busy or is under maintenance.
    We're sorry and please retry accessing later.

    またまた apache の error_log を見ると以下が記録されていました。

    SQLSTATE[HY000]: General
     error: 2014 Cannot execute queries while other unbuffered queries are active.
    Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ev
    er going to run against mysql, you may enable query buffering by setting the PDO
    ::MYSQL_ATTR_USE_BUFFERED_QUERY attribute., referer: http://www.example.com/sns/
    pc_backend.php/

    エラーメッセージのとおり、PDO::MYSQL_ATTR_USE_BUFFERED_QUERY を true
    にする必要があるようです。

    色々と調べたところ以下のファイルを変更したところ解決しました。
    (これで正しいのかわかりませんが 😎 )

    lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection/Mysql.php

    以下のように PDO::MYSQL_ATTR_USE_BUFFERED_QUERY を追加。

    public function connect()
         {
             $connected = parent::connect();
             $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
             $this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
     
             return $connected;
         }

    これでとりあえず動くようになりました 🙂

    ※この対応方法は DB が MySQL の場合にのみ有効です