CentOS 7のMySQL(MariaDB)でrootパスワードを忘れた場合の対処方法

公開日: 2019/04/29 更新日: 2019/04/29
カテゴリー: サーバ・ネットワーク
  • このエントリーをはてなブックマークに追加

皆さんはMySQL(MariaDB)を使っていて、rootパスワードがわからなくなった事ってないですか?

残念ながら私は時々あります。

こういった時、以前はMySQL(MariaDB)をセーフモードで立ち上げてrootパスワードの再設定を行っていましたが、CentOS 7ではこれができません。

これはCentOS 7ではsystemdというLinuxの起動処理やシステム管理を行う仕組みで管理されているため、mysqld_safeが使用できないからです。

そこで、改めてCentOS 7でMySQL(MariaDB)でrootパスワードの再設定をする方法をまとめてみました。

スポンサードサーチ

CentOS 6以前での設定方法

CentOS 6以前では、MySQL(MariaDB)でrootパスワードを再設定する場合、以下の方法で行っていました。

サーバにsshで接続

まずはサーバにsshで接続をします。

起動しているMySQL(MariaDB)を停止

次に、起動しているMySQL(MariaDB)を停止します。

service mysqld stop

MySQL(MariaDB)をセーフモードでの起動

MySQL(MariaDB)をセーフモードでの起動します。

mysqld_safe --skip-grant-tables &

パスワード無しでMySQL(MariaDB)へrootでログイン

セーフモードの場合、以下のコマンドを叩くとパスワード無しでMySQL(MariaDB)へrootでログインができます。

mysql -u root

rootのパスワードをセットする

MySQL(MariaDB)へrootでログイン出来たら、mysqlデータベースを選択します。

use mysql;

次に、rootのパスワードをセット。

update user set password=PASSWORD("新パスワード") where User='root';

rootのパスワードを空に設定する事もできます。

権限設定の反映を最後に行い。

flush privileges;

MySQL(MariaDB)から抜けます。

quit

セーフモードのMySQL(MariaDB)を停止後、起動

最後にセーフモードのMySQL(MariaDB)を停止。

service mysqld stop

通常状態でMySQL(MariaDB)を起動。

service mysqld start

再度、rootでログインできるかどうかをチェックして問題なければ再設定は終了です。

CentOS 7での設定方法

CentOS 7の場合は、この手順ではrootパスワードの再設定ができません。

CentOS 6まではchkconfigコマンドによるサービスの有効化、無効化の切り替え、/etc/init.dディレクトリ配下のスクリプトに対してstart/stop/status等のパラメータを与えることで様々なサービスの管理を行っていましたが、CentOS 7はサービス管理がSystemdになりました。

そのため、例えばapacheの起動や停止、再起動、再読み込みを行う場合や状態表示を行う場合、以下のようにsystemctlコマンドを入力します。

# httpdサービスの起動
systemctl start httpd 
# httpdサービスの停止
systemctl stop httpd 
# httpdサービスの再起動
systemctl restart httpd 
# httpdサービスの再読み込み
systemctl reload httpd 
# httpdサービスの状態表示
systemctl status httpd

このsystemctlコマンドを使ってMySQL(MariaDB)の停止や再起動を行って行きます。

起動しているMySQL(MariaDB)を停止

まず、systemctlコマンドで起動しているMySQL(MariaDB)を停止します。

systemctl stop mysqld

skip-grant-tablesオプションを設定

MYSQL_OPTS変数を利用すると、システム構成ファイルを直接変更せずにMySQL Serverを起動することができますので、skip-grant-tablesオプションを設定します。

MySQL 5.6 リファレンスマニュアル:5.1.3 サーバーコマンドオプションに–skip-grant-tablesオプションの解説がありますが、これを設定することでデータベースにパスワード無しでアクセスできるようになります。

このオプションにより、サーバーは権限システムをまったく使用せずに開始され、サーバーへのアクセス権を持つすべてのユーザーにすべてのデータベースに対する無制限アクセス権が与えられます。

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

MySQL(MariaDB)を起動

MySQL(MariaDB)を起動します。

systemctl start mysqld

パスワード無しでMySQL(MariaDB)へrootでログイン

先ほどのskip-grant-tablesのオプション設定したことで、パスワード無しでMySQL(MariaDB)へrootでログインができます。

mysql -u root

rootのパスワードをセットする

MySQL(MariaDB)へrootでログイン出来たら、新しいパスワードをセット。

update user set password=PASSWORD("新パスワード") where User='root';

権限設定の反映を最後に行い。

flush privileges;

MySQL(MariaDB)から抜けます。

quit

MySQL(MariaDB)を停止後、起動

MySQL(MariaDB)を停止します。

systemctl stop mysqld

skip-grant-tablesオプション設定を解除

skip-grant-tablesオプション設定を解除。

systemctl unset-environment MYSQLD_OPTS

通常状態でMySQL(MariaDB)を起動

最後に、通常状態でMySQL(MariaDB)を起動します。

systemctl start mysqld

再度、rootでログインできるかどうかをチェックして問題なければ再設定は終了です。

スポンサードサーチ

タグ: , , , , , , , ,