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

http://stackoverflow.com/questions/13208614/restricting-mysql-connections-from-localhost-to-improve-security

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/

http://stackoverflow.com/questions/5864242/how-to-test-which-port-mysql-is-running-on-and-whether-it-can-be-connected-to