Arch Linux首次安装MySQL报ERROR 1045(28000)访问被拒求助
Arch Linux首次安装MySQL报ERROR 1045 (28000) 无密码访问被拒修复方案
Arch Linux的MySQL/MariaDB包不会在安装阶段自动完成数据目录初始化,网上大部分面向Debian/Ubuntu系的修复方案不适配Arch的包配置,反复试错后残留的错误数据会导致安装流程一直要求输入未知的root密码,最终触发无密码访问被拒报错,按以下步骤操作即可修复:
- 先彻底清理错误操作残留
停掉所有正在运行的MySQL相关服务:sudo systemctl stop mysqld mariadb 2>/dev/null
首次安装无存量业务数据的前提下,清空错误生成的数据目录:sudo rm -rf /var/lib/mysql/* - 手动执行数据库初始化
Arch下必须手动跑初始化命令生成系统库,这步是绝大多数教程漏提的关键:sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
如果你装的是Oracle官方MySQL包,把上面的初始化命令替换成:sudo mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql - 临时跳过权限校验重置root密码
不要改my.cnf加skip-grant-tables参数,容易忘删留安全隐患,直接临时启动无校验的后台进程:sudo mysqld --skip-grant-tables --skip-networking --user=mysql &
等2秒等进程启动完成,直接无密码连接数据库:mysql -u root
进入MySQL交互行后依次执行以下命令,重置密码并修正认证插件(Arch默认的auth_socket插件会导致密码登录异常):
杀掉临时启动的无校验进程:FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你要设置的root密码'; FLUSH PRIVILEGES; exit;sudo pkill mysqld - 正常启动服务验证
启动systemd托管的正式服务,同时设置开机自启:sudo systemctl enable --now mysqld
用刚才设置的密码登录验证:mysql -u root -p
- 注意事项
- 不要照搬Debian系教程去/var/log/mysqld.log找临时密码,Arch不会自动生成这个临时密码文件
- 全程操作不要手动改/var/lib/mysql目录的权限,初始化命令会自动修正权限,手动chown反而会导致服务启动失败
- 如果装的是MariaDB,把所有命令里的
mysqld替换成mariadbd即可,操作逻辑完全一致
内容的提问来源于stack exchange,提问作者John Domeh
相关产品推荐
相关产品推荐

