この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:7
ページ更新者:guest
更新日時:2026-06-11 07:10:02

タイトル: rootユーザーのパスワード変更方法
SEOタイトル: MySQL root パスワードの変更方法(ALTER USER / mysqladmin / パスワード忘れ時の復旧)

この記事の要点
  • MySQL 5.7+ / 8.0 標準: ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass'
  • 外部コマンド: mysqladmin -u root -p password 'newpass'(旧来)
  • パスワード忘れ時: mysqld を --skip-grant-tables --skip-networking で起動 → 直接 user テーブル更新 → 通常起動
  • MySQL 8.0 の caching_sha2_password: 一部古いクライアントは接続不可。WITH mysql_native_password に戻す
  • パスワードポリシー: validate_password プラグインで強度要件。短い pw だと ERROR 1819

方法 1: ALTER USER(MySQL 5.7.6+ / 8.0 標準)

最新の MySQL では ALTER USER を使うのが正式な方法です:

-- 通常: 現パスワード入力で接続済の状態で
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewSecret123!';

-- 認証プラグインも指定(MySQL 8.0 互換性問題対策)
ALTER USER 'root'@'localhost'
    IDENTIFIED WITH mysql_native_password BY 'NewSecret123!';

-- 反映
FLUSH PRIVILEGES;

-- 確認
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';

方法 2: mysqladmin password(旧来)

シェルから直接変更したい場合:

# 対話入力
mysqladmin -u root -p password
# Enter password: ← 旧パスワード
# New password: ← 新パスワード
# Confirm new password:

# 引数で渡す(履歴に残るので非推奨)
mysqladmin -u root -p'OldPass' password 'NewSecret123!'

方法 3: SET PASSWORD(旧構文・5.7.5 以前)

-- MySQL 5.7.5 以前
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewSecret123!');

-- MySQL 5.7.6 以降は ALTER USER 推奨。古い構文は非推奨警告
SET PASSWORD FOR 'root'@'localhost' = 'NewSecret123!';

方法 4: パスワードを忘れた場合の復旧

--skip-grant-tables で起動して権限チェックを無効化し、直接 user テーブルを更新します。

手順 1: MySQL を停止

sudo systemctl stop mysql       # Ubuntu/Debian
sudo systemctl stop mysqld      # RHEL/CentOS
sudo systemctl stop mariadb     # MariaDB

# プロセス残存確認
ps aux | grep mysqld

手順 2: 権限チェックなしで起動

# 安全のためネットワーク接続も無効化
sudo mysqld_safe --skip-grant-tables --skip-networking &

# または直接(systemd 環境)
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
sudo systemctl start mysql

手順 3: パスワード変更

-- 認証なしで接続
$ mysql -u root

-- MySQL 5.7+ : ALTER USER は --skip-grant-tables 状態だと動かない
-- 一旦 FLUSH PRIVILEGES してから

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewSecret123!';
FLUSH PRIVILEGES;
EXIT;

-- 5.6 以前 / 直接更新(最終手段)
UPDATE mysql.user
SET authentication_string = PASSWORD('NewSecret123!')
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

手順 4: 通常起動に戻す

# mysqld_safe で起動したプロセスを止める
sudo killall mysqld
# または
sudo systemctl unset-environment MYSQLD_OPTS

# 通常起動
sudo systemctl start mysql

# 新パスワードで接続確認
mysql -u root -p

MySQL 8.0 の認証プラグイン問題

MySQL 8.0 は既定の認証プラグインが caching_sha2_password に変わり、古い PHP / MySQL クライアントから接続できないことがあります:

SQLSTATE[HY000] [2054] The server requested authentication method
unknown to the client
-- 旧プラグインに戻す
ALTER USER 'root'@'localhost'
    IDENTIFIED WITH mysql_native_password BY 'NewSecret123!';

-- 全ユーザー確認
SELECT User, Host, plugin FROM mysql.user;

my.cnf で既定を変更:

[mysqld]
default_authentication_plugin = mysql_native_password

パスワードポリシー(validate_password)

MySQL 5.7+ には validate_password プラグインが既定で有効。短いパスワードは弾かれます:

ERROR 1819 (HY000): Your password does not satisfy the current
policy requirements
-- 現在のポリシー確認
SHOW VARIABLES LIKE 'validate_password%';

-- 主な設定
-- validate_password.policy        LOW / MEDIUM / STRONG
-- validate_password.length        8 (既定)
-- validate_password.mixed_case_count  1
-- validate_password.number_count      1
-- validate_password.special_char_count 1

-- 一時的に緩める(再起動で戻る)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 8;

-- 完全に無効化(非推奨)
UNINSTALL PLUGIN validate_password;

MySQL 8.0 の component_validate_password

8.0 ではプラグインからコンポーネントに変更:

-- 状態確認
SELECT * FROM mysql.component;
SHOW VARIABLES LIKE 'validate_password%';

-- アンインストール
UNINSTALL COMPONENT 'file://component_validate_password';

-- 再インストール
INSTALL COMPONENT 'file://component_validate_password';

Bitnami / Docker 環境での root pw

環境確認方法
Bitnamicat /home/bitnami/bitnami_credentials
Docker official mysql環境変数 MYSQL_ROOT_PASSWORD
MAMP初期: root / root
XAMPP初期: root / 空
AWS RDSマスターパスワードはダッシュボードから変更

FAQ

Q: ALTER USER で「Operation ALTER USER failed」
A: ① パスワードポリシー違反、② --skip-grant-tables 状態で FLUSH PRIVILEGES してない、③ READ ONLY モード。

Q: root@localhost と root@% は別物?
A: 別物です。両方変更が必要ならALTER USER 'root'@'%' ... も実行。

Q: 安全な root pw の生成
A: openssl rand -base64 24pwgen -s 24 1 でランダム生成、パスワードマネージャに保存。