python-paramiko的初步使用(二)mysql部署

12 篇文章 0 订阅

一、背景

自动化部署mysql

二、初步实现功能的脚本

import paramiko
import time
# 检验接收到的数据,来决定是否恶意进行下一步
def check_end(channel, end_str):
    buff = ''
    while not buff.endswith(end_str):
        resp = channel.recv(9999) # 获取数据,最大9999字节
        buff += resp.decode('utf-8')

def install_mysql():
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=server_host, port=server_port, username=server_user, password=server_password)
    transport = ssh.get_transport()
    # 实例化一个 sftp对象,指定连接的通道
    sftp = paramiko.SFTPClient.from_transport(transport)
    time.sleep(0.1)
    # 检查程序及对应目录
    stdin,stdout,stderr = ssh.exec_command('ps -ef|grep mysql')
    if "mysqld" in stdout.read().decode('utf-8'):
        print("mysql程序已经存在,请确认")
        return
    stdin,stdout,stderr = ssh.exec_command('[ ! -d "%s" ] || echo yes' % base_dir)
    if "yes" in stdout.read().decode('utf-8'):
        print("mysql的base目录已经存在,请确认或更改目录")
        return
    stdin,stdout,stderr = ssh.exec_command('[ ! -d "%s" ] || echo yes' % mysql_dir)
    if "yes" in stdout.read().decode('utf-8'):
        print("mysql目录已经存在,请确认或更改目录")
        return
    # 上传配置文件及安装包
    sftp.put('%s' % cnf_file, '%s' % server_cnf_file)
    print(server_tar_file)
    stdin,stdout,stderr = ssh.exec_command('[ ! -f "%s" ] || echo yes' % server_tar_file)
    if "yes" in stdout.read().decode('utf-8'):
        print("安装包已经存在")
    else:
        sftp.put('%s' % tar_file, '%s' % server_tar_file)

    # 检查基本环境及用户
    stdin,stdout,stderr = ssh.exec_command('cat /etc/group|grep "^%s:"' % mysql_user)
    if mysql_user  in stdout.read().decode('utf-8'):
        print("该用户组已经存在")
    else:
        print("用户组未创建")
        ssh.exec_command('groupadd %s' % mysql_user)
    stdin,stdout,stderr = ssh.exec_command('id %s' % mysql_user)
    if "uid=" in stdout.read().decode('utf-8'):
        print("该用户已经存在")
    else:
        print("用户未创建i123")
        ssh.exec_command('useradd -r -g %s -s /bin/false %s' % (mysql_group, mysql_user))
    channel = ssh.invoke_shell()
    channel.send("mkdir -p %s \n" % data_dir)
    check_end(channel, '# ')
    channel.send("mkdir -p %s \n" % tmp_dir)
    check_end(channel, '# ')
    channel.send(" chown -R %s:%s %s \n" % (mysql_group, mysql_user,mysql_dir))
    check_end(channel, '# ')
    print('开始搭建')
    bin_dir = base_dir + "/bin"
    channel.send("cd %s  \n" % bin_dir)
    check_end(channel, '# ')
    channel.send("./mysqld --initialize-insecure --user=%s --basedir=%s --datadir=%s  \n" % (mysql_user, base_dir, data_dir))
    check_end(channel, '# ')
    print('初始化完成,开始加密')
    ssh.exec_command("/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=%s" % data_dir)
    print('开始启动')
    ssh.exec_command("/usr/local/mysql/bin/mysqld_safe  --defaults-file=%s --user=%s & \n " % (server_cnf_file, mysql_user))
    channel.close()
    ssh.close()

server_host = '127.0.0.1'
server_port = 22
server_user = 'user'
server_password = 'password'
mysql_user = 'mysql'
mysql_group = 'mysql'
base_dir = '/usr/local/mysql'
mysql_dir = '/data/mysql2'
data_dir = mysql_dir + '/data'
tmp_dir = mysql_dir + '/tmp'
file_path = '/data/it_tool'
cnf_file = file_path +  '/my.conf'
tar_file = file_path +  '/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz'
server_tar_file = '/data/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz'
server_cnf_file = '/etc/my2.cnf'
install_mysql()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值