その疑問はもっともです。多くの解説記事が「パスワードを完全に忘れた場合の緊急復旧」を扱っているため、検索結果はサービス停止が前提の手順ばかりになりがちです。しかしMariaDB 10.4以降では、サービスを止めずにrootパスワードを変更できます。
この記事では、RHEL 9 / Rocky Linux 9 / Ubuntu 24.04 LTSで動作確認済みの手順を解説します。unix_socket認証の仕組みを使ったサービス停止なしの変更方法、ALTER USERコマンドの実行例、よくあるエラーと対処法まで網羅します。
この記事のポイント
・MariaDB 10.4以降はALTER USERコマンドでサービス停止なしにパスワードを変更できる
・unix_socket認証があれば sudo mariadb でパスワードなしにroot接続が可能
・skip-grant-tablesはパスワードを完全に忘れた場合の緊急復旧専用の最終手段
・mysqladminコマンドを使えばコマンドライン1行でパスワード変更が完結する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
skip-grant-tablesを使うべきではない場面
`--skip-grant-tables`オプションは「rootパスワードを完全に忘れてしまい、どうしても接続できない」緊急事態のための最終手段です。このオプションを指定してMariaDBを起動すると、すべての認証チェックを無効化した状態で起動します。本番環境でこの方法を使う場合、2つの大きなデメリットがあります。
・サービスの停止が必要:MariaDBを一度停止し、オプションを付けて再起動する必要がある
・セキュリティリスク:起動中は誰でも認証なしに接続できる状態になる
現在のrootパスワードが分かっている、あるいはOSのrootユーザーとしてサーバーにログインできる状態なら、skip-grant-tablesは一切不要です。
事前確認:MariaDBのバージョンと認証プラグインの確認
この記事の手順はMariaDB 10.4以降を対象にしています。まずバージョンを確認します。# MariaDBのバージョン確認 $ mariadb --version mariadb Ver 15.1 Distrib 10.11.6-MariaDB, for Linux (x86_64) using EditLine wrapper
# sudo経由でMariaDBに接続(unix_socket認証) $ sudo mariadb # rootユーザーの認証プラグインを確認 MariaDB [(none)]> SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; +------+-----------+-------------+ | user | host | plugin | +------+-----------+-------------+ | root | localhost | unix_socket | +------+-----------+-------------+ 1 row in set (0.001 sec)
サービス停止なしでMariaDB rootパスワードを変更する手順
1. unix_socket認証でMariaDBに接続する
MariaDBサービスが起動したまま、`sudo`コマンドでOSのrootとしてMariaDBに接続します。# sudo経由でMariaDBに接続 $ sudo mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 8 Server version: 10.11.6-MariaDB MariaDB Server Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
# 現在のrootパスワードで接続(MariaDB 10.3以前または既にnative_password設定済みの場合) $ mysql -u root -p Enter password:
2. ALTER USERコマンドで新しいパスワードを設定する
MariaDB 10.4以降では`ALTER USER`コマンドが推奨の変更方法です。このコマンドはMariaDBサービスを停止せずに実行できます。-- rootパスワードを変更する MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード'; Query OK, 0 rows affected (0.003 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> EXIT; Bye
MariaDB 10.3以前の環境では`SET PASSWORD`コマンドも使えます。
-- MariaDB 10.3以前でも使える変更コマンド MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新しいパスワード'); Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.000 sec)
3. 新しいパスワードでログインできることを確認する
変更が正しく反映されているか、パスワードを指定して接続できることを確認します。# 新しいパスワードで接続確認 $ mysql -u root -p Enter password: <- 新しいパスワードを入力 Welcome to the MariaDB monitor. MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.000 sec) MariaDB [(none)]> EXIT; Bye
応用・実務Tips
unix_socket認証を維持したままパスワードも設定する
unix_socket認証(sudoなしのroot接続)と通常のパスワード認証を両方有効にしたい場合は、`IDENTIFIED VIA`句で複数の認証方式を指定します。-- unix_socketとmysql_native_passwordの両方を有効にする MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket OR mysql_native_password USING PASSWORD('新しいパスワード'); Query OK, 0 rows affected (0.002 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) -- 設定確認 MariaDB [(none)]> SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; +------+-----------+-------------+ | user | host | plugin | +------+-----------+-------------+ | root | localhost | unix_socket | +------+-----------+-------------+
mysqladminコマンドで1行でパスワードを変更する
現在のrootパスワードが分かっていれば、MariaDBにログインせずにシェルからパスワードを変更できます。# mysqladminコマンドでパスワードを変更する(-p'パスワード'は引用符を忘れずに) $ mysqladmin -u root -p'現在のパスワード' password '新しいパスワード' # 変更後の接続確認 $ mysql -u root -p -e "SELECT user();" Enter password: +----------------+ | user() | +----------------+ | root@localhost | +----------------+
トラブルシュート:よくあるエラーと対処法
「ERROR 1698 (28000): Access denied for user 'root'@'localhost'」が出た場合
unix_socket認証が有効な環境で`mysql -u root -p`を実行するとこのエラーが出ます。unix_socket認証はパスワード入力による認証を受け付けないためです。# エラーが出るパターン(unix_socket認証が有効な環境) $ mysql -u root -p Enter password: ERROR 1698 (28000): Access denied for user 'root'@'localhost' # 正しい接続方法(sudo経由でOS認証を通す) $ sudo mariadb MariaDB [(none)]>
「ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'」が出た場合
指定した`user@host`の組み合わせがmysql.userテーブルに存在しない場合に発生します。実際に登録されているhostを確認して、ホスト名を合わせて再実行します。-- 実際に登録されているrootユーザーのhost名を確認 MariaDB [(none)]> SELECT user, host FROM mysql.user WHERE user = 'root'; +------+-----------+ | user | host | +------+-----------+ | root | localhost | +------+-----------+ -- hostを確認してからALTER USERを再実行 MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';
ALTER USER後もパスワードが変わらない場合
`FLUSH PRIVILEGES`を実行していないか、同じパスワードを入力してしまっている可能性があります。passwordカラムのハッシュ値を確認して変更が反映されているか確かめます。-- passwordカラムのハッシュ値を確認 MariaDB [(none)]> SELECT user, host, plugin, LEFT(password,20) AS pw_hash FROM mysql.user WHERE user = 'root'; +------+-----------+--------------------+----------------------+ | user | host | plugin | pw_hash | +------+-----------+--------------------+----------------------+ | root | localhost | mysql_native_pass~ | *2470C0C06DEE42FD1~ | +------+-----------+--------------------+----------------------+ -- passwordに値が入っていればALTER USERは成功している -- 変更が反映されない場合はFLUSH PRIVILEGES;を再実行する
本記事のまとめ
MariaDB rootパスワード変更の場面ごとの推奨手順をまとめます。| 状況 | 推奨コマンド・手順 |
|---|---|
| MariaDB 10.4以降・unix_socket認証が有効 | sudo mariadb → ALTER USER 'root'@'localhost' IDENTIFIED BY 'X'; → FLUSH PRIVILEGES; |
| 現在のパスワードが分かっている(旧環境) | mysql -u root -p → SET PASSWORD FOR 'root'@'localhost' = PASSWORD('X'); → FLUSH PRIVILEGES; |
| シェルから1行で変更したい | mysqladmin -u root -p'旧PW' password '新PW' |
| unix_socketとパスワード認証の両方を有効にしたい | ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket OR mysql_native_password USING PASSWORD('X'); |
| パスワードを完全に忘れた(緊急復旧のみ) | MariaDB停止 → --skip-grant-tables起動 → PW変更 → 通常再起動 |
>> セミナー詳細・お申し込みはこちら
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:MariaDB初期設定後に行うroot接続とDB作成手順|systemctlで起動確認まで
- この記事の属するカテゴリ:データーベース管理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます