文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

macでMySQL5.6をインストールするとportが3307になっている件

なんで3306じゃないんですかねえ・・


f:id:treeapps:20180418131549p:plain

今日ふと気づいたのですが、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」になりました!