web-dev-qa-db-ja.com

Centos7でmysqlルートパスワードを変更する

CentOS7 VMにmySQLをインストールしましたが、ルートでのログインに問題があります。パスワードなしでログインしようとしたか、デフォルトのもの(mysql、adminなど)を試しました。my.cnfファイルを調べましたが、パスワードがありません。サービスを停止してmysqld_safe --skip-grant-tables &で再起動することでパスワードを変更しようとしましたが、mysqld_safe:command not foundが表示されます。他に何をすべきかわかりません。どんなヒント/アイデアも大歓迎です!

43
KeykoYume

どのバージョンのmySQLを使用していますか?私は5.7.10を使用していますが、rootとしてログオンするのと同じ問題がありました

2つの問題があります。最初にrootとしてログインできない理由と、mySQLを起動してrootパスワードをリセットするために「mysqld_safe」を使用できない理由です。

インストール中にルートパスワードを設定することに対する回答はありませんが、ルートパスワードをリセットする方法は次のとおりです。

Editインストール時の初期ルートパスワードは、実行することで見つけることができます

grep 'temporary password' /var/log/mysqld.log

http://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html


  1. systemdmysqld_safeの代わりにmySQLの管理に使用されるようになりました(これが-bash: mysqld_safe: command not foundエラーを受け取る理由です-インストールされていません)

  2. userテーブル構造が変更されました。

そのため、rootパスワードをリセットするには、--skip-grant-tablesオプションを使用してmySQLを起動し、userテーブルを更新しますが、その方法は変更されています。

1. Stop mysql:
systemctl stop mysqld

2. Set the mySQL environment option 
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

3. Start mysql usig the options you just set
systemctl start mysqld

4. Login as root
mysql -u root

5. Update the root user password with these mysql commands
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword')
    -> WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

*** Edit ***
As mentioned my shokulei in the comments, for 5.7.6 and later, you should use 
   mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
Or you'll get a warning

6. Stop mysql
systemctl stop mysqld

7. Unset the mySQL envitroment option so it starts normally next time
systemctl unset-environment MYSQLD_OPTS

8. Start mysql normally:
systemctl start mysqld

Try to login using your new password:
7. mysql -u root -p

参照

http://dev.mysql.com/doc/refman/5.7/en/mysqld-safe.html にあるように、

MySQL 5.7.6の時点で、RPMディストリビューションを使用したMySQLインストールの場合、サーバーの起動とシャットダウンはいくつかのLinuxプラットフォームのsystemdによって管理されます。これらのプラットフォームでは、mysqld_safeは不要なためインストールされなくなりました。詳細については、セクション2.5.10「systemdを使用したMySQLサーバーの管理」を参照してください。

http://dev.mysql.com/doc/refman/5.7/en/server-management-using-systemd.html にアクセスすると、一番下のsystemctl set-environment MYSQLD_OPTS=に言及しますページの。

パスワードリセットコマンドは http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html の下部にあります

223
Kevin Jones

パスワードをリセットするには、以下の手順を使用します。

$ Sudo systemctl start mysqld

MySqlサーバーのルートパスワードをリセットします。

$Sudo grep 'temporary password' /var/log/mysqld.log

次のようなものを出力します:

 10.744785Z 1 [Note] A temporary password is generated for root@localhost: o!5y,oJGALQa

Mysql_secure_installationプロセスのリセット中に上記のパスワードを使用します。

<pre>
    $ Sudo mysql_secure_installation
</pre>
   Securing the MySQL server deployment.

   Enter password for user root: 

MySqlサーバーのルートパスワードを正常にリセットしました。以下のコマンドを使用して、mysqlサーバーが接続しているかどうかを確認します。

$ mysql -u root -p

http://gotechnies.com/install-latest-mysql-5-7-rhelcentos-7/

11
Arvind

上記のKevin Jonesのアドバイスを使用して、次の--skip-networkingの変更を行い、セキュリティを少し向上させました。

Sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"

[user@machine ~]$ mysql -u root

その後、パスワードをリセットしようとしたときにエラーが表示されましたが、他の場所でグーグル検索を行うと、単純に先に進むことができると示唆されました。以下が働いた:

mysql> select user(), current_user();
+--------+-----------------------------------+
| user() | current_user()                    |
+--------+-----------------------------------+
| root@  | skip-grants user@skip-grants Host |
+--------+-----------------------------------+
1 row in set (0.00 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'sup3rPw#'
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'sup3rPw#'
Query OK, 0 rows affected (0.08 sec)

mysql> exit
Bye
[user@machine ~]$ systemctl stop mysqld
[user@machine ~]$ Sudo systemctl unset-environment MYSQLD_OPTS
[user@machine ~]$ systemctl start mysqld

その時点でログインできました。

11
user48918

すべて、

ここでは、mysql-community-server 5.7を少しひねりながら、mysql5.7のrootパスワードをリセットする方法またはパスワードを設定する方法をいくつか紹介します。 centos7とRHEL7でも動作します。

ステップ1。最初にデータベースを停止します

service mysqld stop

ステップ2。 2番目の/etc/my.cnfファイルを変更し、「skip-grant-tables」を追加します

vi /etc/my.cnf

[mysqld] skip-grant-tables

ステップ3。 3番目の開始mysql

service mysqld start

ステップ4。 mysqlのデフォルトデータベースを選択

mysql -u root

mysql>use mysql;

ステップ4。新しいパスワードを設定します

mysql> update user set authentication_string=PASSWORD("yourpassword") where User='root';

step5 mysqlデータベースを再起動します

service mysqld restart

 mysql -u root -p

楽しい :)

7
Narendra Kumar

次のコマンド/etc/init.d/mysqld stopを使用して、すべてのサービスMySQLを停止してください。

mysqld_safe --skip-grant-tables

その適切に動作する可能性があります

3
sumit Jaiswal

私の場合、次のように動作します。1. mysqlを停止します:systemctl stop mysqld

  1. MySQL環境オプションsystemctl set-environment MYSQLD_OPTS = "-skip-grant-tables"を設定します

  2. 設定したオプションを使用してmysqlを起動しますsystemctl start mysqld

  3. ルートmysql -u rootとしてログインします

  4. ログイン後、私はFLUSH PRIVILEGESを使用します。サーバーに許可テーブルを再ロードして、アカウント管理ステートメントが機能するように指示します。そうしないと、パスワードを更新しようとして次のエラーが表示されます。「ユーザーテーブルに一致する行が見つかりません」

1
Dragos Alexe