-
Notifications
You must be signed in to change notification settings - Fork 122
sqlautoreview setup
-
安装jdk 1.6 网上有很多资料,google一下
-
配置环境变量 环境变量只需要配置JAVA_HOME,PATH两个环境变量,示例如下: $cat .bash_profile # .bash_profile
if [ -f ~/.bashrc ]; then . ~/.bashrc fi
export JAVA_HOME= /opt/install/jdk-1.6.0_26 export PATH=$JAVA_HOME/bin:$HOME/bin:$PATH 3. sqlautoreview程序上传,以及解压 将程序sqlautoreview-0.0.1-SNAPSHOT-sqlautoreview.tar.gz文件上传到linux服务器上,执行如下的解压命令:
+ $tar -xzvf sqlautoreview-0.0.1-SNAPSHOT-sqlautoreview.tar.gz sqlautoreview-0.0.1-SNAPSHOT/lib/dom4j-1.6.1.jar sqlautoreview-0.0.1-SNAPSHOT/lib/xml-apis-1.0.b2.jar sqlautoreview-0.0.1-SNAPSHOT/lib/mysql-connector-java-5.1.18.jar sqlautoreview-0.0.1-SNAPSHOT/lib/log4j-1.2.15.jar sqlautoreview-0.0.1-SNAPSHOT/lib/mail-1.4.jar sqlautoreview-0.0.1-SNAPSHOT/lib/activation-1.1.jar sqlautoreview-0.0.1-SNAPSHOT/lib/jms-1.1.jar sqlautoreview-0.0.1-SNAPSHOT/lib/jmxtools-1.2.1.jar sqlautoreview-0.0.1-SNAPSHOT/lib/jmxri-1.2.1.jar sqlautoreview-0.0.1-SNAPSHOT/lib/sqlautoreview-0.0.1-SNAPSHOT.jar sqlautoreview-0.0.1-SNAPSHOT/bin/log4j.xml sqlautoreview-0.0.1-SNAPSHOT/bin/start_createindex.sh sqlautoreview-0.0.1-SNAPSHOT/bin/start_xmltosql.sh sqlautoreview-0.0.1-SNAPSHOT/bin/tools-run-class.sh sqlautoreview-0.0.1-SNAPSHOT/conf/productdb.xml sqlautoreview-0.0.1-SNAPSHOT/conf/sqlmapfile.xml sqlautoreview-0.0.1-SNAPSHOT/conf/sqlreviewdb.xml
+ 4. 创建存放日志的目录 进入sqlautoreview解压过后的目录,创建logs目录,程序运行的所有的日志文件都放在这个地方. $cd sqlautoreview-0.0.1-SNAPSHOT
$ls bin conf lib
$mkdir logs
$ls bin conf lib logs
$pwd /home/danchen/ sqlautoreview-0.0.1-SNAPSHOT /logs
修改/home/danchen/ sqlautoreview-0.0.1-SNAPSHOT /bin目录下的log4j.xml日志输出配置文件,将路径改成/home/danchen/ sqlautoreview-0.0.1-SNAPSHOT /logs,你可以根据自己的系统设置日志的输出路径.
-
配置sqlautoreview程序的配置文件 进入conf目录,下面会出现三个配置文件
$cd conf
$ls productdb.xml sqlmapfile.xml sqlreviewdb.xml
productdb.xml是这些SQL即将在哪个数据库上运行,即目标数据库的配置信息,会包括ip,port,dbname,user,password. 下面是配置文件的示例内容: <?xml version="1.0" encoding="UTF-8"?> <database> <ip>192.168.168.100</ip> <port>3306</port> <dbname>testdb</dbname> <user>test</user> <password>test</password> </database>
Sqlmapfile.xml配置文件主要是配置java sqlmapfile的两个信息,一个file_id字段,你可以随意指定一个数字,最好不要与以前的指定相同; 另外一个字段为sqlmap的filename,这个必须要包含绝对路径,以下是一个linux下此路径的范例: <?xml version="1.0" encoding="UTF-8"?> <sqlmapfile> <file_id>-500</file_id> <file_name>/home/danchen/itemonlinedetail_sqlmap.xml</file_name> </sqlmapfile>
如果在windows下,此路径需要写成如下的形式,即路径中的\,要变成\\ <?xml version="1.0" encoding="UTF-8"?> <sqlmapfile> <file_id>-20</file_id> <file_name>D:\\itemonlinedetail_sqlmap.xml</file_name> </sqlmapfile>
sqlreviewdb.xml配置文件的结构与productdb.xml相同,这个是sqlautoreview自己的数据库,所有审核的SQL,以及审核结果都会放在这个数据库里.此配置文件的示例如下: <?xml version="1.0" encoding="UTF-8"?> <database> <ip>192.168.168.200</ip> <port>3306</port> <dbname>sqlreview</dbname> <user>danchen</user> <password>hellodanchen</password> </database> 在示例的192.168.168.200 mysql上创建sqlreviewdb, `create database sqlreviewdb character set GBK;
grant select,update,delete,insert on sqlreviewdb.* to danchen@"%" identified by "sqlautoreview"; Query OK, 0 rows affected (0.00 sec)`
以及xmltosql, mergeresult表,xmltosql, mergeresult的表结构如下:
`
CREATE TABLE xmltosql
(
id
int(11) NOT NULL AUTO_INCREMENT,
sqlmap_file_id
int(11) NOT NULL,
java_class_id
varchar(200) NOT NULL,
sql_xml
varchar(4000) NOT NULL,
sql_comment
varchar(200) DEFAULT NULL,
real_sql
varchar(4000) NOT NULL,
real_sql_hash
varchar(32) DEFAULT NULL,
table_name
varchar(100) DEFAULT NULL,
status
int(11) DEFAULT NULL,
auto_review_err
varchar(200) DEFAULT NULL,
auto_review_tip
varchar(200) DEFAULT NULL,
auto_review_time
datetime DEFAULT NULL,
sql_auto_index
varchar(200) DEFAULT NULL,
dba_review_time
datetime DEFAULT NULL,
sql_dba_index
varchar(200) DEFAULT NULL,
dba_advice
varchar(200) DEFAULT NULL,
gmt_create
datetime NOT NULL,
gmt_modified
datetime NOT NULL,
PRIMARY KEY (id
),
KEY idx_java_class_id
(java_class_id
)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
CREATE TABLE mergeresult
(
id
int(11) NOT NULL AUTO_INCREMENT,
sqlmap_file_id
int(11) NOT NULL,
tablename
varchar(30) DEFAULT NULL,
real_tablename
varchar(30) DEFAULT NULL,
exist_indexes
varchar(4000) DEFAULT NULL,
new_indexes
varchar(4000) DEFAULT NULL,
merge_result
varchar(4000) DEFAULT NULL,
gmt_create
datetime NOT NULL,
gmt_modified
datetime NOT NULL,
PRIMARY KEY (id
),
KEY idx_result_sqlmap_file_id
(sqlmap_file_id
)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
`
6. 运行sqlautoreview程序
进入到bin目录下,对三个shell脚本,加上可执行+x的权限
$chmod +x *.sh
$ls -l total 20 -rw-r—r-- 1 danchen users 1900 Jan 9 09:36 log4j.xml -rwxr-xr-x 1 danchen users 85 Jan 9 09:36 start_createindex.sh -rwxr-xr-x 1 danchen users 84 Feb 15 11:39 start_mergeindex.sh -rwxr-xr-x 1 danchen users 82 Jan 9 09:36 start_xmltosql.sh -rwxr-xr-x 1 danchen users 422 Jan 9 09:36 tools-run-class.sh 在上面三个.cnf文件配置好的情况下,首先需要执行start_xmltosql.sh脚本,这个脚本完成的功能是把sqlmapfile.xml中配置的sqlmapfile从XML文件中解析出来,放入到sqlreviewdb数据库中。
$./start_xmltosql.sh 如果log4j.xml配置的log4j log level为info,你会看到解析出来的SQL语句.
第二步执行创建索引的脚本,这个会读取sqlreviewdb中待审核的SQL语句,解析SQL,根据规则生成创建索引的脚本,并保存到sqlreviewdb中,整个审核结束。
$./start_createindex.sh 如果log4j.xml配置的log4j log level为info,你会看到审核的一些细节,如果为debug会看到更多的细节。
Tips: 1. 支持MySQL,不支持Oracle 2. 不支持含有子查询的SQL 3. 支持普通的单表查询 4. 支持单表使用别名的查询 5. 支持单表的标准的分页 6. 支持多表的join
第三步是执行索引merge的脚本,
$./start_mergeindex.sh 这个会读取sqlreviewdb中的生成的索引,以及这次审核所涉及的表上原有的索引,应用一些规则,进行索引的自动合并,生成最后的变更脚本.