1.工作环境和前置工作
环境
win10
xampp
有一个静态IP地址
进入mysql的方法
打开cmd,先用cd指令切换到…\xampp\mysql\bin的目录下(如我的xampp是在F:\Program\xampp\mysql\bin)
输入mysql -h localhost -u root -p
进入MariaDB
选项 | 描述 |
---|---|
-h | 服务器名 |
localhost | 本地 |
-u | 数据库用户名 |
rootmysql | 默认的用户名 |
-p | 密码(如果输入p回车后依旧需要输入密码) |
输入use mysql
进入至mysql
接下来就可以直接输入sql指令
查看某个端口是否可远程连入
talentIP Port
例 telnet 140.125.95.10 80
查看各端口连接状态
netstat -an
2.更改相关配置文件
(1)
修改Apache Config里的config.inc.php,也可以在…\xampp\phpMyAdmin 目录下找到
(不要修改config.default.php,可以参考config.default.php里的设置,将希望设定的选项复制到config.inc.php里就可以生效,注意去除注释)
在打开后更改几个参数
将$cfg[‘Servers’][$i][‘auth_type’] =的值修改为** cookie**(通常情况下原本应该是config)
cookie模式下登录phpmyadmin需要数据用户名和密码进行验证,比较安全
$cfg[‘Servers’][$i][‘host’] = IP/localhost(由于我的phpmyadmin和mysql都在一台机器上,所以值还是保留原本的localhost)
$cfg[‘Servers’][$i][‘port’] = 端口号 (如果是3306则不用更改)
3.授权允许外部访问
1).GRANT ALL PRIVILEGES ON *.* TO 'username'@'ip' IDENTIFIED BY 'userpasswd' WITH GRANT OPTION;
例如:
GRANT ALL PRIVILEGES ON . TO ‘tom’@‘xxx.xxx.xxx.xxx’ IDENTIFIED BY ‘123’ WITH GRANT OPTION;
允许用户tom从ip为xxx.xxx.xxx.xxx的主机连接到mysql服务器,并使用123作为密码
2).关闭防火墙或在入站规则里设置例外端口(在win10防火墙高级设置里的入站规则我有设置3306和80)
3).在修改完这些参数后,保存,重开apache和mysql,尝试用别的电脑访问这台电脑的phpmyadmin(),出现如下错误
修改 httpd-xampp.conf 这个文件
打开之后找到alias/phpmyadmin …/xampp/phpMyAdmin这一条
将<Directory> …</Directory>里的值修改为下图所示,然后保存,重开apache和mysql
出现以下界面代表外部能正常访问到这台电脑(服务器)的phpmyadmin
在浏览器输入服务器信息(服务器栏格式是xxx.xxx.xxx.xxx:xxxx) (ip+端口号)、用户名、密码后登陆
(如果出现登陆不了,需要去设置要登陆的账户的权限)
4 项目链接mysql资料库
当外部能访问后,就可以尝试和项目进行连接,这里以java为例
public class DBMgr {
private static final String dbUrl = "jdbc:mysql://140.125.95.10/group1?serverTimezone=UTC&characterEncoding=UTF-8";
private static final String dbUsr = "php";
private static final String dbPwd = "admin";
private static Connection conn;
private static ResultSet rs;
static ResultSet rsNum;
public DBMgr() {
}
public void connectionDatabase() {
try {
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
System.out.println("驱动加载成功");
}catch (Exception e) {
System.out.println(驱动加载失败");
}
try {
conn = DriverManager.getConnection(dbUrl, dbUsr, dbPwd);
System.out.println("数据库连接成功");
}catch (Exception e) {
System.out.println("数据库连接失败");
}
}
}
问题点
1.Communications link failure
Mysql服务器默认的“wait_timeout”是8小时,当一个connection空闲超过8个小时,Mysql将自动断开该connection,进而抛出异常
可以以下指令查看
mysql > show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
如果看到这个则说明还未修改,可以尝试将mysql的全局变量wait_timeout的值修改为最大 (windows和linux下wait_timeout的最大值分别是24天和365天)
在my.ini增加一行 wait_timeout=2073600
(3600x24x24=2073600)