kill (禁用 kill -9,防數據損壞)my.cnf [mysqld] 加 skip-grant-tablesmysql -uroot(無需密碼)-- 方式 1:SET PASSWORD(推薦,無需 flush)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
-- 方式 2:UPDATE user 表
UPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
-- 方式 3:mysqladmin(需另開終端,庫已啟動)
mysqladmin -u root password 'newpass'
skip-grant-tables,重啟 MySQL,新密碼驗證| 信號 | 行為 | 風險 |
|---|---|---|
kill (SIGTERM) | 通知進程優雅退出,執行清理、刷盤 | 安全 |
kill -9 (SIGKILL) | 強制終止,進程無法執行任何清理 | **可能導致數據頁損壞、無法啟動** |
原理: mysql.user 仍為 MyISAM 引擎(5.7 前),表文件(.frm/.MYD/.MYI)可跨實例直接複製、修改、覆蓋,配合 kill -HUP 熱加載。
cp /data/mysql3306/data/mysql/user.{frm,MYD,MYI} /data/mysql3306/data/test/
USE test;
UPDATE user SET authentication_string=PASSWORD('hello') WHERE User='root' AND Host='localhost';
cp /data/mysql3306/data/test/user.{frm,MYD,MYI} /data/mysql3306/data/mysql/
kill -HUP $(pidof mysqld) # 或 kill -HUP
mysql -uroot -phello # 成功登入
SIGHUP 信號,MySQL 重新讀取授權表、配置文件、刷新日志mysql.user 已改為 InnoDB,**此法失效**