follow us in feedly

2012年9月

MacのMySQLでrootパスワードを再設定する方法

今回はMacのMySQLでもrootパスワードを再設定することになりました。
前回のときにメモしといたから簡単にできるかなと思ったのですが、
あまり関係ないところでちょっとハマりました。

ちなみに、MacのMySQLはHomebrewを使ってインストールしています。
MySQLのバージョンは5.5です。

my.cnfを設定する

my.cnfに「skip-grant-tables」を追加します。
まずは、デフォルトの設定ファイルをコピーします。
自分用の環境だからどれでもいいかな、ということでmy-large.cnfにしています。

$ cp /usr/local/Cellar/mysql/5.5.19/support-files/my-large.cnf /usr/local/var/mysql/my.cnf

設定ファイルについては下記が参考になります。
my.cnfのデフォルト設定ファイル – Liquidfuncの日記

/usr/local/var/mysql/my.cnfに「skip-grant-tables」を追加します。

[mysqld]

skip-grant-tables

MySQLを再起動します。
自動起動がONなっている場合は「mysql.server stop」だけでいけます。
自動起動をOFFにする方法は下記補足を参照してください。

$ mysql.server stop
$ mysql.server start

新しいrootパスワードを設定する

MySQLサーバに接続して、新しいrootパスワードを設定します。

$ mysql -u root mysql
Enter password:

mysql> UPDATE user SET Password=PASSWORD('mynewpassword') WHERE User='root';
mysql> FLUSH PRIVILEGES;

/usr/local/var/mysql/my.cnfに記述した「skip-grant-tables」を削除して、
MySQLを再起動します。

$ mysql.server stop
$ mysql.server start

MySQLに接続できるか確認して完了です。

$ mysql -u root -p
Enter password:

補足: MySQLの自動起動をOFFにする

MySQLの自動起動はデフォルトではONになっているので自動起動をしない設定します。
自動機能の設定は起動スクリプトに記述します。
~/Library/LaunchAgents/homebrew.mxcl.mysql.plistの「KeepAlive」を「false」に変更します。

変更前:
<key>KeepAlive</key>
<true/>

変更後:
<key>KeepAlive</key>
<false/>

launchctlコマンドを実行してスクリプトを再読み込みすれば、自動起動がOFFになります。

$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

tmuxで lanchctl load を実行するとエラーになる

launchctlコマンドを実行しするところでエラーが出ました。
Bugとか言ってる。

$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Bug: launchctl.c:2425 (25957):13: (dbfd = open(g_job_overrides_db_path, O_RDONLY | O_EXLOCK | O_CREAT, S_IRUSR | S_IWUSR)) != -1
launchctl: Error unloading: homebrew.mxcl.mysql

loadでやってみても同じ。

$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Bug: launchctl.c:2425 (25957):13: (dbfd = open(g_job_overrides_db_path, O_RDONLY | O_EXLOCK | O_CREAT, S_IRUSR | S_IWUSR)) != -1
launch_msg(): Socket is not connected

調べてみると下記を見つけました。
Mac OS Xのtmux内でlaunchctl load -w したらBug: launchctl.c:2406 (25182):13:って怒られるよねって話: 麦汁三昧

tmuxを使っていると上手く動かないみたいです。
tmuxの外で実行したらできました。

MySQLで一般クエリログを取得する方法

MySQLで一般クエリログを出力する方法のメモ。
一般クエリログはMySQLへの接続や切断、SQLなどを記録します。
設定方法は、オプションをつけて起動する方法とシステム変数で設定する方法があります。

Railsなどのフレームワークではログを取れますが、
フレームワークは使わないとかMySQLでログを取りたいとかあるかもしれない。

MySQLの起動スクリプトにログのオプションを設定する

/etc/rc.d/init.d/mysqldを編集します。
起動時に –log というオプションを使用するようにします。
クエリログの出力先を指定することもできます。
MySQLを再起動するとクエリログが有効になります。

$exec --datadir="$datadir" --socket="$socketfile"
      --log=/var/log/mysql/mysql.log --pid-file="$mypidfile"
      --basedir=/usr --user=mysql >/dev/null 2>&1 &

グローバルシステム変数でクエリログを設定する

MySQLサーバに接続して、下記を実行すればクエリログが有効になります。
この方法であれば、MySQLを再起動する必要はないです。
MySQL 5.1.12以降でしかできません。

mysql> use mysql;
mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/log/mysql/mysql.log';

general_logでクエリログの有効化/無効化を指定します。
general_log_fileでクエリログの出力先を指定します。

以上です。

MySQLのrootパスワードを再設定する方法

MySQLのrootパスワードを忘れてしまって再設定しました。
以前にも同じことをしてるので、次から調べずにすむようにメモしておく。
MySQLのバージョンは5.1です。

MySQLを停止する。

# /etc/init.d/mysqld stop

/etc/my.cnfに「skip-grant-tables」を追加する。

[mysqld]

skip-grant-tables

MySQLを起動する。

# /etc/init.d/mysqld start

MySQLサーバに接続して、新しいrootパスワードを設定する。

# mysql -u root mysql
Enter password:

mysql> UPDATE user SET Password=PASSWORD('mynewpassword') WHERE User='root';
mysql> FLUSH PRIVILEGES;

MySQLを停止する。

# /etc/init.d/mysqld stop

/etc/my.cnfに記述した「skip-grant-tables」を削除して、MySQLを起動する。

# /etc/init.d/mysqld start

MySQLに接続できるか確認して完了。

# mysql -u root -p
Enter password:

パスワードを忘れるとめんどうですね。