不使用SSH登录远程主机直接连接远程数据库
mysql -u root -p
然后输入密码,进入mysql
修改mysql库的user表,将host项,从localhost改为%。%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip,比如可以将localhost改为192.168.1.123,这表示只允许局域网的192.168.1.123这个ip远程访问mysql。
(默认的账号的host属性都是localhost,意思是这个账号只能本地使用,如果要使用某个账号来远程登录,必须将账号的host属性值更改成%。)
mysql> use mysql;
mysql> update user set host = '%' where user = 'JavaWeb';
mysql> select user,host from user;
mysql> flush privileges;//刷新数据库
查看 firewalld 状态
systemctl status firewalld
开启 firewalld
systemctl start firewalld
开放端口
// --permanent 永久生效,没有此参数重启后失效
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone=public --query-port=3306/tcp
删除
firewall-cmd --zone=public --remove-port=3306/tcp --permanent
看看能不能ping通
mysql账户是否不允许远程连接
-- mysql -u root -p
-- show databases;
-- use mysql;
-- select host,user from user
若【要是用】的用户显示host为localhost 则需要授权 root 用户的所有权限并设置远程访问
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION; //任何远程主机都可以访问数据库
-- FLUSH PRIVILEGES; //需要输入次命令使修改生效
-- EXIT //退出
也可以通过修改表来实现远程:(修改整个user表)
-- use mysql;
-- update user set host = '%' where user = 'root';
-- select host, user from user;
root@iZ2zee2l6djknfZ ~]# firewall-cmd --list-ports
20/tcp 21/tcp 22/tcp 80/tcp 8888/tcp 39000-40000/tcp 8001/tcp 8001/udp
[root@iZ2zee2l6djknfZ ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@iZ2zee2l6djknfZ ~]# firewall-cmd --reload
success
[root@iZ2zee2l6djknfZ ~]# firewall-cmd --list-port
20/tcp 21/tcp 22/tcp 80/tcp 8888/tcp 39000-40000/tcp 8001/tcp 8001/udp 3306/tcp
可以看出一开始mysql3306端口没有开放 ,然后此处开放,然后刷新就可以了
其他防火墙命令
#centos7查看防火墙所有信息
firewall-cmd --list-all
#centos7查看防火墙开放的端口信息
firewall-cmd --list-ports
#新增一个开放端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
#说明:
#–zone #作用域
#–add-port=80/tcp #添加端口,格式为:端口/通讯协议
#–permanent 永久生效,没有此参数重启后失效
#新增多个端口:
firewall-cmd --zone=public --add-port=80-90/tcp --permanent
#删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent #重新加载firewall-cmd --reload
#查看本机已经启用的监听端口centos7以下使用netstat -ant,7使用ss
ss -ant
#centos7启动防火墙
systemctl start firewalld.service
#centos7停止防火墙/关闭防火墙
systemctl stop firewalld.service
#centos7重启防火墙
systemctl restart firewalld.service
#设置开机启用防火墙
systemctl enable firewalld.service
#设置开机不启动防火墙
systemctl disable firewalld.service
其实出现这个错误的原因也不外乎以上几个方面,相信按照上面的思路找出原因,定能将问题解决掉
错误原因:当登录MySQL数据库出现 Error 1045 错误时,表明你输入的用户名或密码错误被拒绝访问了;MySQL服务搭建后,默认root用户是不能进行远程访问连接的。
(1)改表法
可能是你的账号不允许从远程登录,只能在localhost本地登录数据库。建议在数据库搭建时,创建一远程连接的用户或者在localhost的主机上将mysql数据库下的"user"表里的"root"用户开启远程登录(把localhost这个值替换为%)。
(2)授权法
授权格式(mysql中不区分大小写):
GRANT 权限 ON 数据库.* TO “用户名”@ “登录主机” IDENTIFIED BY “密码”;
参考文章:
MySQL错误:Can’t connect to MySQL server (10060) 解决方案
Navicat连接MySQL时弹出:1045:Access denied for user ‘root’@’localhost’
Centos7开放3306端口