「データベース」と一致するもの

やっと動いた

やっと動きました。。。
MovableTypeが動かなくて、かなり手こずりました。

事の発端はUbuntu Serverを12.04LTSから14.04LTSにアップグレードしたことですが。

Apacheが2.4に上がってたり、
Perlが5.18に上がってたり、
PHPが5.5に上がってたりして、
MovableType5が動かなくなってしまいました。

はい。

仕方無いのでMovableTypeを6に上げて、

Apache直して、MovableTypeのphp/extlib/smarty/libs/Smarty_Compiler.class.phpも

/* replace special blocks by "{php}" */ /* 修正後 */ $source_content = preg_replace_callback($search, create_function ('$matches', "return '" . $this->_quote_replace($this->left_delimiter) . 'php' . "' . str_repeat(\"\n\", substr_count('\$matches[1]', \"\n\")) .'" . $this->_quote_replace($this->right_delimiter) . "';") , $source_content);

/* 修正前
$source_content = preg_replace($search.'e', "'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"
, $source_content);
*/

という感じで直して、、、やっと動いたところです。

MovableTypeはバージョンアップする度に全てのテンプレートを一度リセットしないと、どこかに綻びが出てしまうのが悩ましいところですね。いっそのこと全部データベースに持ってくれて、アップデートしても影響無いようになっていると嬉しいのですが。

# まだまだ、あっちこっち死んでる気がするけど。

サーバのバックアップ

先日自宅サーバの障害復旧で面倒な目に遭ってしまったので、色々と見直し。。。


まずサーバのバックアップ

反省。定期的に取りましょう(^^; 少なくともバージョンアップ前には・・・

  • ディザスタリカバリ:無し→Acronisでイメージバックアップ(外付けHDDにバックアップ)
LVMだったのでスナップショットに頼り切っていて、バックアップを怠っていたので
  • ファイルシステム:LVM→Ext3
Acronisでイメージバックアップが取れるようにExt3を使用することに
  • スナップショット:LVMスナップショット→cronとdumpとtarで地味にバックアップ
ということで、スナップショットは便利だけど捨てて、地味に昔ながらのファイルバックアップを行う事に。

Acronis True Image Home (面倒臭くて2009しかインストールしてなかったのだけど、Home2010のライセンスは買ってあったので)なんて久しぶりに使ったのだけど、簡単にUSBブート出来るようになってたりしていて、地味に便利になっている。

あと、スナップショットは便利だけど、スクリプト組んでファイルバックアップを行う方法は昔ながらのノウハウで色々出来て楽っちゃ楽。

バックアップだけをみると、MacOSXのTime MachineはGUIで簡単にスナップショットから好きなファイルだけ抜いてこれる上、ディザスタリカバリにも対応できる点が良いかな。Windows7の標準バックアップも賢いようだけどまだ使ってみてない。地味にWindows2008のServer BackupはディザスタリカバリにDVDからの復旧が使えるようになってたり良くなってる。何にせよ問題になるのがデータベースのバックアップ。スナップショットだろうとファイルでバックアップを行う方法だろうと、データベースの不整合から逃れる術は無くて、結局データベースの停止を行ってダンプしてファイルにバックアップするか、オープン中のファイルをバックアップできるソリューションを使う必要が有るのだけど。


データベース(MySQL)のバックアップ

結局完全なバックアップは難しいのでファイルへのダンプと、データベースのクラスタを併用することに。
  • ファイルへのダンプ
mysqldumpでフルダンプ。テキストファイルに吐き出しておく。

/usr/bin/mysqldump -x -A -u データベースのユーザ --password='パスワード' --opt > /var/db-backup/DB-dump.`/bin/date +'%Y%M%d%k%M'`
gzip /var/db-backup/DB-dump.`/bin/date +'%Y%M%d%k%M'`

とか、そんな感じのシェルスクリプトを作ってcronで定時実行する。

  • MySQLのレプリケート
まずマスターサーバ側でネットワークソケットを空けたり、bin-log取ったりと、クラスタ化の準備。

/etc/mysql/my.cnfに
[server]
server-id        = 1
log-bin
を追記。

データベースに設定を反映させるために再起動する
(Slave)# sudo service mysql restart

レプリケート用にREPLICATION SLAVE権限を与えたユーザを作っておく。
mysql(Master)> GRANT REPLICATION SLAVE ON *.* TO repl@10.0.0.2 IDENTIFIED BY 'password';
データベースの更新をストップして
mysql(Master)> FLUSH TABLES WITH READ LOCK;
バイナリログを確認(スレーブで同期させるときに必要な情報)
mysql(Master)> SHOW MASTER STATUS;
+-----------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+--------------+------------------+
| dbsv-bin.000001 |       79 |              |                  |
+-----------------+----------+--------------+------------------+
1 row in set (0.00 sec)

スレーブ側にコピーする為にデータベースのダンプを取る
(Master)# tar zcf backupfile.tar.gz /var/lib/mysql/
(取ったファイルはスレーブ機にコピーする)
ファイルが取れたのでデータベースの更新を許可
mysql(Master)> UNLOCK TABLES;

別のホストでスレーブサーバを立てて、レプリケートを行う。

データベースを停止して
(Slave)# sudo service mysql stop

スレーブの設定を記述する
/etc/mysql/my.cnfに
[server]
server-id        = 2
を追記。

データベースに設定を反映させるために再起動する
(Slave)# sudo service mysql restart

マスターで採取したファイルを解凍&展開
(Slave)# cd /
(Slave)# tar zxf backupfile.tar.gz

データベースを動作させて
(Slave)# sudo service mysql start

マスターとの同期情報を設定して
mysql(Slave)> CHANGE MASTER TO
MASTER_HOST='10.0.0.1',  ← マスターのホスト名/IPアドレス
MASTER_USER='repl', ← マスター接続に使用するユーザー名 MASTER_PASSWORD='password', ← パスワード MASTER_LOG_FILE='dbsv-bin.000001', ← さっきマスターで確認したファイル MASTER_LOG_POS=79; ← さっきマスターで確認した位置

同期を開始させる
mysql(Slave)> START SLAVE;

こんな感じでMySQLのファイルダンプと、MySQLのレプリケーションを設定した。
レプリケーションは冗長目的なので、あくまで受け身の同期でしかない。selectとかの検索系のクエリは使えるけど、insertとかupdateとかの更新系のクエリは使えない(というかマスターに反映しない)。けど、必要が有ればスレーブ側のデータベースを停止させればデータベースのフルバックアップが取れるし、スレーブ側のデータベースを再開させれば、またマスターとの同期が行われる。
検索系のクエリを分散させれば、一応データベースの負荷分散にもなるのだけど、そもそも負荷の問題は無いし、目的が違うので気にしない。
MySQLのレプリケーションについては公式サイトにある情報(http://dev.mysql.com/doc/refman/5.1/ja/replication.html)で必要な情報は揃えられる。SQL ServerであればMSDN(http://msdn.microsoft.com/ja-jp/library/ms187048.aspx)か?

という事で、やっとデータのバックアップとかするようになりました。

ブログサーバお引っ越し

ずっとですが、Coreserverの負荷が高くて使いにくかったので、サーバを引っ越ししてしまいました。 引っ越しそのものもかなり面倒だったし、引っ越し先のサーバくんもかなり非力ですが、固定IP、サーバ証明書付き、ユーザー数1という環境に移ることが出来ました。引っ越し先は自分のサーバです。

細かい設定は先日のMovableTypeのバージョンアップでかなり省略していましたのでMovable Typeとしてはほぼ新規の環境を構築して、それに記事のデータベースや、画像などのデータをコピーして完了・・・という。

まずハマリどころだったのが、Ubuntu ServerのPerlです。
いつものようにCPANに行ってImage::Magickをインストールしようと

# perl -MCPAN -e shell
cpan[1]> install Image::Magick
などとやってみたんですが、makeでこけて入りません(T_T
色々やってみたんですがどうにも入らなくて最終的にはパッケージから入れました。

# apt-get install perlmagick

何となく気持ち悪いのですが。仕方無いですね。


Win32::ODBCを弄ってみる

  • 投稿日:
  • by
  • カテゴリ:
ActivePerlからMySQLを使いたかったんですが・・・以前Linux/UNIX環境ではDBIとDBD::MySQL使ってやったのですが、今回は別の方法を採ることにしました。ActivePerl用のDBD::MySQLのPPMパッケージも存在するのですが、今回は既存の環境があってその上で動かさなきゃならないという制約もあったし、インターネットへの接続も出来ない。その上、インストール作業自体も出来るだけ簡単に行えるようにする必要があったので、Windowsへインストールするものはインストーラが用意されているものを中心に選ぶことにしました。幸いMySQLのODBCコネクタならmsi形式のインストーラも準備されているし、ActivePerlの配布パッケージにもWin32::ODBCが含まれているので、ODBCコネクタ、MySQLとActivePerlをGUIからインストールするだけで環境を整える事が出来そうです。そんな訳でMySQLのODBCコネクタをインストールして、PerlからWin32::ODBC経由でMySQLを使うことにしました。使いかた自体にさほど差はないのですが、データベースとの接続部分はODBC側の設定になるのでPerl上で設定すべき項目が少ないのは便利かも知れません。

DelphiとかOracleとかのネーミング、あまりに同一路線だとか思ったけど
デルファイの神託によると
そもそもDelphi(言語)はOracle(データベース)のフロントエンドとして利用して欲しかったらしい。

さて,データベースといえばオラクル(Oracle),「オラクル,ミラクル」言われるぐらい有名であるが,考えてみればかなり大胆な名前であ る.Delphiは開発当初,Oracleのフロントエンドとして利用してもらおうという計画があった.そこで,Oracleに最も関係のある都市名であ るDelphiという名前になったという.このDelphiは,実は開発コード名であったが,当時の社長の発言で,そのまま製品名となったそうであ る.The Oracle at Delphiは,発売当初のコピーである.

個人的にはPascal系の言語には全く手を出していないので、さっぱり訳ワカンナイんだけど、未だにDelphi使いも多いようで、Delphiのライブラリに感染するウイルスが猛威を振るっているよう。

 (株)ベクターは23日、同社が運営するソフトウェアライブラリ"ベクター"で公開されていたソフトの一部が、"W32/Induc-A"などと 呼ばれるウイルスに感染していたことを公表した。24日現在、当該ソフトのダウンロードは停止されており、同社サイトでは対象となるソフトや、ウイルスの 駆除方法などの情報が公開されている。

 感染が確認されたのは、以下の7ソフトの下記バージョン。

  • 「BellTheCat」v3.60/3.61/3.62
  • 「BOB」v3.22
  • 「CLips」v8.61
  • 「HiG(BeS Tools)」v4.00
  • 「kOSU」v1.41/1.42
  • 「OSPE」v4.20/4.21
  • 「壱番館」v7.82/7.83

  また、「PickBack」「PickBack2」、および6月16日から8月5日まで公開されていた「Wise Disk Cleaner 4 Free」「WiseRegistryCleanerFree」の旧バージョンにも感染の疑いがあり、ダウンロードが停止されている。

 同社では引き続き、過去に公開していたソフトの再検査を実施中とのこと。上記ソフトをダウンロードしたことがある方はもちろん、そうでない方もこの機会にパソコン全体のウイルスチェックを行うことをお勧めする。

  今回、感染が確認された"W32/Induc-A"は、開発環境「Delphi」v4/5/6/7を通じて感染を拡大するウイルスで、感染した 「Delphi」でプログラムをコンパイルすると、作成されたプログラムも感染する仕組み。「Delphi」でプログラムを開発されている方はとくにご注 意いただきたい。


Delphiと言えば、Windowsの開発環境としては人気のある存在。M$謹製のVisual Basicと比べるとソフトウェアの配布時のライブラリの制限だとかが少ない事や、開発環境そのものの出来の良さなどは以前から聞く話だし、それなりに興味はあるのだが・・・。今更Pascal(Delphiは言語としてはPascalの系譜)に手を出してみようとは思わないし・・・。