MySQL密码重置
分类:
技术
简介:MySQL 密码重置教程本教程适用于 MySQL 5.7+ 和 MySQL 8.0+,涵盖 Linux 服务器和 macOS 系统。目录确认 MySQL 版本和安装方式停止 MySQL 服务以安全模式启动 MySQL重置密码重启 MySQL 服务验证新密码常见问题排查1. 确认 MySQL 版本和安装方式# 查看 MySQL 版本
mysql version
# 查看 MySQL 安装位置
which mysql2. 停止 MySQL 服务Linux (Ubuntu/Debian)sudo systemctl stop mysql
# 或
sudo service mysql stopLinux (CentOS/RHEL)sudo systemctl stop mysqld
# 或
sudo service mysqld stopmacOS (Homebrew 安装)brew services stop mysqlmacOS (官方安装包)sudo /usr/local/mysql/support files/mysql.server stopDockerdocker stop <容器名或ID>3. 以安全模式启动 MySQL安全模式会跳过权限验证,允许无密码登录。Linux (Ubuntu/Debian/CentOS)sudo mysqld_safe skip grant tables &如果 mysqld_safe 不在 PATH 中:# Ubuntu/Debian
sudo /usr/sbin/mysqld skip grant tables user=mysql &
# CentOS/RHEL
sudo /usr/sbin/mysqld skip grant tables user=mysql &macOS (官方安装包)sudo /usr/local/mysql/bin/mysqld_safe skip grant tables &macOS (Homebrew)/usr/local/opt/mysql/bin/mysqld_safe skip grant tables &
# 或 (Apple Silicon)
/opt/homebrew/opt/mysql/bin/mysqld_safe skip grant tables &等待 5 10 秒让 MySQL 完全启动。4. 重置密码4.1 连接到 MySQLmysql u root如果连接失败,尝试指定 socket:# Linux
mysql u root S /var/run/mysqld/mysqld.sock
# macOS
mysql u root S /tmp/mysql.sock4.2 执行密码重置命令连接成功后,在 MySQL 命令行中执行:MySQL 8.0+FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';MySQL 5.7FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';MySQL 5.6 及更早版本FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');4.3 退出 MySQLEXIT;5. 重启 MySQL 服务首先停止安全模式的 MySQL:sudo killall mysqld mysqld_safe
# 或
sudo pkill mysqld然后正常启动 MySQL:Linux (Ubuntu/Debian)sudo systemctl start mysqlLinux (CentOS/RHEL)sudo systemctl start mysqldmacOS (Homebrew)brew services start mysqlmacOS (官方安装包)sudo /usr/local/mysql/support files/mysql.server start6. 验证新密码mysql u root p输入新密码,如果成功登录则密码重置完成。7. 常见问题排查问题 1:Can't connect to server (2002 错误)原因:MySQL 服务未运行或未监听正确的端口/socket。解决方案:# 检查 MySQL 是否运行
ps aux | grep mysql
# 检查端口监听
netstat tlnp | grep 3306
# 或
ss tlnp | grep 3306
# 检查 socket 文件
ls la /var/run/mysqld/mysqld.sock # Linux
ls la /tmp/mysql.sock # macOS问题 2:Access denied (1045 错误)原因:密码错误或权限问题。解决方案:确保在 skip grant tables 模式下先执行 FLUSH PRIVILEGES;问题 3:mysqld_safe 找不到解决方案:# 查找 mysqld_safe 位置
find / name "mysqld_safe" 2>/dev/null
# 或直接使用 mysqld
sudo mysqld skip grant tables user=mysql &问题 4:MySQL 启动失败解决方案:查看错误日志# Linux
sudo cat /var/log/mysql/error.log | tail 50
# 或
sudo journalctl u mysql no pager | tail 50
# macOS
sudo cat /usr/local/mysql/data/*.err | tail 50问题 5:忘记 root 主机限制如果 root 用户被限制了主机访问,可以同时重置多个主机的密码:FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY '新密码';
ALTER USER 'root'@'%' IDENTIFIED BY '新密码'; 允许任意主机连接附录:安全建议使用强密码:至少 12 位,包含大小写字母、数字和特殊字符限制 root 远程访问:生产环境避免使用 'root'@'%'定期更换密码:建议每 90 天更换一次使用密码管理器:避免遗忘密码快速参考命令操作Ubuntu/DebianCentOS/RHELmacOS (Homebrew)macOS (官方)停止服务sudo systemctl stop mysqlsudo systemctl stop mysqldbrew services stop mysqlsudo /usr/local/mysql/support files/mysql.server stop启动服务sudo systemctl start mysqlsudo systemctl start mysqldbrew services start mysqlsudo /usr/local/mysql/support files/mysql.server start查看状态sudo systemctl status mysqlsudo systemctl status mysqldbrew services list`ps aux \grep mysql`安全模式sudo mysqld_safe skip grant tables &同左同左sudo /usr/local/mysql/bin/mysqld_safe skip grant tables &