mysql 5.7+ root默认无密码但认证插件为auth_socket或caching_sha2_password,导致access denied;需停服后--skip-grant-tables启动,再用alter user重置密码并指定mysql_native_password插件。

MySQL 5.7+ 安装后 root 密码为空?默认认证方式导致连接失败
MySQL 5.7 及以上版本安装后,root 用户默认不设密码,但认证插件是 auth_socket(Ubuntu/Debian 常见)或 caching_sha2_password(MySQL 8.0+),直接 mysql -u root 可能报错 Access denied for user 'root'@'localhost'。这不是密码问题,而是认证机制拦截了——必须先绕过权限系统重置用户配置。
跳过权限验证启动 MySQL 并重置 root 密码
适用于无法登录、忘记密码、或首次初始化失败的场景。操作前确保 MySQL 已停止:
- Linux:执行
sudo systemctl stop mysql(或mysqld,取决于服务名) - 临时启动 mysqld 并跳过权限表:
sudo mysqld --skip-grant-tables --skip-networking & - 新开终端,无密码登录:
mysql -u root - 执行以下语句(注意:MySQL 5.7+ 必须用
ALTER USER,UPDATE mysql.user会失效):FLUSH PRIVILEGES;<br>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
- 退出并重启正常 MySQL 服务:
sudo systemctl start mysql
MySQL 8.0+ 初始化时未生成临时密码?检查 error log 路径
官方二进制包或某些发行版安装后,MySQL 会自动生成一个临时 root 密码,写入错误日志而非终端。常见路径包括:/var/log/mysql/error.log、/var/log/mysqld.log 或 /usr/local/mysql/data/*.err。搜索关键词:A temporary password is generated for root@localhost。若日志中无此行,说明初始化未完成,需手动运行:sudo mysqld --initialize --user=mysql(注意:该命令会重新生成数据目录,请勿在已有数据时执行)。
直接上传到一个php空间就可以运行,但要装zend optimizer 3.3.0或以上版本,不需要mysql数据库,这个是access数据库免费的。。初次运行请到后台设置基本信息!默认是:http://localhost/xqcms3.1后台用户密码:创始人:admin admin后台登录地址:http://你的域名/admin.php3.1主要更新:1.优化了静态页面生成速度2.更改了系统后
使用 mysql_secure_installation 配置 root 密码和基础安全项
这是最稳妥的初始配置方式,但前提是能以 root 身份登录(即已解决上述认证问题)。运行:sudo mysql_secure_installation,它会引导你:
- 设置
root密码(如果尚未设置) - 移除匿名用户:
Remove anonymous users?→ 选Y - 禁止远程 root 登录:
Disallow root login remotely?→ 生产环境务必选Y - 删除测试数据库:
Remove test database and access to it? - 重载权限表:
Reload privilege tables now?→ 选Y
该脚本底层调用的是 ALTER USER 和 DROP USER,比手动 SQL 更全面,但不会修改已存在的非 root 用户权限。
真正麻烦的不是设密码本身,而是认证插件类型、日志位置、以及是否误删了初始化生成的临时凭证——这三个点卡住的人最多。动手前先 ps aux | grep mysqld 确认进程状态,再决定走 --skip-grant-tables 还是查日志。









