1.修改配置文件my.cnf
在配置文件中加入 skip-grant-tables,:wq进行保存修改
vi /etc/my.cnf
2.重启mysql
systemctl restart mysqld
3.免密登录mysql,直接回车不需要输入密码
mysql -uroot -p
4.修改密码,依次执行以下命令
#进入数据库mysql
use mysql;
#修改密码
alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
#刷新权限
flush privileges;
#退出
exit;
如果你的 MySQL 8.0 数据库在 Linux 上运行并且外部网络无法访问 3306 端口,可以按照以下步骤进行排查和解决:
1.打开 MySQL 配置文件,通常是 /etc/my.cnf 或 /etc/mysql/my.cnf。
确保 bind-address 设置为 0.0.0.0,这样 MySQL 会监听所有 IP 地址。如果设置为 127.0.0.1,则只允许本地访问。
[mysqld]
bind-address = 0.0.0.0
修改后,重启 MySQL 服务:
sudo systemctl restart mysqld
2.检查防火墙设置:
确保防火墙允许通过 3306 端口的访问。使用以下命令检查并添加规则(以 firewalld 为例):
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
如果使用 iptables,可以使用以下命令添加规则:
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
3.检查 MySQL 用户权限:
确保你使用的 MySQL 用户有远程访问权限。可以通过 MySQL 命令行登录并运行以下命令:
SELECT host, user FROM mysql.user;
如果没有找到 host 为 % 或者你的外部 IP 的用户,需要创建一个新的用户或修改现有用户的权限:
CREATE USER 'youruser'@'%' IDENTIFIED BY 'yourpassword';
GRANT ALL PRIVILEGES ON *.* TO 'youruser'@'%';
FLUSH PRIVILEGES;