python安装opengauss数据库自动化脚本3.0.5版本
·
#安装单机的opengauss数据库
#数据库版本3.0.5
#安装路径默认路径/opt下
#其他版本替换对应下载文件地址
import paramiko
import time
#配置基础信息
ip=input("请输入公网ip地址:")
host=input("请输入私网ip地址:")
ecs_name=input("请输入服务器名称:")
password=input("请输入root密码:")
user=input("请输入安装用户名:")
#校验密码复杂度
def check(passwd: str):
if passwd=='':
return False
else:
#大小写
havealpha=passwd.swapcase()!=passwd
#数字
havedigit=any(each.isdigit() for each in passwd)
#长度
long=len(passwd)>=8
#输出
ret= havealpha and havedigit and long
return ret
#数据库登录密码
password_of_admin=''
#普通安装用户密码
password_of_omm=''
#配置数据库安装用户omm的密码
while not check(password_of_omm):
print("密码必须包含字母数字和特殊字符")
password_of_omm=input("请输入普通安装用户的账号密码")
#配置数据库的密码
while not check(password_of_admin):
print("密码必须包含字母数字和特殊字符")
password_of_admin=input("请输入数据库的账号密码")
#配置数据库安装的xml文件,安装目录默认/opt下,可自行更改
xml_data=('''<?xml version="1.0" encoding="utf-8"?>
<ROOT>
<CLUSTER>
<PARAM name="clusterName" value="single_test" />
<PARAM name="nodeNames" value="#服务器的主机名#"/>
<PARAM name="gaussdbAppPath" value="/opt/huawei/install/app" />
<PARAM name="gaussdbLogPath" value="/opt/huawei/log/omm" />
<PARAM name="tmpMppdbPath" value="/opt/huawei/tmp"/>
<PARAM name="gaussdbToolPath" value="/opt/huawei/install/om" />
<PARAM name="corePath" value="/opt/huawei/corefile"/>
<PARAM name="backIp1" value="#服务器ip#"/>
</CLUSTER>
<DEVICELIST>
<DEVICE sn="#服务器的主机名#">
<PARAM name="name" value="#服务器的主机名#"/>
<PARAM name="azName" value="AZ1"/>
<PARAM name="azPriority" value="1"/>
<PARAM name="backIp1" value="#服务器ip#"/>
<PARAM name="sshIp1" value="#服务器ip#"/>
<!-- dn -->
<PARAM name="dataNum" value="1"/>
<PARAM name="dataPortBase" value="15400"/>
<PARAM name="dataNode1" value="/opt/huawei/install/data/dn"/>
</DEVICE>
</DEVICELIST>
</ROOT>
''')
# 定义发送命令函数
def connect(cmds_):
try:
# 发送命令
for cmd_ in cmds_:
execute_.send(cmd_ + '\n')
time.sleep(1)
time.sleep(3)
output_ = execute_.recv(65535).decode()
print(output_)
except Exception as ex:
print("发送命令错误", ex)
#定义等待函数
def wait(sec):
for t in range(sec):
try:
# 发送命令
execute_.send('\n') # 请勿修改,程序依靠此bug运行
time.sleep(1)
output_ = execute_.recv(65535).decode()
print('#请稍候' + str(t) + '/' + str(sec) + output_)
if 'saved' in output_:
break
if t == 119:
raise ConnectionError('网络不佳,请求超时')
except Exception as ex:
print("发送加载命令错误", ex)
# 定义上传文件函数
def upload(file_name_, remote_path_):
try:
# 上传文件
sftp.put(file_name_, remote_path_)
except Exception as ex:
print("上传错误", ex)
# 定义发送转换命令函数
def sed(remote_path_):
try:
# 发送命令
execute_.send(f"sed -i 's/\\r//' {remote_path_}" + "\n") # 请勿修改,程序依靠此bug运行
time.sleep(1)
output_ = execute_.recv(65535).decode()
print(output_)
except Exception as ex:
print("发送转换命令错误", ex)
# 修改XML文件
with open(r'single.xml', 'w', encoding='utf-8') as file:
file.write(xml_data)
#替换的主机名
search_name = '#服务器的主机名#'
replace_name = ecs_name
#替换的ip地址
search_IP = '#服务器ip#'
replace_IP =host
with open(r'single.xml', 'r', encoding='utf-8') as file:
data = file.read()
data = data.replace(search_name, replace_name)
data = data.replace(search_IP, replace_IP)
data = data.replace('\r', '')
with open(r'single.xml', 'w', encoding='utf-8') as file:
file.write(data)
print('成功更改XML')
#实例化
con = paramiko.SSHClient()
#添加公钥
con.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接
con.connect(hostname=ip, username='root', password=password, look_for_keys=False, allow_agent=False)
#执行和上传实例化
execute_=con.invoke_shell()
sftp=paramiko.SFTPClient.from_transport(con.get_transport())
print("连服务器"+ip+"成功")
#安装数据库所需要的依赖包
cmds = ['cd /usr/bin',
'mv python python.bak',
'ln -s python3 /usr/bin/python',
'yum -y install tar bzip2 libaio-devel ']
connect(cmds)
print('成功修改python版本并安装libaio包')
wait(2)
#创建安装用户user
cmds=['groupadd dbgrp',
'useradd -G dbgrp '+user]
connect(cmds)
# 安装openGauss数据库
# 登录待安装的主机,创建目录
# 下载openGauss安装包
cmds = ['mkdir -p /opt/software/openGauss',
'chmod 755 -R /opt/software',
'cd /opt/software/openGauss',
'wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.0.5/x86/openGauss-3.0.5-CentOS-64bit-all.tar.gz',
]
connect(cmds)
print('开始下载opengauss3.0.5版本安装包')
wait(30)
#发送配置文件xml到安装目录下
filename = 'single.xml'
remote_path = '/opt/software/openGauss/' + filename
upload(filename, remote_path)
sed(remote_path)
print('成功配置XML')
# 在安装包所在的目录下,解压安装包
cmds = ['source /etc/profile',
'cd /opt/software/openGauss',
'tar -zxvf openGauss-3.0.5-CentOS-64bit-all.tar.gz']
connect(cmds)
wait(3)
print('解压安装包all完成')
#解压om包
cmds =['cd /opt/software/openGauss',
'tar -zxvf openGauss-3.0.5-CentOS-64bit-om.tar.gz']
connect(cmds)
print("解压安装包om完成")
wait(3)
#执行预安装
# 切换到gs_preinstall命令所在目录
# 创建openGauss omm用户互信
cmds = ['cd /opt/software/openGauss/script/',
'python gs_preinstall -U '+user+ ' -G dbgrp -X /opt/software/openGauss/single.xml']
connect(cmds)
print("请等待12s预安装。。")
time.sleep(20)
# print('成功请求互信')
# 是否创建user用户
cmds=['no']
connect(cmds)
time.sleep(1)
#开始正式安装
cmds=['chmod -R 755 /opt/software/openGauss/script/',
'su - '+user ,
'cd /opt/software/openGauss/script',
'python gs_install -X /opt/software/openGauss/single.xml']
connect(cmds)
print("请耐心等待1分钟左右开始安装。。")
#确认数据库密码
time.sleep(60)
cmds = [password_of_admin,password_of_admin]
connect(cmds)
print('数据库安装中,请耐心等待1分钟。。')
time.sleep(60)
cmds=['gs_om -t status --detail']
connect(cmds)
print("opengauss状态正常")
#上述操作创建的服务器安装用户密码不成功,重新刷新下
cmds=['echo '+password_of_omm+' | passwd --stdin '+user]
connect(cmds)
print("安装用户密码修改完成")
更多推荐
所有评论(0)