2014/11/24(月)FreeBSD における mysql のアップデート手順

2017/10/12 17:50 サーバ運営・管理
筆者は、直交性が無く、事前に調べなければ 100% 失敗するかのような、感覚的に理解できない mysqlの構築オプションに、正直なところ面食らっています。
情報量が多いので何とかなっているというところでしょうか。

1)先ずは、バックアップ。 これは常識的に行う作業です。
# mysqldump -A -u user -p > dumpfile.sql

これで、全てのデータベースクラスタを SQL にてダンプ出力します。
SQL でないと、バージョンが異なるアップデートの際、データを元に戻せません。

2)FreeBSD ports にてインストール(例示は mysql 5.5 の場合)
# cd /usr/ports/databases/mysql55-server
# make BATCH=yes WITH_CHARSET=utf8 WITH_XCHARSET=all install clean
# rehash

3)データベースクラスタの設置場所をこしらえる
# mkdir /home/db/mysql
# chown -R mysql:mysql /home/db/mysql

4)設定情報の雛形をコピー
# cp /usr/local/share/mysql/my-medium.cnf /home/db/mysql/my.cnf
# chown mysql:mysql /home/db/mysql/my.cnf
# chmod 644 /home/db/mysql/my.cnf

5)サーバ起動時に自動起動するようにする
# vi /etc/rc.conf

〔/etc/rc.conf に下記を追記〕
mysql_enable="YES"
mysql_dbdir="/home/db/mysql"

6)mysql の設定
# vi /home/db/mysql/my.cnf

〔/home/db/mysql/my.cnf の [mysqld]セクションに追記〕
skip-character-set-client-handshake
character-set-server = utf8
datadir = /home/db/mysql

〔/home/db/mysql/my.cnf の [client]セクションに追記〕
default-character-set = utf8

7)mysql サーバを起動
# /usr/local/etc/rc.d/mysql-server start
Starting mysql.


8)データベースの初期設定
# mysql -u root
mysql> SET PASSWORD FOR root@localhost=password('mysql_root_pass');
(mysql root ユーザのパスワード設定。任意の文字列を指定。)

mysql> SELECT user,host FROM mysql.user;
+------+---------------------+
| user | host        |
+------+---------------------+
| root | 127.0.0.1      |
| root | ::1         |
|   | hoge.basekernel.jp |
| root | hoge.basekernel.jp |
|   | localhost      |
| root | localhost      |
+------+---------------------+
6 rows in set (0.00 sec)

#上から3つめと上から5つ目は、空ユーザで、誰でもログインできてしまうため、削除。
mysql> DELETE FROM mysql.user WHERE user='';
mysql> SHOW DATABASES;
+--------------------+
| Database      |
+--------------------+
| information_schema |
| mysql       |
| test        |
+--------------------+
3 rows in set (0.00 sec)

#データベース test を削除。
mysql> DROP DATABASE test;
mysql> EXIT;
Bye.

9)リストア
# mysql -u user -p < dumpfile.sql
Enter password: mysql_root_pass
(パスワードを入力)

#以下は任意
mysql> CREATE DATABASE db_name;
mysql> GRANT ALTER,CREATE,DELETE,DROP,INSERT,LOCK TABLES,SELECT,UPDATE ON db_name.* TO user_name@localhost IDENTIFIED BY 'user_pass';
mysql> EXIT;
Bye.

○ ログイン
# mysql -u root -p
Enter password: mysql_root_pass
(パスワードを入力)

○ バージョン表示
# mysql --version
mysql Ver 14.14 Distrib 5.5.40, for FreeBSD9.3 (i386) using 6.3

○ ユーザ削除
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user_name'@'localhost';
mysql> DELETE FROM mysql.user WHERE user='user_name' and host='localhost';

〔参考〕FreeBSD サーバ構築マニュアル MySQL5 インストール
 freebsd.server-manual.com
〔参考〕FreeBSD 9.1-RELEASEにMySQL 5.5をインストール
 クソゲ~製作所

2014/11/23(日)FreeBSD における PHP 5.5.x の mysql サポート

2017/10/12 17:48 サーバ運営・管理
FreeBSD 9.3 にて、mysql 5.5.40 Server を Ports にて導入し、
PHP 5.5系にて mysql アクセスのサポートをしようと構築をかけると、
構築の最終段階(本当に構築の最終工程)で、
ext/mysqlnd/.libs/mysqlnd_ps_codec.o: In function `ps_fetch_float':
ext/mysqlnd/mysqlnd_ps_codec.c:233: undefined reference to `__extendsfsd'
ext/mysqlnd/mysqlnd_ps_codec.c:233: undefined reference to `__extendsddf'
のようなエラーが出て構築できない現象に嵌りました。
FreeBSD 10.x系 ではこのようなエラーは出ません。
おそらく gcc コンパイラ と clang コンパイラの違いなのでしょう。

PHP 5.5 におけるmysql サポートは複雑で、先ず、
・ mysql インタフェース
・ mysqli インタフェース
・ PDO-mysql インタフェース
の3種類あります。 
このうち、最初の mysql インタフェースは古いので、利用は非推奨。
将来のバージョンでは削除されることが決まっています。

mysqli は拡張 mysql インタフェース、 PDO-mysql は Perl で言うところの DBI インタフェースみたいなものです。

今どきの PHP アプリケーションは、mysqli と PDO-mysql を使うように強い推奨がなされている状態です。
さらに、この内部モジュールは、各インタフェース専用以外に3つを統合した mysqlnd というものがあり、構築オプションによっては mysqlnd をインストールするようになっている感じです。全部で mysql サポートがモジュール4つあるらしく、何故こういう面倒なことになっているのか、利用者には理解不能です。

どうやら、configure で指定する構築オプションの組み合わせで mysqlnd を使う場合に、上記のエラーとなるようです。
今のところ、FreeBSD 9.x 以下のバージョンで PHP 5.5 を mysql 対応にする場合、 configure のオプションは、必ず以下をつけるといいです。
--with-mysql=/usr/local
--with-pdo-mysql=/usr/local
--with-mysqli=/usr/local/bin/mysql_config
--disable-mysqlnd
--with-mysql-sock=/tmp/mysql.sock
ポイントは --disable-mysqlnd でmysqlnd を外す指定です。
環境によっては mysql の unix ソケットが検出できず、この場合も mysqlnd を使うように強制されてしまうようなので、明示的に指定します。

筆者は PHP も mysql も使いません。昔からこの類の変更が多いからです。
アプリケーションの寿命が長い perl と postgreSQL を多用しており、長い目でのメンテナンス工数の面からお勧めしています。

2014/10/30(木)うーむ・・・ports/pakages の嫌なところ

2017/10/12 17:46 IPv6基礎
最近の FreeBSD ports は、BerkeleyDB のデフォルト選択が 5.3.28 になったようで、依存管理の把握が面倒くさくなりそうなので、一念発起(?)にて再構築しているのですが、再構築したつもりで、いざ BerkelayDB 4.8.30 を削除しようとしたら・・・
20141030.png

まだ依存関係があるorz
依存関係にあるパッケージを全て消そうとするのです。

自動的に依存関係まで処理して更新してくれれば楽なんですが・・・
こんなメンテナンスやる奴もあまりいないでしょうね。
しかし、不可解な挙動が突如発生する原因のひとつが、こうしたバージョン管理の問題なんです。指摘されてから対応すると無駄に時間とられるので、それがすごく嫌なのです。

2014/10/01(水)気象通報サイトを作ってみた

前回の記事を投稿した直後から準備を始めて、
未完成部分多いですが、一応見せられる状態になったので掲載します。
20141002.png

気象庁からXMLデータにて情報を貰い、それをHTMLなどに変換して表示等を行う仕組みです。
XSLT や XSD などの知識が無いと作れませんでした。

現在のところ、天気予報・週間天気予報・警報/注意報・土砂災害警戒情報・竜巻注意情報を扱っています。
また、電子メール通知サービスと、ごく簡単なXMLフィード(独自形式)を提供しています。

次は長期予報・地震情報を提供開始する予定ですが、このシステム開発は本業作業ではやれませんので、たぶん年末以降になりそうです。

こちらで提供しています → Web気象通報

2014/07/28(月)FreeBSD9/FreeBSD10 - オンラインマニュアルをUTF-8 で日本語化

2017/10/12 17:41 サーバ運営・管理
FreeBSD をはじめとする、Unix/Linux には、最初から英語によるオンラインマニュアルが付属しており、すぐ使えます。CUI環境でも、
% man ls
とかすると、以下のように表示されます。
20140728_1.png
しかしながら、筆者は日本人ですから、出来れば日本語で使いたいものです。
FreeBSD については、以下のところで継続的に翻訳・メンテナンスをして下さっている方がおります。→ http://www.koganemaru.co.jp/ 〔小金丸コンピュータエンジニアリングサービス〕
当方もお世話になっています。
ただ、FreeBSD 9/FreeBSD 10 で UTF-8 環境の場合、上記サイトに記されている方法では、上手く日本語マニュアルが表示できません。
自分メモとして以下に手順を残しておきます:
1)該当バージョンのマニュアルをインストール
〔FreeBSD 9.3 の場合〕
% pkg add ftp://ftp.koganemaru.co.jp/pub/jman9/ja-man-doc-9.3.20140726.txz
〔FreeBSD 10.0 の場合〕
% pkg add ftp://ftp.koganemaru.co.jp/pub/jman10/ja-man-doc-10.0.20140522.txz
2)小金丸さん作成のマニュアルは、EUC-JP コードでインストールされるため、
  これを手作業で UTF-8 に変換・保存する。]
#あらかじめ、nkf (portsカテゴリ:japanese)を インストールしておく必要があります。
〔FreeBSD 9.3/FreeBSD 10.0 共通〕
% cd /usr/share/man
% cp -r ja ja_JP.UTF-8
% find ja_JP.UTF-8 -name '*.gz' -exec gunzip '{}' ';'
% find ja_JP.UTF-8 -name '*.[0-9]' -exec nkf -Ew --overwrite '{}' ';'
% find ja_JP.UTF-8 -name '*.[0-9]' -exec gzip '{}' ';'
% nkf -Ew --overwrite ja_JP.UTF-8/whatis
3)新しい groff を、ports でインストールします。
〔FreeBSD 9.3/FreeBSD 10.0 共通〕
% cd /usr/ports/textproc/groff
(groff 1.22 では、インストールの最終段階でエラーが出るので、
 ファイル plist 内の img を含む行を、コンパイル前に削除する必要あり)
% make install
% make clean
4)/usr/bin/man を変更します。
  FreeBSD 9.0 からは、man コマンドが 伝統的な shスクリプトで構成されているようです。
〔FreeBSD 9.3/FreeBSD 10.0 共通〕
333c333
< NROFF="$NROFF -T$nroff_dev"
---
> NROFF="$NROFF -D$nroff_dev -T$nroff_dev"

936c936
< NROFF='groff -S -P-h -Wall -mtty-char -man'
---
> NROFF='/usr/local/bin/groff -S -P-h -Wall -mtty-char -man'

940c940
< TROFF='groff -S -man'
---
> TROFF='/usr/local/bin/groff -S -man'
ここで、再び、
% man ls
として、以下のように日本語になっていればインストール完了です。
20140728_2.png

(参考:http://d.hatena.ne.jp/akira_you/20120316/p1
〔FreeBSD 9.0RELASEで日本語manを使う-akira_youの私見〕)

2014/06/30(月)PC-BSD10 を入れてみた(3)

PC-BSD10 では、 Firefox + Flash player も使用できます。
20140701_7.JPG

サーバ側でUA を見ると、 X11; FreeBSD amd64 とあるのですが、Linux 版というわけでもなさそうで、64bit版なのかも不明です。
しかも Firefox のバーションは 29.0 です。

ただ、PC-BSD は 64bit 版しかありません。

次回は、オフィス環境を検証したいと思います。
但し、すぐ出来ない可能性が高いです。orz

2014/06/30(月)PC-BSD10 を入れてみた(2)-日本語入力環境

PC-BSD で日本語を扱えるようにするには、幾つか設定をしなければなりません。
このあたりも面食らったのですが、言語や文化に依存するローカライズ環境ですので、ある程度ユーザ数が増えないと対応ということにはならないですね。。

以下、試行錯誤による記録ですので、余計なことや不足している内容があるかもしれません。

先ず、ログインページでロケールとキーボードレイアウトの設定をする必要があります。
ログイン画面の左下に注目すると・・・
20140701_1.JPG
ロケールとキーボードレイアウトを設定する項目があります。

ロケールは、
20140701_2.JPG
のように Japanese(ja) を選択、

キーボードレイアウトは、
20140701_3.JPG
のような選択をします。

これで、日本語の表示は出来るのですが、これだけでは日本語入力が出来ません。
何せ GUI 環境の知識・ノウハウが殆ど無いので、面食らったんですが、更に IBus の設定を行わなければなりません。

IBus というのは、Unix/Linux 系における「インプットメソッドフレームワーク」というもので、文字入力インタフェースをアプリケーションレベルで扱いやすくする仕組みのものらしいです。
IBus の設定は PC-BSD コントロールパネル → IBus の設定 で行います。
3つの画面全てに設定する必要があります。
先ず、最初の画面:
20140701_4.JPG
SHIFT キー + SPACE キーで入力切替を行う設定になります。
PC-BSD を以前から使っている人は、この設定がいいでしょう。
下の2つのチェックボックスは入れたままにすることをお勧めします。

次に、インプットメソッドの画面:
20140701_5.JPG
インプットメソッドの選択をクリックし、Japanase にマウスカーソルを選択すると、4つほど候補が出てきます。そのうちの2つを上記のように選択します。

最後に、詳細の画面:
20140701_6.JPG
システムキーボードレイアウトを使用する のチェックは外します。
これをチェックすると、英語圏のキーボードレイアウトになり、上手く入力できません。

設定を行ったあと、一旦ログアウトし再度ログインすることでこの設定が有効になります。
SHIFT + SPACE で IME 入力のON/OFF が出来るはずです。

また、PC-BSD 10 の日本語環境構築については、以下が参考になります:
PC-BSD 10 で日本語環境を整える。 〔ふうせん Fu-sen.〕

2014/06/29(日)PC-BSD10 を入れてみた(1)

FreeBSD が 10 になって久しくなりましたが、こっちのほう(PC-BSD) はどんなもんかということで、、
20140630_2.JPG

PC-BSD 8 以来ですが、PC-BSD 8 では、時折 GUI インタフェースの起動に失敗し、また日本語環境の構築が面倒だったのですが、PC-BSD 10 では、多少緩和されているようです。
正直なところ、まだ万人にお勧めできるレベルではありません。
だけれど、「もう少し」というところまで洗練されてきてはいます。

なにより、動作安定度が良くなっています。
インストールも正直面食らう内容があります。

まず、
・メモリ馬鹿食いで有名な ZFS ファイルシステムがデフォルト!
 しかも UFS なんぞ選べない!
・HDDの空き容量が(クライアントモデルの場合)50GB 以上無いとインストールできない(?)
・インストール時に選んだ言語を本環境にまともに引き継がない(?)

ZFS というのは、サン・マイクロシステムズが開発したストレージ(ファイル)管理システムで、まともに性能発揮するには、少なくとも 4GByte、推奨で最低 6GByte の物理メモリが必要と言われる代物です。
なので、当方のメモリ 1GByte なマシンには使い物にならないか、に思われたわけです。

ですが、実際にインストールして、起動させてみると、
ZFS NOTICE: Prefetch is disabled by default if less than 4GB of RAM is present;
to enable, add "vfs.zfs.prefetch_disable=0" to /boot/loader.conf.

のようなメッセージが出て、どうやら支障がないようになっている模様。
実際に大量のファイルを移動させてみたりすると、少し遅いという感はあるが、実用上問題になるほどではありません。
FreeBSD 10 で導入された、高速なファイル圧縮・伸張アルゴリズムが効いているらしいです。
また、ZFS にすると、ディスク領域の有効利用や領域拡張、RAID やミラーリングの構築がとても簡単になります。

前書きが長いですが、インストール時には GPT パーティションにてインストールするようにします。そうすることで後々の苦労が半減します。
2TByte 超えの HDD をサポート或いはUEFIブートをサポートするマザーボードであれば、たぶん、もれなく GPT に対応しているはずです。
#今どきは MBR ではなく、GPT に技術トレンドが移っているようです。

さて、無事にインストールして、パスワードなどの初期設定が済むと、以下のようになります。
20140630_1.JPG

インストールしたマシンのHDDは 80GByte × 2 なので、どうにかしてディスクの増設をしたい。
以下の手順で追加できます。
ZFS だから、手順さえ判れば、UFS のHDD追加よりも簡単です。
先ず、お気に入り → コンソール で、CUI端末を開き、root になり、以下を実行します。
# gpart create -s GPT ada1

HDDデバイス ada1 に GPT パーティションレコードを生成します。
エラーになる場合は、
# gpart destroy -F ada1

として、パーティションを強制削除します。

# gpart add -t freebsd-zfs ada1

HDDデバイス ada1 に ZFS パーティションを作成します。
サイズを指定していないため、ディスク全体にZFSパーティションを生成します。

# zpool add tank ada1p1

ZFS のストレージプール名 tank にada1 の割り当て領域を追加します。
PC-BSD では、デフォルトの ZFS プール名に tank が使われています。
これだけで領域拡張完了です。

以下のように、領域が拡張したことがわかります。
20140630_3.JPG
但し、領域変更と削除は少し面倒です。

2014/06/26(木)tenki.jp のRSS サービスは 5/13 で終了していた・・

弊社サイトのトップページに表示していた札幌の天気予報ですが、
元データを引っ張ってくるのに tenki.jp の RSS フィードを使っていました。
#利用規約的には、グレーゾーンでした。

誰も指摘してくれませんし、色々と業務があるので、気付かなかったわけですが、
新たな取得元の目処が付いたところです。今度は利用規約的にも問題無し。
#表向き法人サイトだし、データ取得に全くカネかけられないとなると、途端に提供元が限られるのが日本の現状・・・

そのうち、公表できると思います。
以下は、今まで使っていた RSS フィードの天気コード一覧。
報道機関各位に気象情報を提供する際、このコードが使われているようです。

今回、目処をつけた取得元では、天気コードではなくて、文字列で来るらしい。
正直、面倒くさいです。取得するためには、こちらで当該電文処理を行うサーバアプリケーションを先に構築しないといけません。。それも中身がかなり複雑だが情報は豊富。
自分メモとして天気コードを張っておきます。

100 晴れ
101 晴れ 時々 曇り
102 晴れ 一時 雨
103 晴れ 時々 雨
104 晴れ 一時 雪
105 晴れ 時々 雪
106 晴れ 一時 雨か雪
107 晴れ 時々 雨か雪
108 晴れ 一時 雨か雷雨

110 晴れ のち時々曇り
111 晴れ のち 曇り
112 晴れ のち一時 雨
113 晴れ のち時々 雨
114 晴れ のち 雨
115 晴れ のち一時 雪
116 晴れ のち時々 雪
117 晴れ のち 雪
118 晴れ のち 雨か雪
119 晴れ のち 雨か雷雨
120 晴れ 朝夕 一時 雨
121 晴れ 朝の内一時 雨
122 晴れ 夕方一時 雨
123 晴れ 山沿い 雷雨
124 晴れ 山沿い 雪
125 晴れ 午後は雷雨
126 晴れ 昼頃から雨
127 晴れ 夕方から雨
128 晴れ 夜は雨
129 晴れ 夜半から雨
130 朝の内 霧 後 晴れ
131 晴れ 明け方 霧
132 晴れ 朝夕 曇り
140 晴れ 時々 雨で雷を伴う

160 晴れ 一時 雪か雨
170 晴れ 時々 雪か雨
181 晴れ のち 雪か雨
200 曇り
201 曇り 時々 晴れ
202 曇り 一時 雨
203 曇り 時々 雨
204 曇り 一時 雪
205 曇り 時々 雪
206 曇り 一時 雨か雪
207 曇り 時々 雨か雪
208 曇り 一時 雨か雷雨
209 霧
210 曇り のち時々 晴れ
211 曇り のち 晴れ
212 曇り のち一時 雨
213 曇り のち時々 雨
214 曇り のち 雨
215 曇り のち一時 雪
216 曇り のち時々 雪
217 曇り のち 雪
218 曇り のち 雨か雪
219 曇 り のち 雨か雷雨
220 曇り 朝夕一時 雨
221 曇り 朝の内一時 雨
222 曇り 夕方一時 雨
223 曇り 日中時々 晴れ
224 曇り 昼頃から雨
225 曇り 夕方から雨
226 曇り 夜は雨

227 曇り 夜半から雨
228 曇り 昼頃から雪
229 曇り 夕方から雪
230 曇り 夜は雪
231 曇り海上海岸は霧か霧雨

240 曇り 時々雨で 雷を伴う
250 曇り 時々雪で 雷を伴う
260  曇り 一時 雪か雨
270 曇り 時々 雪か雨
281 曇り のち 雪か雨
300 雨
301 雨 時々 晴れ
302 雨 時々 止む
303 雨 時々 雪
304 雨か雪

306 大雨
307 風雨共に強い
308 雨で暴風を伴う
309 雨 一時 雪

311 雨 のち 晴れ

313 雨 のち 曇り
314 雨 のち時々 雪
315 雨 のち 雪
316 雨か雪 のち 晴れ
317 雨か雪 のち 曇り


320 朝の内雨 のち 晴れ
321 朝の内雨 のち 曇り
322 雨 朝晩一時 雪
323 雨 昼頃から 晴れ
324 雨 夕方から 晴れ
325 雨 夜は晴
326 雨 夕方から雪
327 雨 夜は雪
328 雨 一時強く降る
329 雨 一時 みぞれ


340 雪か雨
350 雨で雷を伴う

361 雪か雨 のち 晴れ

371 雪か雨 のち 曇り
400 雪
401 雪 時々 晴れ
402 雪 時々止む
403 雪 時々 雨

405 大雪
406 風雪強い
407 暴風雪

409 雪 一時 雨

411 雪 のち 晴れ

413 雪 のち 曇り
414 雪 のち 雨





420 朝の内雪 のち 晴れ
421 朝の内雪 のち 曇り
422 雪 昼頃から雨
423 雪 夕方から雨
424 雪 夜半から雨
425 雪 一時強く降る
426 雪 のち みぞれ
427 雪 一時 みぞれ





450 雪で雷を伴う