1、程序启动代码分析:
Proxy 是单例模式的代理启动类,调用CommunicationThread类
public static void main(String[] args){
Proxy.getInstance().run();
}
CommunicationThread解析
CommunicationThread是个多线程类,用于front前段和back后端连接的桥梁,读取front前端的消息,发送给back后端,然后把back后端的返回结果,通过front写给前端工具(navcat or 应用程序),整个连接过程分四步走:
/**
Phase 1: From server to client. Send handshake packet.
Phase 2: From client to server. Send auth packet.
Phase 3: From server to client. send OK/ERROR packet.
Start communication.
*/
估计开源项目Mycat也是在此基础上面发展起来的
二、启动测试:
启动需要修改Backend中的后端数据库IP地址和端口号,以及前端连接对外的响应端口,根据个人需要,你也可以不修改前端端口,默认是50001,但是后端必须改。
public class Backend {
private static final int SERVER_PORT = 3306;
private static final String host = "127.0.0.1";
}
运行结果:
Get a connection.
SERVER:5.5.47
CLIENT:root
SERVER: OK
CLIENT:3:SET NAMES utf8
SERVER:OK affectedRows:0 message:null
CLIENT:1:
Get a connection.
SERVER:5.5.47
CLIENT:root
SERVER: OK
CLIENT:3:SET NAMES utf8
SERVER:OK affectedRows:0 message:null
CLIENT:3:SHOW VARIABLES LIKE 'lower_case_%'
SERVER:
-----------------------------------------------
Variable_nameValue
lower_case_file_systemON
lower_case_table_names1
-----------------------------------------------
CLIENT:3:SHOW VARIABLES LIKE 'profiling'
SERVER:
-----------------------------------------------
Variable_nameValue
profilingOFF
-----------------------------------------------
CLIENT:3:SHOW DATABASES
SERVER:
-----------------------------------------------
Database
information_schema
db1
db2
db3
mysql
performance_schema
test
-----------------------------------------------
Get a connection.
SERVER:5.5.47
CLIENT:root
SERVER: OK
CLIENT:3:SET NAMES utf8
SERVER:OK affectedRows:0 message:null
CLIENT:2:db1
SERVER:OK affectedRows:0 message:null
CLIENT:3:SELECT @@character_set_database, @@collation_database
SERVER:
-----------------------------------------------
@@character_set_database@@collation_database
utf8utf8_general_ci
-----------------------------------------------
CLIENT:3:SHOW FULL TABLES WHERE Table_type != 'VIEW'
SERVER:
-----------------------------------------------
Tables_in_db1Table_type
studentBASE TABLE
t_areaBASE TABLE
t_gaojsBASE TABLE
t_userBASE TABLE
-----------------------------------------------
Get a connection.
SERVER:5.5.47
CLIENT:root
SERVER: OK
CLIENT:3:SET NAMES utf8
SERVER:OK affectedRows:0 message:null
CLIENT:2:db1
SERVER:OK affectedRows:0 message:null
CLIENT:3:SHOW CREATE TABLE `student`
SERVER:
-----------------------------------------------
TableCreate Table
studentCREATE TABLE `student` (
`NO` char(20) NOT NULL DEFAULT '',
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`NO`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
-----------------------------------------------
CLIENT:3:SELECT * FROM `student` LIMIT 0, 1000
SERVER:
-----------------------------------------------
NOname
2012001gaojs
2012002gaojingsong
-----------------------------------------------
CLIENT:3:SHOW COLUMNS FROM `db1`.`student`
SERVER:
-----------------------------------------------
FieldTypeNullKeyDefaultExtra
NOchar(20)NOPRI
namevarchar(20)YES
-----------------------------------------------
CLIENT:1:
Get a connection.
SERVER:5.5.47
CLIENT:root
SERVER: OK
CLIENT:3:SET NAMES utf8
SERVER:OK affectedRows:0 message:null
CLIENT:2:db1
SERVER:OK affectedRows:0 message:null
CLIENT:3:SHOW CREATE TABLE `t_area`
SERVER:
-----------------------------------------------
TableCreate Table
t_areaCREATE TABLE `t_area` (
`id` int(11) NOT NULL,
`t_name` varchar(20) DEFAULT NULL,
`_mycat_op_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
-----------------------------------------------
CLIENT:3:SELECT * FROM `t_area` LIMIT 0, 1000
SERVER:
-----------------------------------------------
idt_name_mycat_op_time
1北京2017-02-02 10:30:46
-----------------------------------------------
CLIENT:3:SHOW COLUMNS FROM `db1`.`t_area`
SERVER:
-----------------------------------------------
FieldTypeNullKeyDefaultExtra
idint(11)NOPRI
t_namevarchar(20)YES
_mycat_op_timetimestampYESon update CURRENT_TIMESTAMP
-----------------------------------------------
CLIENT:1:
Get a connection.
SERVER:5.5.47
CLIENT:root
SERVER: OK
CLIENT:3:SET NAMES utf8
SERVER:OK affectedRows:0 message:null
CLIENT:2:db1
SERVER:OK affectedRows:0 message:null
CLIENT:3:SHOW CREATE TABLE `t_gaojs`
SERVER:
-----------------------------------------------
TableCreate Table
t_gaojsCREATE TABLE `t_gaojs` (
`uuid` int(11) NOT NULL AUTO_INCREMENT,
`id` int(11) DEFAULT NULL,
`address` varchar(20) DEFAULT NULL,
PRIMARY KEY (`uuid`),
KEY `index_name` (`id`),
KEY `index_address` (`address`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
-----------------------------------------------
CLIENT:3:SELECT * FROM `t_gaojs` LIMIT 0, 1000
SERVER:
-----------------------------------------------
uuididaddress
13中国3
26中国6
39中国9
-----------------------------------------------
CLIENT:3:SHOW COLUMNS FROM `db1`.`t_gaojs`
SERVER:
-----------------------------------------------
FieldTypeNullKeyDefaultExtra
uuidint(11)NOPRIauto_increment
idint(11)YESMUL
addressvarchar(20)YESMUL
-----------------------------------------------
CLIENT:1:
Get a connection.
SERVER:5.5.47
CLIENT:root
SERVER: OK
CLIENT:3:SET NAMES utf8
SERVER:OK affectedRows:0 message:null
CLIENT:2:db1
SERVER:OK affectedRows:0 message:null
CLIENT:3:SHOW CREATE TABLE `t_user`
SERVER:
-----------------------------------------------
TableCreate Table
t_userCREATE TABLE `t_user` (
`id` int(11) NOT NULL DEFAULT '0',
`userName` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
-----------------------------------------------
CLIENT:3:SELECT * FROM `t_user` LIMIT 0, 1000
SERVER:
-----------------------------------------------
iduserName
10test_mycat
2gaojingsong
-----------------------------------------------
CLIENT:3:SHOW COLUMNS FROM `db1`.`t_user`
SERVER:
-----------------------------------------------
FieldTypeNullKeyDefaultExtra
idint(11)NOPRI0
userNamevarchar(100)YES
-----------------------------------------------
CLIENT:1:
相关推荐
当Mysql启动的时候会依次读取这几个文件,最终的配置以最后被读到的为准。 安装MySQL会产生5个用户,3个root用户,2个匿名用户。 root@127.0.0.1,root@localhost,root@hostname @localhost,@hostname 可以使用...
04-mysql主从通过mysql-proxy程序实现读写分离.doc 老男孩linux测试读写分离php网站源代码.zip 第十二部 MySQL高可用工具heartbeat实战(33节) 01-heartbeat介绍与作用.avi 02-Heartbeat的工作原理与服务切换...
sockets的proxy,每创建一种Service,Proxy主要从etcd获取Services和Endpoints的配置信息,或者也可以从file获取,然后根据配置信息在Minion上启动一个Proxy的进程并监听相应的服务端口,当外部请求发生时,Proxy会...
学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...
2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...
媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯...
同时也新增了非常多的测试用例,做到测试从最底层 RocksDB,到 Raft,再到 Transaction,然后是 SQL 都能覆盖。 在 Chaos 测试上面,TiDB 引入了更多的错误注入工具,例如使用 systemtap 对 I/O 进行 delay 等,也...
全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并着重分析了“拖库”事件时黑客所使用的攻击手段。此外,还介绍了渗透测试工程师其他的一些...