远程连接Linux下MySQL服务器
1. 工具
ubuntu 16.04
mysql-server
iptables
ufw
netstat
2. 安装
sudo apt-get install mysql-server
可以修改root用户的密码:
alter user ‘root’@’%’ identified by ‘xyz’;
其中‘%’表示连接到mysql服务器的所有机器,设置后将使用xyz作为登录密码。 如果alter user这种方法不行,用mysqladmin修改:
mysqladmin --user=root --password=root_old_password password "123456"
对于MySQL8.x,有些地方有差别
参考: https://dba.stackexchange.com/questions/210185/unsuccessfully-granting-privileges https://dev.mysql.com/doc/refman/8.0/en/grant.html
drop user root@localhost;
flush privileges;
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'root'@'%';
查看用户相关信息
show databases; use mysql; select user, host from user;
登录MySQL服务器:
3. 配置
要想让远程客户端访问MySQL服务器,一是要确定客户端访问没系统拦截;二是要配置mysql,授权用户访问。其中访问被拦截,客户端提示代码为2003-10060的错误,可以通过配置iptables或开启防火墙并添加mysql访问来解决。对于mysql没授权会提示代码1130的错误,可以通过授权用户解决。
3.1 iptables
未配置iptables是访问发生错误:
添加iptables访问规则:
服务器接受访问3306的端口,将数据流转移到网卡eth0。 可以查看iptables的配置:
3.2 ufw
当防火墙打开时,没有开放mysql访问端口时的错误:
打开ufw:
在打开时,提示是否及继续,继续的话ssh访问会受到影响,选择y。然后添加允许ssh访问。此外,当ufw diable后,将不能访问iptables配置,只有enable时才可以访问:
sudo ufw allow ssh
添加ssh后查看状态:
此时,ufw只允许ssh访问,其他如ftp,mysql,http等访问将被拦截。添加其他访问后的状态:
可以删除不想开放的服务端口:
3.3 mysql
远程连接MySQL服务器时,如未配置mysql访问权限,那么访问错误:
授权访问:
这里给任何机器授权以root用户和密码为root的访问。当然,在实际应用中这样的授权是不安全的,可以限制特定ip来访问mysql服务器,如:
grant all privileges on *.* to ‘root’@’127.0.0.1’ identified by ‘root’ with grant option
注意:上面的命令在MySQL8.x下报错,请参考第2步或官方文档。
最后,要想让其他任何机器连接MySQL服务器,修改mysql的bind-address配置:
bind-address = 127.0.0.1 是的网络状态:
bind-address = 127.0.0.1时的远程连接错误:
bind-address现在绑定的是本机的环回接口127.0.0.1,要想让其他机器访问,那么就要修改ip地址。这里直接注释这条语句,表示任何机器都可以远程连接MySQL服务器。 重启mysql服务,让配置生效:
重启后的网络监听状态:
此时,mysql服务监听任何连接mysql服务器的3306端口。 到现在,所有的配置已经完成。
4. 连接
本地用navicat连接:
如图,可以成功连接到远程MySQL服务器了。
当连接MySQL8.x服务端时,可能会出现如下错误:
解决办法是:
ALTER USER 'username'@'ip_address' IDENTIFIED WITH mysql_native_password BY '123456';
参考:https://github.com/passbolt/passbolt_docker/issues/103
5. 如何彻底卸载MySQL server
https://askubuntu.com/questions/640899/how-do-i-uninstall-mysql-completely
6. 参考资料
https://www.linux.com/blog/installing-and-using-mysql-ubuntu
http://blog.csdn.net/qq_16885135/article/details/53096451
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-14-04
https://www.cyberciti.biz/tips/linux-iptables-18-allow-mysql-server-incoming-request.html
https://theos.in/desktop-linux/tip-that-matters/how-do-i-restart-mysql-server/