原因1:
MySQL的远程访问权限未开放
# 查看当前远程连接的权限
select User,authentication_string,Host from user;
# 创建用户远程访问权限
create user root@'%' identified by '123456';
# 允许指定主机(IP地址)访问权限
grant all privileges on test.* to '用户名'@'ip地址' identified by '密码';
# 无法创建请删除重新试一遍
drop user root@'ip地址';
# 赋予用户操作的全部权限
grant all privileges on *.* to root@'%';
# 刷新指令
flush privileges;
为了防止类似问题,要通过java自动监控
1、主库创建一个用于复制的用户
mysql> create user 'repl'@'%' identified by '123456';
2、将replication slave,replication client 授权到repl用户
给他所有权限,这样才能通过java执行show slave status 命令
mysql> grant all on *.* to 'repl'@'%';
3、刷新权限
mysql> flush privileges;
查看权限
mysql> show grants for 'repl'@'%';
原因2:
服务器开启了防火墙,导致MySQL的访问端口无法使用
如果服务器开启了防火墙,并且未设置MySQL端口开放策略,那么你将无法通过对应的端口远程访问MySQL。
解决方案:
关闭防火墙,或者开放对应的MySQL端口即可,比如默认的MySQL端口是3306,开放他就行。
常见命令如下:
# 查看防火墙状态
firewall-cmd --state
# 启动防火墙
systemctl start firewalld.service
# 关闭防火墙
systemctl stop firewalld.service
# 设置开机自启动
systemctl enable firewalld.service
# 开放防火墙端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重新加载配置
firewall-cmd --reload
# 查看开放的防火墙端口
firewall-cmd --zone=public --list-ports