共计 9441 个字符,预计需要花费 24 分钟才能阅读完成。
本篇内容介绍了“Yearning + Inception SQL 审核平台搭建方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
Yearning 安装:
安装 Nginx
yum install nginx -y
按照顺序安装 MySQL
mysql-community-common-5.7.22-1.el6.x86_64.rpm
mysql-community-libs-5.7.22-1.el6.x86_64.rpm
mysql-community-client-5.7.22-1.el6.x86_64.rpm
mysql-community-server-5.7.22-1.el6.x86_64.rpm
Python 3.6 安装
解压
tar -xvf Python-3.6.4.tar.xz
创建目录
mkdir -p /usr/local/python/3.6.4/lib
编译
cd Python-3.6.4
./configure –enable-shared –prefix=/usr/local/python/3.6.4 LDFLAGS= -Wl,-rpath /usr/local/python/3.6.4/lib
make make install
软链接
cp /usr/bin/python /usr/bin/python2.6.6
ln -fs /usr/local/python/3.6.4/bin/python3.6 /usr/bin/python
ln -fs /usr/local/python/3.6.4/bin/pip3 /usr/bin/pip
yum 修改
vi /usr/bin/yum
将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6.6
Inception 安装
Inception 是集审核、执行、回滚于一体的一个自动化运维系统,它是根据 MySQL 代码修改过来的,用它可以很明确的,详细的,准确的审核 MySQL 的 SQL 语句,它的工作模式和 MySQL 完全相同,可以直接使用 MySQL 客户端来连接,但不需要验证权限,它相对应用程序(上层审核流程系统等)而言,是一个服务器,在连接时需要指定服务器地址及 Inception 服务器的端口即可,而它相对要审核或执行的语句所对应的线上 MySQL 服务器来说,是一个客户端,它在内部需要实时的连接数据库服务器来获取所需要的信息,或者直接在在线上执行相应的语句及获取 binlog 等,Inception 就是一个中间性质的服务。
依赖包安装
yum install gcc gcc-c++ cmake bison openssl-devel ncurses-devel git
下载源码包
git clone https://github.com/mysql-inception/inception.git(已经闭源,但是网上还能找到闭源之前的包)
编译安装 Inception
mkdir -p /usr/local/inception
mkdir -p /inception/{data,logs}
unzip master.zip -d /inception
cd /inception/inception-master
cmake -DWITH_DEBUG=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/inception -DMYSQL_DATADIR=/inception/data -DWITH_SSL=yes -DCMAKE_BUILD_TYPE=RELEASE -DWITH_ZLIB=bundled -DMY_MAINTAINER_CXX_WARNINGS= -Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Wno-unused-parameter -Woverloaded-virtual -DMY_MAINTAINER_C_WARNINGS= -Wall -Wextra -Wunused -Wwrite-strings -Wno-strict-aliasing -Wdeclaration-after-statement
CMake Error: The source /inception/inception-master/CMakeLists.txt does not match the source /opt/inception-master/CMakeLists.txt used to generate cache
rm -rf CMakeLists.txt 再执行
make make install
创建 inception 配置文件
– 编辑参数文件
vim /etc/inc.cnf
[inception]
general_log=1 #这个参数就是原生的 MySQL 的参数,用来记录在 Inception 服务上执行过哪些语句,用来定位一些问题等
general_log_file=/usr/local/inception/data/inception.log #设置 general log 写入的文件路径
port=6669 #Inception 的服务端口
socket=/usr/local/inception/data/inc.socket #Inception 的套接字文件存放位置
character-set-server=utf8 #mysql 原生参数
#Inception 审核规则
inception_check_autoincrement_datatype=1 #当建表时自增列的类型不为 int 或者 bigint 时报错
inception_check_autoincrement_init_value=1 #当建表时自增列的值指定的不为 1,则报错
inception_check_autoincrement_name=1 #建表时,如果指定的自增列的名字不为 ID,则报错,说明是有意义的,给提示
inception_check_column_comment=1 #建表时,列没有注释时报错
inception_check_column_default_value=0 #检查在建表、修改列、新增列时,新的列属性是不是要有默认值
inception_check_dml_limit=1 #在 DML 语句中使用了 LIMIT 时,是不是要报错
inception_check_dml_orderby=1 #在 DML 语句中使用了 Order By 时,是不是要报错
inception_check_dml_where=1 #在 DML 语句中没有 WHERE 条件时,是不是要报错
inception_check_identifier=1 #打开与关闭 Inception 对 SQL 语句中各种名字的检查,如果设置为 ON,则如果发现名字中存在除数字、字母、下划线之外的字符时,会报 Identifier invalidname is invalid, valid options: [a-z,A-Z,0-9,_].
inception_check_index_prefix=1 #是不是要检查索引名字前缀为 idx_,检查唯一索引前缀是不是 uniq_
inception_check_insert_field=1 #是不是要检查插入语句中的列链表的存在性
inception_check_primary_key=1 #建表时,如果没有主键,则报错
inception_check_table_comment=0 #建表时,表没有注释时报错
inception_check_timestamp_default=0 #建表时,如果没有为 timestamp 类型指定默认值,则报错
inception_enable_autoincrement_unsigned=1 #自增列是不是要为无符号型
inception_enable_blob_type=0 #检查是不是支持 BLOB 字段,包括建表、修改列、新增列操作 默认开启
inception_enable_column_charset=0 #允许列自己设置字符集
inception_enable_enum_set_bit=0 #是不是支持 enum,set,bit 数据类型
inception_enable_foreign_key=0 #是不是支持外键
inception_enable_identifer_keyword=0 #检查在 SQL 语句中,是不是有标识符被写成 MySQL 的关键字,默认值为报警。
inception_enable_not_innodb=0 #建表指定的存储引擎不为 Innodb,不报错
inception_enable_nullable=0 #创建或者新增列时如果列为 NULL,不报错
inception_enable_orderby_rand=0 #order by rand 时是不是报错
inception_enable_partition_table=0 #是不是支持分区表
inception_enable_select_star=0 #Select* 时是不是要报错
inception_enable_sql_statistic=1 #设置是不是支持统计 Inception 执行过的语句中,各种语句分别占多大比例,如果打开这个参数,则每次执行的情况都会在备份数据库实例中的 inception 库的 statistic 表中以一录存储这次操作的统计情况,每次操作对应一条记录,这条记录中含有的信息是各种类型的语句执行次数情况。
inception_max_char_length=16 #当 char 类型的长度大于这个值时,就提示将其转换为 VARCHAR
inception_max_key_parts=5 #一个索引中,列的最大个数,超过这个数目则报错
inception_max_keys=16 #一个表中,最大的索引数目,超过这个数则报错
inception_max_update_rows=10000 #在一个修改语句中,预计影响的最大行数,超过这个数就报错
inception_merge_alter_table=1 #在多个改同一个表的语句出现是,报错,提示合成一个
#inception 支持 OSC 参数
inception_osc_bin_dir=/user/bin #用于指定 pt-online-schema-change 脚本的位置,不可修改,在配置文件中设置
inception_osc_check_interval=5 #对应 OSC 参数 –check-interval,意义是 Sleep time between checks for –max-lag.
inception_osc_chunk_size=1000 #对应 OSC 参数 –chunk-size
inception_osc_chunk_size_limit=4 #对应 OSC 参数 –chunk-size-limit
inception_osc_chunk_time=0.1 #对应 OSC 参数 –chunk-time
inception_osc_critical_thread_connected=1000 #对应参数 –critical-load 中的 thread_connected 部分
inception_osc_critical_thread_running=80 #对应参数 –critical-load 中的 thread_running 部分
inception_osc_drop_new_table=1 #对应参数 –[no]drop-new-table
inception_osc_drop_old_table=1 #对应参数 –[no]drop-old-table
inception_osc_max_lag=3 #对应参数 –max-lag
inception_osc_max_thread_connected=1000 #对应参数 –max-load 中的 thread_connected 部分
inception_osc_max_thread_running=80 #对应参数 –max-load 中的 thread_running 部分
inception_osc_min_table_size=0 # 这个参数实际上是一个 OSC 的开关,如果设置为 0,则全部 ALTER 语句都走 OSC,如果设置为非 0,则当这个表占用空间大小大于这个值时才使用 OSC 方式。单位为 M,这个表大小的计算方式是通过语句:select (DATA_LENGTH + INDEX_LENGTH)/1024/1024 from information_schema.tables where table_schema = dbname and table_name = tablename 来实现的
inception_osc_on=0 #一个全局的 OSC 开关,默认是打开的,如果想要关闭则设置为 OFF,这样就会直接修改
inception_osc_print_none=1 #用来设置在 Inception 返回结果集中,对于原来 OSC 在执行过程的标准输出信息是不是要打印到结果集对应的错误信息列中,如果设置为 1,就不打印,如果设置为 0,就打印。而如果出现错误了,则都会打印
inception_osc_print_sql=1 #对应参数 –print
# 备份服务器信息,注意改成你的机器. 用于回滚。
inception_remote_system_password=P@ssw0rd
inception_remote_system_user=incep_rw
inception_remote_backup_port=3306
inception_remote_backup_host=10.10.3.70
inception_support_charset=utf8 #表示在建表或者建库时支持的字符集,如果需要多个,则用逗号分隔,影响的范围是建表、设置会话字符集、修改表字符集属性等
启动 Inception 程序
cd /usr/local/inception/bin
./Inception –defaults-file=/etc/inc.cnf
[1] 11179
[root@b28-11-92 bin]# 2019-06-21 15:00:31 0 [Note] Welcome to use Inception2.1.50
2019-06-21 15:00:31 11179 [Note] Server hostname (bind-address): * port: 6669
2019-06-21 15:00:31 11179 [Note] IPv6 is available.
2019-06-21 15:00:31 11179 [Note] – :: resolves to ::
2019-06-21 15:00:31 11179 [Note] Server socket created on IP: :: .
查看 Inception 进程
ps -ef | grep Inception
root 11179 30011 0 15:00 pts/1 00:00:00 ./Inception –defaults-file=/etc/inc.cnf
测试
mysql -uroot -h227.0.0.1 -P6669
连接成功后执行 inception get variables;
输出了所有的变量,表示已经启动成功了
Yearning 安装
git clone https://github.com/cookieY/Yearning.git
登录 MySQL 创建库 yearning 库
create database Yearning DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
安装相应 python 依赖库
cd Yearning/src
pip install -r requirements.txt
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting Django==2.1.5 (from -r requirements.txt (line 1))
Could not fetch URL https://pypi.python.org/simple/django/: There was a problem confirming the ssl certificate: Can t connect to HTTPS URL because the SSL module is not available. – skipping
Could not find a version that satisfies the requirement Django==2.1.5 (from -r requirements.txt (line 1)) (from versions:)
No matching distribution found for Django==2.1.5 (from -r requirements.txt (line 1))
修改 Setup 文件
Python-3.6.4/Modules
vim Setup
#Socket module helper for socket(2)
_socket socketmodule.c timemodule.c
#Socket module helper for SSL support; you must comment out the other
#socket line above, and possibly edit the SSL variable:
SSL=/usr/local/ssl
_ssl _ssl.c \
-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
-L$(SSL)/lib -lssl -lcrypto
重新编译
cd Python-3.6.4
./configure –enable-shared –prefix=/usr/local/python/3.6.4 LDFLAGS= -Wl,-rpath /usr/local/python/3.6.4/lib
make
make install
配置,编辑 Yearning/src/deploy.conf 文件
[mysql]
db = 所创建的库名
address = 数据库地址
port = 数据库端口
password = 数据库密码
username = 数据库用户
[host]
ipaddress = 服务器 ip 地址: 端口 (涉及跨域十分重要!! 设置不正确将无法登陆!!)
如 本机地址为 192.168.137.13 nginx 设置端口为 80
则应填写为 192.168.137.13:80 之后通过该地址访问平台。
[Inception]
ip = Inception 地址
port = Inception 端口
user = Inception 用户名
password = Inception 密码
backupdb = 备份数据库地址
backupport = 备份数据库端口
backupuser = 备份数据库用户名
backuppassword = 备份数据库密码
[LDAP] LDAP 相关设置
LDAP_SERVER = LDAP 服务地址
LDAP_SCBASE = LDAP dc 设置 如 dc=xxx,dc=com
LDAP_DOMAIN = LDAP 域名 如 xxx.com
[email] 邮箱推送相关设置
username = 邮箱发件账号 如 xxxx@163.com
password = 邮箱发件账号密码
smtp_server = 邮箱 stmp 地址, 具体地址请咨询对应邮箱提供者
初始化数据库
python manage.py makemigrations
python manage.py migrate
若报错 ModuleNotFoundError: No module named Crypto
pip install pycrypto
重新初始化数据库
python manage.py makemigrations
python manage.py migrate
添加初始化用户
echo from core.models import Account;Account.objects.create_user(username= admin , password= admin123456 , group= admin ,is_staff=1) | python manage.py shell
初始化权限
echo from core.models import grained;grained.objects.get_or_create(username= admin , permissions={ ddl : 1 , ddlcon : [], dml : 1 , dmlcon : [], dic : 1 , diccon : [], dicedit : 0 , query : 1 , querycon : [], user : 1 , base : 1 , dicexport : 0}) | python manage.py shell
复制编译好的静态文件到 nginx html 目录下(dist 目录通过 npm run build 生成)
cd Yearning/webpage/dist
cp -rf * /usr/share/nginx/html/
/etc/init.d/nginx restart
启动 django
cd Yearning/src
python manage.py runserver 0.0.0.0:8000
访问首页 http://192.168.17.77
注意事项:
使用默认账号: admin 密码:admin123456 登陆即可使用,可能会出现登陆不了的情况(无法跳转页面),这是由于跨域的问题,解决这个问题可以参考:http://blog.csdn.net/apple9005/article/details/54427902
注意事项
默认超级管理员只拥有各个页面的访问权限, 其他的权限需自行增加!详情请查看使用说明用户管理
由于 Inception 并不原生支持 pymysql,所以需更改 pymysql 相关源码
修改 $PYTHON_HOME/lib/python3.6/site-packages/pymysql 下
connections.py 和 cursors.py 两个文件
找到 connections.py 786 行
if int(self.server_version.split( . , 1)[0]) = 5:
self.client_flag |= CLIENT.MULTI_RESULTS
更改为:
try:
if int(self.server_version.split( . , 1)[0]) = 5:
self.client_flag |= CLIENT.MULTI_RESULTS
except:
if self.server_version.split(. , 1)[0] = Inception2 :
self.client_flag |= CLIENT.MULTI_RESULTS
找到 cursors.py
if self._result and (self._result.has_next or not self._result.warning_count):
return
更改为
if self._result:
return
“Yearning + Inception SQL 审核平台搭建方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!