***************************************************************************

部署MySQL自动化运维工具inception+archer 2018年03月28日 leo

***************************************************************************

服务器

***************************************************************************

10.10.3.70

--配置工程师及审核人

http://10.10.3.70:8080/admin/sql/users/

--配置主库地址

http://10.10.3.70:8080/admin/sql/master_config

--主页

http://10.10.3.70:8080/login/

--用户

admin 123456

dba 123456

安装inception

***************************************************************************

--安装inception工具

yum -y install cmake bison ncurses-devel gcc gcc-c++ openssl-devel

cd /opt

wget https://github.com/mysql-inception/inception/archive/master.zip

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"

make && make install

--编辑参数文件

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 #表示在建表或者建库时支持的字符集,如果需要多个,则用逗号分隔,影响的范围是建表、设置会话字符集、修改表字符集属性等

--启动

nohup /usr/local/inception/bin/Inception --defaults-file=/etc/inc.cnf &

netstat -tulpn | grep 6669 //inception的默认端口是6669

/usr/local/inception/bin/mysql -uroot -h127.0.0.1 -P6669 //联接inception,和mysql一样的方式

inception get variables; //查看inception的所有参数

删除python

***************************************************************************

--删除现有Python

rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps ##强制删除已安装程序及其关联

whereis python |xargs rm -frv ##删除所有残余文件 ##xargs,允许你对输出执行其他某些命令

whereis python ##验证删除,返回无结果

--删除现有的yum

rpm -qa|grep yum|xargs rpm -ev --allmatches --nodeps

whereis yum |xargs rm -frv

archer安装部署

***************************************************************************

--版本

python:3.4

django:1.8

mysql : 5.6以上

linux : 64位linux

--安装archer

mkdir -p /opt/archer_web/

cd /opt/archer_web

yum -y install git

git clone https://github.com/jly8866/archer.git

--安装python3

cd /opt

wget https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz

tar -zxvf Python-3.4.1.tgz

cd Python-3.4.1

./configure --prefix=/opt/python3 && make && make install

vim /etc/profile

添加:export PATH="/opt/python3/bin:$PATH"

source /etc/profile

python3

--安装setuptools

cd /opt

wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26

tar -zxvf setuptools-19.6.tar.gz

cd setuptools-19.6

python3 setup.py build

python3 setup.py install

可以看到安装到python3下面了

--安装pip

cd /opt

wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb

tar -zxvf pip-8.0.2.tar.gz

cd pip-8.0.2

python3 setup.py build

python3 setup.py install

--安装Django

cd /opt

wget https://pypi.python.org/packages/44/41/bf93934082e9897a56a591a67bacbd9fb74e71244f3f42253432a9e627e6/Django-1.8.17.tar.gz#md5=e76842cdfbcb31286bd44f51e087a04c

tar -zxvf Django-1.8.17.tar.gz

cd Django-1.8.17

python3 setup.py install

python3

>>> import django

>>> django.VERSION

(1, 8, 17, 'final', 0)

>>> exit()

--安装Crypto和pymysql

pip3 install Crypto

pip3 install pycrypto

pip3 install pymysql

这里遇到了错误

# pip3 install Crypto

-bash: ./pip3: /usr/bin/python3: bad interpreter: No such file or directory

解决方法:

python3.4 -m pip install Crypto

或者

vim /opt/python3/bin/pip3

将#!/usr/bin/python3改为#!/opt/python3/bin/python3.4

# vim /opt/python3/lib/python3.4/site-packages/pymysql/connections.py

在if int(self.server_version.split(‘.’, 1)[0]) >= 5: 这一行之前加上以下这一句并保存,记得别用tab键用4个空格缩进:

self.server_version = '5.6.24-72.2-log'

--配置archer

cd /opt/archer_web/archer

--创建archer DB和inception DB

--进入安装的mysql5.6

mysql -uroot -p'P@ssw0rd' -S /mydata/mysql/mysql3306/mysql.sock

--grant all privileges on *.* to root@'%' identified by 'P@ssw0rd';

create database archer default character set utf8;

grant all on archer.* to archer_rw@'%' identified by 'P@ssw0rd';

create database inception_db default character set utf8;

grant all on inception_db.* to incep_rw@'%' identified by 'P@ssw0rd';

grant select,create,insert on *.* to incep_rw@'%' identified by 'P@ssw0rd';

create database test default character set utf8; #测试库 建在审核库里了 仅做测试

grant all on test.* to test@'%' identified by 'P@ssw0rd';

flush privileges;

--修改/opt/archer_web/archer/archer/settings.py,如下内容:

vi /opt/archer_web/archer/archer/settings.py

#该项目本身的mysql数据库地址

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME': 'archer',

'USER': 'archer_rw',

'PASSWORD': 'P@ssw0rd',

'HOST': '127.0.0.1',

'PORT': '3306'

}

}

#inception组件所在的地址

INCEPTION_HOST = '10.10.3.70'

INCEPTION_PORT = '6669'

#查看回滚SQL时候会用到,这里要告诉archer去哪个mysql里读取inception备份的回滚信息和SQL.

#注意这里要和inception组件的inception.conf里的inception_remote_XX部分保持一致.

INCEPTION_REMOTE_BACKUP_HOST='10.10.3.70'

INCEPTION_REMOTE_BACKUP_PORT=3306

INCEPTION_REMOTE_BACKUP_USER='incep_rw'

INCEPTION_REMOTE_BACKUP_PASSWORD='P@ssw0rd' 这个用户就是在部署inception使用的用户。(这用户应该是和上面创建的incep_rw是一个用户,可以不用创建incep_rw)

--通过model创建archer本身的数据库表

cd /opt/archer_web/archer

pip3 install django_admin_bootstrapped

python3 manage.py makemigrations

python3 manage.py makemigrations sql

python3 manage.py migrate

进入数据库查看archer库下的表是否存在

--创建django admin管理员

python3 manage.py createsuperuser

Username: admin 自己填写用户名

Email address: 邮箱

Password: 密码

Password (again): 确认密码

Superuser created successfully.

该用户可以登录django admin来管理model。

--启动acher

vi debug.sh

#!/bin/bash

python3 manage.py runserver 10.10.3.70:9123 端口为9123 此处改为8080了

nohup sh debug.sh 2&>1 &

--创建archer系统登录用户

pip3 install simplejson

通过浏览器访问http://10.10.3.70:8080/admin/sql/users/

可以看到django登录界面:

使用上面创建的用户名密码(admin/和密码)登录:

点击右侧Add用户配置,用户名密码自定义,至少创建一个工程师和一个审核人(用admin用户可以登录)后续新的工程师和审核人用户请用LDAP导入sql_users表或django admin增加

--配置主库地址

通过浏览器访问http://10.10.3.70:8080/admin/sql/master_config

点击右侧Add master_config。这一步是为了告诉archer你要用inception去哪些mysql主库里执行SQL,所用到的用户名密码、端口等。

--正式访问主页

http://10.10.3.70:8080/login/

发起脚本如:

use mysql;

create table t (id int(10));

insert into t values(1);

insert into t values(2);

commit;

select * from t;

如报错:/opt/python3/lib/python3.4/site-packages/pymysql/connections.py in _request_authentication, line 1113

解决办法:

vi /opt/python3/lib/python3.4/site-packages/pymysql/connections.py

... ...

def _request_authentication(self):

# https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::HandshakeResponse

self.server_version = '5.6.24-72.2-log' #添加此行

if int(self.server_version.split('.', 1)[0]) >= 5:

... ...

如果遇到rollback的问题,就是给权限的问题,inception配置的连接的数据库的用户的权限,在

grant select,create,insert on *.* to incep_rw@'%' identified by 'P@ssw0rd';

也就是我配置的admin的用户。

inception源码地址:https://github.com/mysql-inception/inception

archer 源码地址:https://github.com/jly8866/archer

mysql 自动化运维工具_部署MySQL自动化运维工具inception+archer相关推荐

  1. mysql运维机制_《MySQL运维内参》节选 | InnoDB日志管理机制(一)

    引 子 InnoDB 存储引擎是支持事务ACID特性的,它是以二十多年前IBM的一篇著名文章<ARIES:A Transaction Recovery Method Supporting Fin ...

  2. linux备份mysql需要暂停服务吗_【MySQL运维】线上MySQL数据库停服迁移流程

    一.数据备份与恢复阶段,选在凌晨1点进行操作,暂停服务进行备份(允许停服2个小时) 1.首先停止Nginx服务,并且修改数据库用户密码,防止还有新的连接进来 2.杀掉某个用户所有进程 for i in ...

  3. innodb 集群_部署MySQL InnoDB集群以实现高可用性

    innodb 集群 In this article, I am going to explain how we can deploy the MySQL InnoDB cluster. InnoDB ...

  4. 支持mysql的报表开发工具_你不知道的mysql的3W法,内附超好用的报表工具

    WHAT? 什么是MySQL? MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. WHY?为什么需要MySQL ...

  5. mysql编程的二维数组_调出mysql中数据,输出一个二维数组的表格

    1.使用DDL语句创建数据库.创建表. mysql> show databases; +--------------------+ | Database | +----------------- ...

  6. mysql表损坏自动修复工具_对MySQL数据表(已损坏)的修复

    以下的文章主要讲述的是如何正确修复已损坏的MySQL数据表,主要是了两种方法,一种是check table与 repair table ,一种是通过myisamchk, isamchk ,于断电或非正 ...

  7. mysql注入扫描网站漏洞工具_国产SQL注入漏洞测试工具 - 超级SQL注入工具(SSQLInjection)...

    此工具为本人对C#.Socket及HTTP协议.SQL注入进行深入研究后,闲暇时间做的一款SQL注入工具.不说秒SQLMap,直接秒杀什么webcruiser.Safe3SI.pangolin.hav ...

  8. keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践

    MySQL在互联网应用中已经遍地开花,但是在银行系统中,还在生根发芽的阶段.本文记录的是根据某生产系统实际需求,对数据库高可用方案从需求.各高可用技术特点对比.实施.测试等过程进行整理,完善Mysql ...

  9. mac下安装mysql 5.7.11卡住_【mysql】Mac下安装mysql5.7 完整步骤,大坑已解决

    最近使用Mac系统,准备搭建一套本地web服务器环境.因为Mac系统自带PHP和apach,但是没有自带mysql,所以要手动去安装mysql,本次安装mysql最新版5.7.17. 1.官网下载 点 ...

最新文章

  1. java培训基础知识都学哪些
  2. 脑与认知科学1 脑的基本结构下
  3. Win server 2012 R2 文件服务器--(三)配额限制
  4. OpenCV Hit or Miss 击中或没打中的实例(附完整代码)
  5. php 判斷數據庫表是否存在,phpl判斷mysq數據庫中的某個數據表是否存在的方法總結...
  6. @Transactional注解导致 多数据源@DS无效 的解决方案
  7. Python学习笔记:函数(Function)
  8. i计算机网络的应用程序,计算机网络技术及其在校园网的研究与应用毕业论文.doc...
  9. Advanced+Apple+Debugging(2)
  10. 深层和浅层特征融合的坑
  11. 解决IE兼容性试图模式下,jQuery.min.js的“JSON”未定义
  12. 2019下半年计算机二级c语言,2019年下半年计算机二级C语言试题(4)
  13. Ubuntu 无法解析域名
  14. 华为ENSP(VRP)命令行
  15. Python 自动化提取基因的 CDS
  16. Guitar Pro8电脑版更新下载及主要功能介绍
  17. 如何使用MacBook更省电,Macbook电池应注意事项
  18. 2013年09月27日
  19. PS2键盘第二套键盘扫描码学习发现
  20. HTTP_Wireshark

热门文章

  1. 邮件被暴力破解邮件网关如何解决
  2. 机房几台终端电脑,本地连接中不停的出现连接和断开,网络不通,解决方法...
  3. javascritp笔记1
  4. C#进行Visio二次开发之知识点考核试题
  5. python sys模块 输入输出 错误流
  6. golang 接口类型 interface 简介
  7. Weblogic IIOP反序列化漏洞(CVE-2020-2551) 漏洞分析
  8. linux ssh连接 出现 Host key verification failed 错误 解决方法
  9. linux ssh 报错 Failed to start OpenSSH Server daemon
  10. python3 value查key的三种方法