なんで3306じゃないんですかねえ・・
今日ふと気づいたのですが、macでMySQLのオフィシャルサイトからver5.6のDMG形式のインストーラをDLしてインストールすると、ポートがデフォルトで3307で起動してしまうんですよね。
気付かずにJDBCドライバでローカルのMySQLに接続しようとすると、当然以下のようになる訳です。最初はこのエラー見ても????な感じでした。まさかportが3306でなく3307になってるとは思いませんでした。
Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: java.net.ConnectException: Connection refused STACKTRACE: java.net.SocketException: java.net.ConnectException: Connection refused at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:276) at com.mysql.jdbc.Connection.createNewIO(Connection.java:2641) at com.mysql.jdbc.Connection.<init>(Connection.java:1531) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266) at java.sql.DriverManager.getConnection(DriverManager.java:582) at java.sql.DriverManager.getConnection(DriverManager.java:154)
ちなみに/etc/my.cnfにはclientもserverもport=3306で設定してるのですが、mysqldの起動オプションにport=3307が自動的に入ってしまうので、my.cnfに書いたポートは無視されてしまいます。
ということで、macのローカルのMySQLをport3306で起動する手順をまとめます。
手順
現在のport設定を確認する
# portを確認する $ defaults read /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <false/> <key>ExitTimeOut</key> <integer>600</integer> <key>GroupName</key> <string>_mysql</string> <key>KeepAlive</key> <true/> <key>Label</key> <string>com.oracle.oss.mysql.mysqld</string> <key>LaunchOnlyOnce</key> <false/> <key>ProcessType</key> <string>Interactive</string> <key>Program</key> <string>/usr/local/mysql/bin/mysqld</string> <key>ProgramArguments</key> <array> <string>/usr/local/mysql/bin/mysqld</string> <string>--user=_mysql</string> <string>--basedir=/usr/local/mysql</string> <string>--datadir=/usr/local/mysql/data</string> <string>--plugin-dir=/usr/local/mysql/lib/plugin</string> <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string> <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string> <string>--port=3307</string> </array> <key>RunAtLoad</key> <true/> <key>SessionCreate</key> <true/> <key>UserName</key> <string>_mysql</string> <key>WorkingDirectory</key> <string>/usr/local/mysql</string> </dict> </plist>
↓この部分です。
<string>--port=3307</string>
この設定だと環境設定のMySQLペインから起動すると、起動オプションに--port=3307が入ってしまいます。
バックアップを取っておく
後で戻せるようにバックアップを取っておきます。
$ sudo cp /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist.bk
MySQLを停止する
環境設定のMySQLペイン等からMySQLを停止させます。
mysql.mysqld.plistをxmlに変換する
mysql.mysqld.plistはバイナリなので、xmlに一旦変換します。
$ sudo plutil -convert xml1 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
mysql.mysqld.plistを編集する
バイナリからxmlに変換したので、エディタで普通に編集できるようになったので、「--port=3307」を「--port=3306」に変更します。
$ sudo vi /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Disabled</key> <false/> <key>ExitTimeOut</key> <integer>600</integer> <key>GroupName</key> <string>_mysql</string> <key>KeepAlive</key> <true/> <key>Label</key> <string>com.oracle.oss.mysql.mysqld</string> <key>LaunchOnlyOnce</key> <false/> <key>ProcessType</key> <string>Interactive</string> <key>Program</key> <string>/usr/local/mysql/bin/mysqld</string> <key>ProgramArguments</key> <array> <string>/usr/local/mysql/bin/mysqld</string> <string>--user=_mysql</string> <string>--basedir=/usr/local/mysql</string> <string>--datadir=/usr/local/mysql/data</string> <string>--plugin-dir=/usr/local/mysql/lib/plugin</string> <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string> <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string> <string>--port=3306</string> </array> <key>RunAtLoad</key> <true/> <key>SessionCreate</key> <true/> <key>UserName</key> <string>_mysql</string> <key>WorkingDirectory</key> <string>/usr/local/mysql</string> </dict> </plist>
mysql.mysqld.plistをバイナリに変換する
xmlの修正が完了したので、バイナリに戻します。
$ sudo plutil -convert binary1 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
MySQLを起動する
環境設定のMySQLペイン等からMySQLを起動させます。
起動したmysqldのportを確認する
psコマンドで確認してみます。
$ ps -ef | grep mysqld 74 44919 1 0 1:08PM ?? 0:00.42 /usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid --port=3306
「--port=3306」になりました!