搭建远程 mysql 服务器
环境
- ubuntu18.04
安装 mysql
# 安装 mysql 服务端
$sudo apt install mysql-server
# 安装 mysql 客户端
$sudo apt install mysql-client
登陆mysql
输入以下代码后,直接回车,因为我是新安装的所以,不需要输入密码即可登陆成功
$mysql -u root -p
查看全部用户和用户权限
发现所有的用户只能够本地访问 mysql 服务器
mysql> SELECT user, host FROM user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.01 sec)
创建一个新用户,开启远程访问
虽然我们可以直接用 root 用户远程访问 mysql 服务器,这里我新创建一个用户
# 使用 root 登陆后,进入 mysql 数据库
mysql>use mysql;
# 新创建一个用户,%匹配所有服务器
# 用户名 : 登陆用户名
# % : 能够访问该数据库的 IP 地址,%匹配全部 IP 地址
# 用户名密码 : 用户名密码
mysql>create user '用户名'@'%' identified by '用户名密码';
# 对新创建的用户授权,这里的是授权所有功能
mysql>grant all privileges *.* to '用户名'@'%';
# 刷新
mysql>flush privileges;
查看用户表
发现 kyfxb 允许全部 IP 访问
mysql> SELECT user, host FROM user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| kyfxb | % |
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.01 sec)
如果 host 为 % 表示允许全部 IP 访问该用户,如果 host 不为 % 可以手动更新
修改 host 为 %
mysql> USE mysql
Database changed
mysql> UPDATE USER SET host = '%' WHERE user = '用户名'
由于我使用的是阿里云的服务器,还要开启mysql默认端口3306
控制台>轻量应用服务器>点击自己的服务器>安全>防火墙>添加一条规则
查看 MySQL 监听的端口
root@iZuf683kkxxmx5ts3b6mniZ:~# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 7777/mysqld
如果不是 0.0.0.0:3306 则需要修改 MySQL 配置文件
MySQL 配置文件
/etc/mysql/mysql.conf.d
修改 MySQL 监听所有 IP 地址
修改 mysql 服务器配置文件
# 在 mysqld 下面添加或者替换一个属性
[mysqld]
bind-address=0.0.0.0 #监听全部地址或者指定的ip地址
重启 mysql 服务
$service mysql restart
查看端口情况
netstat -anpt
端口情况
使用 idea 测试连接
连接状况
没有连接成功
报错
com.intellij.execution.ExecutionException: Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
暂时没有解决,目前猜测是内存不够,后续再测试一下
如上猜测正确,释放一些内存后,控制来连接成功,但是 idea 提供的 Database 仍然没有连接成功
package xyz.group.kyfxb.config;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @package xyz.group.kyfxb.config
* @title MysqlConnectorTest
* @description 测试连接远程 MySQL 服务器
* @author snowflake
* @date 2020/2/2 - 15:54
* @version v1.0
*/
public class MysqlConnectorTest {
private String url = "jdbc:mysql://<ip地址>:3306/kyfxb?serverTimezone=GMT&useSSL=true";
private String username = "kyfxb";
private String password = "kyfxb";
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@Test
public void testConnection() throws SQLException {
Connection con = DriverManager.getConnection(url, username, password);
System.out.println(con);
}
}
Connection 对象信息
com.mysql.cj.jdbc.ConnectionImpl@7d286fb6
17:14 Connection to [email protected] failed.
[08S01] Communications link failure.
The last packet successfully received from the server was 41 milliseconds ago. The last packet sent successfully to the server was 41 milliseconds ago.
ed.
[08S01] Communications link failure.
The last packet successfully received from the server was 41 milliseconds ago. The last packet sent successfully to the server was 41 milliseconds ago.