コンテンツにスキップ

MySQLのパスワード初期化

見たサイト


root@wakasagi:~# mysqld_safe --init-file=/root/init-mysql
2017-08-26T02:11:59.477574Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-08-26T02:11:59.492627Z mysqld_safe A mysqld process already exists
root@wakasagi:~# systemctl status mysql
● mysql.service - MySQL Community Server
 Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
 Active: active (running) since Sat 2017-08-26 10:58:46 JST; 13min ago
Process: 14792 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS)
Process: 14752 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 14798 (mysqld)
 CGroup: /system.slice/mysql.service
         └─14798 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Aug 26 10:58:46 wakasagi systemd[1]: Starting MySQL Community Server...
Aug 26 10:58:46 wakasagi systemd[1]: Started MySQL Community Server.
root@wakasagi:~# systemctl stop mysql
root@wakasagi:~# mysqld_safe --init-file=/root/init-mysql
2017-08-26T02:12:19.986634Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-08-26T02:12:19.988214Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
root@wakasagi:~# ls /var/run/mysqld
ls: cannot access '/var/run/mysqld': No such file or directory
root@wakasagi:~# mkdir -p /var/run/mysqld
root@wakasagi:~# chown mysql:mysql /var/run/mysqld/
root@wakasagi:~# mysqld_safe --init-file=/root/init-mysql
2017-08-26T02:13:05.628082Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-08-26T02:13:05.641893Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2017-08-26T02:13:07.579662Z mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
root@wakasagi:~#

上記方法ではどうしても上手く出来ないので方法を変えてみることにした。

mysqld_safe --skip-grant-tables --skip-networking &

ログイン出来たら...

mysql> use mysql;

mysql> update user set password=password("hogehoge123") where user='root';

ERROR 1054 (42S22): Unknown column 'password' in 'field list'

mysql> update user set authentication_string=password("hogehoge123") where user='root';

mysql> flush privileges;

起動させているプロセスを終了させる

ps aux | grep mysql

ユーザmysqlで起動しているプロセス探す

root@wakasagi:~# ps aux | grep mysql
root     16504  0.0  0.1   4508  1840 ?        S    12:07   0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables --skip-networking
mysql    16672  0.0 19.5 1260916 198308 ?      Sl   12:07   0:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock
root     16953  0.0  0.1  14224  1028 pts/1    S+   12:48   0:00 grep --color=auto mysql

正常なプロセス終了の仕方が怪しかったので確認した。

http://kazmax.zpp.jp/linux_beginner/process_kill.html

オプションなしだとTERMだった。ダメ押しでオプション付けて終了させる。

kill -TERM 16672

プロセスが終了しているか確認

ps aux | grep mysql

新しく設定したパスワードで入れるか確かめる

mysql -u root -p

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROP,INDEX
  -> ON wp_blog.*
  -> TO wp_blog_admin@localhost
  -> IDENTIFIED BY 'fugafuga456';
Query OK, 0 rows affected, 1 warning (0.01 sec)