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

スポンサードサーチ

皆さんは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でログインできるかどうかをチェックして問題なければ再設定は終了です。

ITを使った経営課題の解決でお困りではありませんか?

DXを始めとするITを使った経営課題の解決が上手くいっていない企業は数多くあります。

それは、単なるソリューションの導入や、社内人材への丸投げとなっており、課題解決がゴールになっていないからです。

そのためには、経営とITを理解した人材が、経営者層と共に取り組み、経営者の頭の中を可視化することが必須要件です。

現在、1時間の無料オンライン・コンサルティングを実施しております。

是非この機会にご相談ください。

構築予算が10分の1に

経営課題を解決するECサイト、越境ECサイト、BtoB ECサイト、マーケットプレイスを構築するならCS-Cartをご検討ください。

スポンサードサーチ