如何让别人能访问你的本地 phpmyadmin

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)


版权声明:本文为qq_29015953原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。