LoginSignup
6
7

More than 5 years have passed since last update.

mySQL Root Password Reset

Last updated at Posted at 2014-02-21

Goal

* mySQLの再インストールせずにrootパスワードをリセットする

Preparation

* mysqld稼動サーバのroot権限を持っていることが前提
## 
## 実行環境情報
## 

$> uname -a
Linux *** 2.6.32-358.14.1.el6.x86_64 #1 SMP Tue Jul 16 23:51:20 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$> cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m
$> which mysqld
/usr/local/mysql/bin/mysqld
$> whoami
root

## Check Shell
$> set | grep -i version
BASH_VERSION='4.1.2(1)-release'

## mysqld version
mysql> select version();
+-----------+
| VERSION() |
+-----------+
| 5.6.10    |
+-----------+

Manual

Milestone
* 起動しているmysqlを一旦ストップしてskip-grant-tablesオプション付きで再起動する
** これによって、パスワード認証スキップでログイン可能状態にする
* mysqlのrootユーザでログインする
* mysqlデータベースuserテーブルのレコードをupdateしてパスワードを変更する
* mysqlの起動モードを元に戻して起動し直す

Stop mysqld

## Stop
/etc/init.d/mysqld stop
  # Or : HOSTNAME=`hostname`; kill `cat /usr/local/mysql/data/${HOSTNAME}.pid`
  # ps -ef | grep mysqld : --pid-fileでpidファイル確認できる

Start mysqld with option(skip-grant-tables)


## 
## skip-grant-tablesオプションを指定してmysqldサーバを起動することで、
## mysqlログイン時のHost/Userチェックを無視させることができる
## /etc/my.cnfの[mysqld]ブロックにオプションを追加して通常起動させる方法が確実
## 

grep 'skip-grant-tables' /etc/my.cnf
  # option追加を確認

## Start
/etc/init.d/mysqld start
ps -ef | grep mysqld
  # 起動確認

Password Reset with nopass login

## From any machine
mysql -uroot
  # これでログインできるようになるはず

mysql> use mysql
mysql> select Host, User, Password from user;
  # user一覧
  # mysqlはHost+Userの組み合わせチェックなので、rootユーザでも接続元クライアントによってアカウントが分かれている
mysql> update user set Password=Password('new_password') where Host='localhost' and User='root';
  # 接続元としたいHost+Userでレコードを指定してパスワードを更新
  # この場合、接続元としたいサーバとmysqlデーモンが稼動したいサーバが同じなので、Host='localhost'としている
mysql> flush privileges;
  # 反映させる
mysql> exit;

Restore and Restart mysqld

## 
## skip-grant-tablesオプションを解除して、mysqldを再起動させて
## nopassログイン可能状態を元に戻す
## 

## /etc/my.cnfからskip-grant-tablesを削除
grep 'skip-grant-tables' /etc/my.cnf
  # option削除を確認

/etc/init.d/mysqld stop
/etc/init.d/mysqld start

##
##  正しいパスワードでのログインを確認
##  From any machine

mysql -uroot
  # ログインできないことを確認
mysql -uroot -p
  # new_password入力でログイン可能なことを確認

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7