| この記事の要点 |
|
方法 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
| 環境 | 確認方法 |
|---|---|
| Bitnami | cat /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 24 や pwgen -s 24 1 でランダム生成、パスワードマネージャに保存。
子ページ
子ページはありません
同階層のページ
- ダウンロード&インストール方法(Windows)
- インストール方法(Linux)
- コマンド一覧
- SQL
- データ型
- 関数
- 管理ツール
- 設定
- パフォーマンスチューニング関連
- エクスポートおよびインポート
- エラー&トラブル
- 文字コードの確認
- 実行中の SQL の状態確認およびプロセスキルの方法
- パスワードの無効化設定
- root ユーザーの初期パスワード確認方法
- rootユーザーのパスワード変更方法
- LIMIT, OFFSET の始まりと挙動
- mysqlのバージョン確認方法
- MySQLで実行計画を表示する方法
- レプリケーションのステータス確認方法
- 中央値の導き方(バージョン8未満)
- 階層SQL(バージョン8未満)
- パーセンタイルの導き方
- 特定スキーマの全テーブルの全カラム情報を取得する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38