MacでWebアプリ開発環境を作ろうとする時、手軽に始められるのでユーザーも多いMAMP。
Apache(Webサーバ)・MySQL(SQLデータベースサーバ)・Webプログラミング言語のPHP・MySQL管理ツールのphpMyAdmin・SQLiteなど、いくつかの補助的なソフトウェアとライブラリモジュールを、まとめて一発でMacにインストールできちゃうという優れものです。
Macintosh, Apache, MySQL, PHPの頭文字 を並べてMAMPっちゅうわけです。
世間的には、Webプログラミング言語のPerlもセットされていて、WindowsでもMacでもLinuxでも使えるXAMPPの方が有名で、ユーザーも多いんですが、私はもっぱらMAMPを使っています。
Index
MAMP ver 2.1.3にバージョンアップしたが・・・
さて、ここから本題。
サイトを置いているレンタルサーバが皆PHP 5.4を使える様にしてくれたので、自分のローカル環境でもPHP 5.4がテスト出来る様にと、MAMPを2.1.3にバージョンアップしました。
まず、今まで使っていたMAMPをフォルダごとApplicationsフォルダ外に退避させ、新たにMAMP ver 2.1.3をインストール(デフォルトでApplicationsフォルダにインストールされます)します。
そして新しくインストールされたMAMPフォルダから「db」フォルダと「htdocs」フォルダはゴミ箱へ移動させます。
代わりに古い方のMAMPフォルダから「db」フォルダと「htdocs」フォルダを新しいMAMPのフォルダに移動させ、今まで作った実験サイトやアプリを丸ごと引っ越しさせます。(「db」フォルダにはMySQLとSQLiteのデータが、「htdocs」フォルダには自分が作成したサイトを構成する各ファイルやWebアプリのファイルが入っとります。)
これでバージョンアップは完了。MAMP.appを起動させ、localhost内の実験サイトにアクセス・・・としたところ、MAMPのMySQLサーバが立ち上がらない!
前回、MAMPを終了させた時、MySQLサーバが停止されないままになっていて、一部のプロセスが終了せずに残っていた時、こんな現象が起るんですよね。(と、またなっちゃったかと思う自分)
まずはKillall -9 mysqldなのだ
この場合はターミナルを使い、MySQLサーバの全てのプロセスを一旦終了させる為
1 |
killall -9 mysqld |
を実行します。
ターミナル画面上では、
1 |
自分のコンピュータ名:~ ログイン名$ killall -9 mysqld |
となります。
killallは「プロセス名を指定してプロセスを終了させる」。–は「オプションの意味」で、9が付くと「Killシグナルによるプロセスの終了」。mysqldは「MySQLサーバのプロセス名」という事です。
これを実行しようとターミナルを起動させると、想定外のターミナルのトラブル発生です。bashのコマンドが見つからないと、ターミナルでエラーメッセージが出ます。MAMPのメンテナンス以前にターミナルのメンテをしなくちゃ。
これはbashのPATHがおかしくなっていたので、これを片付けて(詳細はこちら→ターミナルで-bash: 1: command not foundが出た。→PATHがおかしいんでしょ)、ターミナルで
1 |
killall -9 mysqld |
を試してみたんですが、
No matching processes belonging to you were found(そんなプロセスはないよ)
との返答です。つまりMySQLサーバは起動していない→終了しているって事です。MySQLサーバが起動できない原因は別に有る様です。
MySQL ver 5.5からは’default-charactor-set’は’character-set-server’に
となると、まずMAMPを起動させた時のMySQLの状態をチェックしなければなりません。MySQLのエラーメッセージを調べてみます。
MAMPのMySQLのlogは、MAMP > logs > mysql_error_log.errに有ります。
unknown variable ‘default-charactor-set=utf8’(default-charactor-set=utf8という宣言されていない変数がある)というエラーメッセージが出ています。
MySQLの起動時に、初期設定ファイルから設定を呼び込む時、未宣言の変数’default-charactor-set=utf8’がファイルに有ったという事ですね。
MAMPがバージョンアップすると共に、その中のMySQLのバージョンもアップしている筈です。
調べてみると、MAMP2.1.3のMySQLのバージョンは5.5.29でした。バージョンアップによる変更点を調べてみると、バージョン5.5では今迄使っていた変数’default-charactor-set’は使えなくなり、代わりに’character-set-server‘を使えとの事。
1.4. What Is New in MySQL 5.5 – MySQL
MAMPのMySQLの初期設定ファイルは、MAMP > db > mysql > my.cnfにありますが、このmy.cnfの[client]と [mysqld] セクション(グループ)に記述した
1 |
default-charactor-set = utf8 |
を
1 |
character-set-server = utf8 |
に変更・保存して、MAMPを再起動させます。
しかし、まだMySQLは起動しません。
my-medium.cnfを使ってmy.cnfを初期化する
エラーメッセージを開くと、
found option without preceding group in config file(初期設定ファイル内の先のグループにないオプションが見つかった)
と言う警告になっていますが、ちょっと意味が判り難いですね。
MySQLの初期設定ファイルmy.cnf内には[client]・ [mysqld] ・[mysqldump]・[mysql]・ [mysqlhotcopy] のグループ(セクション)毎にオプションの設定をまとめて記述する様になっています。
my.cnf中のグループの中に、他のグループとは違オプションが有るという事です。
見落とし箇所が有る様なので、とりあえずmy.cnfをMySQL ver 5.5.29用のもので初期化し、そこから文字コードの設定をした方が間違いがなさそうです。
my.cnfをver 5.5.29用に初期化するには、my.cnfの中身を消去し、
MAMP > Library > Support-file > my-medium.cnf
の中身をコピーしてやるだけでいいです。
初期化後、[client]と [mysqld] セクション(グループ)に
1 |
character-set-server = utf8 |
を付け加えてやります。
さて、これでMAMPを再起動させればMySQLも起動するだろうと思ったんですが、またもや起動せず。
mysql_upgradeするんですね
エラーメッセージは、
please run mysql_upgrade to create it(mysql_upgradeして下さい)です。
MySQLのバージョンがアップしたから、以前のデータベースのシステムテーブルのmysqlプロキシーが無くなったので、それを作る為にmysql_upgradeするってことですか。
具体的なやり方は、
MAMP PRO, MySQLをアップグレード – biginsprite log
で紹介されていました。ターミナルを使わなくても、簡単な方法で出来るんですね。
私の使っているのはPRO版じゃない無印のMAMPなんですが、メニューバーのTools > Upgrade MySQL databasesを選択し、
出てきたウインドウ下部の「Upgrade」ボタンをクリックすとmysql_upgradeできます。
さあこれでMySQLも起動できるでしょうと、MAMPを再起動させます。
やっとこさ、MySQLを起動させられました。時間がかかりましたー。
参 考
エラーメッセージ – unknown variable ‘default-charactor-set=utf8’で悩まされた人が多いんですね。
[MySQL] “[ERROR] /usr/libexec/mysqld: unknown variable ‘default-character-set=utf8″の対処法 – DQNEO起業日記
でも、解決の過程を丁寧に書かれています。
いきなりローカル環境のMySQLがStartしなくなって焦ったのですが、こちらのページにある「Killall -9 mysqld」したら速攻で直ってめっちゃ助かりました。ありがとうございます!
コメント、ありがとうございます。
DBはたまにトラブルを起こしますが、どこから手をつけたらいいのか分かり難いですよね。
投稿記事がお役に立てて良かったです 。
色々情報を投稿していきますので、よろしければ、またご覧ください。