MAMP PRO, MySQLをアップグレード

時々起動に失敗する我が家のMAMP PROのMySQL。
停止して開始にしたら起動したりするのでそのまま使ってたけど、気持ち悪いのでログを見ることにしました。

出てる出てる。
[ERROR]の文字がたくさん…

please run mysql_upgrade to create it
らしいのでアップグレードすることに。

MAMP PROはエライ。
ちゃーんとメニューを用意してくれていました。

ツール -> MYSQL データベースをアップグレード

データーベースをバックアップしましょうねの警告つきです。
DBをさわる時は手を抜かずにダンプしておきましょう。

[ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it
[ERROR] Native table 'performance_schema'.'events_waits_current' has the wrong structure
[ERROR] Native table 'performance_schema'.'events_waits_history' has the wrong structure
[ERROR] Native table 'performance_schema'.'events_waits_history_long' has the wrong structure
[ERROR] Native table 'performance_schema'.'setup_consumers' has the wrong structure
[ERROR] Native table 'performance_schema'.'setup_instruments' has the wrong structure
[ERROR] Native table 'performance_schema'.'setup_timers' has the wrong structure
[ERROR] Native table 'performance_schema'.'performance_timers' has the wrong structure
[ERROR] Native table 'performance_schema'.'threads' has the wrong structure
[ERROR] Native table 'performance_schema'.'events_waits_summary_by_thread_by_event_name' has the wrong structure
[ERROR] Native table 'performance_schema'.'events_waits_summary_by_instance' has the wrong structure
[ERROR] Native table 'performance_schema'.'events_waits_summary_global_by_event_name' has the wrong structure
[ERROR] Native table 'performance_schema'.'file_summary_by_event_name' has the wrong structure
[ERROR] Native table 'performance_schema'.'file_summary_by_instance' has the wrong structure
[ERROR] Native table 'performance_schema'.'mutex_instances' has the wrong structure
[ERROR] Native table 'performance_schema'.'rwlock_instances' has the wrong structure
[ERROR] Native table 'performance_schema'.'cond_instances' has the wrong structure
[ERROR] Native table 'performance_schema'.'file_instances' has the wrong structure

MAMP, MySQLの起動エラーに対処

MAMPのMySQLが突然起動しなくなった。

mysql_error_log.err を見るとInnoDBが起動できないのが原因の様子。

[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

dbフォルダにあったlib_logfile0とlib_logfile1を捨ててたら起動できた。
なんでかな。

PHP, PDOでMySQL接続時の文字コード設定

MySQL接続時に文字コード"utf-8"を指定したい – だって文字化けするんだもんの巻。

"SET NAMES `utf8`" は使っちゃダメよと大垣さんがおっしゃってたのでこれは使わない。
代わりに mysql_set_charset('utf8'); を使うらしいのだけどPDOでは使えない模様。

で次のようにして解決しました。

try {
    $pdo = new PDO($db_dsn,$db_user, $db_password,
        array(
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"
        )
    );
} catch (PDOException $e) {
    die($e->getMessage());
}

Google先生にお聞きしてあっちこっちのサイトのコードを試したのでどちらが出典なのか記録を取っておらず不明です、ごめんなさい。

これだったかも
PHP Document
http://php.net/manual/ja/ref.pdo-mysql.php
Davy Defaud氏のコメント。

MAMP, アップグレードのためのメモ

MAMPはダウンロードしたMAMPフォルダを単純にアプリケーションフォルダへコピーするだけでインストールが完了します。
そのため、旧ファイルはすべて上書きになるので以前のデータ、特にデータベースをバックアプしないと悲しいことが起きます。

DBデータのバックアップも単純な上書きコピーで行えるので、ダンプを取ってRestoreなどの手順はいりません。

旧MAMPフォルダのdbフォルダをフォルダごとバックアップします。
デスクトップなどへ移動すればいいでしょう。

新MAMPをダウンロードしアプリケーションへコピーします。
「置き換える」と警告がでてもそのまま続けて構いません。

コピー後にMAMPフォルダへバックアップしたdbフォルダをコピーします。
これも置き換えてください。

MAMPを起動すると「データベースをアップデート」する旨のメッセージがでます。

これで、旧DBデータを引き継いだMAMPアップグレードが完了です。

*この手順は自分のメモのために書いたものです。データを保証するものではありません。トラブルが発生しても保証はできません。作業される場合はオウン・リスクでお願いします。

update
MAMP ヘルプファイルに同じことが書いてありました。

Procedure 1 MAMP update
1. Rename the current program folder MAMP to MAMP_OLD
2. Load the installation image of MAMP from http://mamp.info and open it
3. Drag the MAMP folder from the installation image to your “Applications“ folder
4. Copy the directories “htdocs” and “db “ from your MAMP_OLD folder into the
MAMP folder. It contains your personal HTML files and database contents.
Overwrite the folders in the new MAMP folder
5. Check whether all data has been transferred correctly
6. The MAMP_OLD folder can now be deleted. You may however keep it, so you can
fall back to your original setup

Apacheのdocument folderを htdocs にしている時はこれも上書きコピーね。

MAMPをアップグレードする時 PEAR ライブラリもバックアップとるといいよ

XAMPP for OS X

Max OS X 10.5.8 へサーバー環境構築メモ。

サーバー環境は XAMPP をインストール。

1.7.2aをインストール。
Document root の htdocs のパーミッションが適切でなくファイルやフォルダが作れない。
everybody に read / write を許すとフォルダやファイルは作成できるようになる。

php.ini の Error Reporting を E_ALL に変えると XAMPP の初期画面が表示できなかった。
MAX Upload file サイズを 128M から 2M に変えると phpMyAdmin が動かない。

手始めに WordPress 2.8.6 をインストール。
パーミッションのせいだと思うけど wp-config.php が作成できない。
手動で設定した後インストール完了。

これもパーミッションのせいだと思うけどテーマやプラグインの自動インストールができない。

XAMPP のファイルが入っているフォルダ (xamppfiles) の権限やオーナーを変えると phpMyAdmin が動作できなくなる。

アンインストールして 1.0.1 に変更。
htdocs のパーミッションに変な設定はされていないので、普通にファイルやフォルダは作れる。

WordPress 2.8.6 をインストール。
wp-config.php が作成できない。
Wordpress インストールディレクトリのパーミッションを 777 へ。
別に 777 でなくてもと思ったけど・・・

インストールはできたけどテーマやプラグインの自動インストールはやっぱりできない。
ServerRoot の xamppfiles が原因ぽいなぁー。

MAMP に比べて XAMPP は使い勝手がイケテナイ気がする。
こちらの知識が足りないせいだけなのですが・・・

どうしてもパーミッションの問題が解決できなくて、使わないことにした。
残念ながら XAMPP for OS X をセットアップできなかった。
悲しい記録。。

MAMP+PerlでMovableTypeをインストールするためにゴニョゴニョしました

MAMP で MovableType をインストールには Perl 環境をセットアップしないとダメ。

MAMP で Perl を使おうとすると超面倒くさい。
まず GD, ImageMagic 環境をつくるのが1回でできた試しがない。
Perl の DBI ドライバ DBD::mysql のインストールが毎回苦労する。

今までに4台はセットアップしてきたけどそのつど記録も取らず次にいかせてない。
今回アップデートされたばかりの OS X 10.5.7 へセットアップしたので覚えている限りのことをメモしとく。
残念ながら今回も記録はない、記憶していることだけ・・・
“MAMP+PerlでMovableTypeをインストールするためにゴニョゴニョしました”の続きを読む

MySQL SET NAMES でSQLインジェクションに脆弱

セキュリティに関することで参考にしている大垣 靖男さんのブログの少し古いエントリーの紹介です。

2007-08-22 SET NAMESは禁止

MySQLには文字エンコーディングを変更する「SET NAMES」SQL文が用意されています。(PostgreSQLも同様のSQL文、SET CLIENT_ENCODINGがあります)この機能はSQLコンソールからは使ってよい機能ですが、アプリケーションからは使ってはならない機能です。SQLインジェクションに脆弱になる場合があります。

少々衝撃でした。
文字エンコーディング変更に SET NAMES を使うのは良く例示されている解決策だったからです。
今でも EUC 運用の MySQL は数多く存在し UTF-8 でアプリケーションを構築したいことは良くあります。

PHP では

mysql_set_charset('utf8');

が使えるなら使った方が良いことになるのかと、エントリーを見て思いました。

mysql_set_charset は PHP 5.0.7 以降で使用できます。

PHP のドキュメントにもちゃんと注意として書かれていました。
http://jp.php.net/manual/ja/function.mysql-set-charset.php

注意: 文字セットを変更するにはこの方法を使うことを推奨します。 mysql_query() で SET NAMES .. を実行する方法はお勧めできません。

心に刻んでおかなければ、と思った重要な記事の1つです。