Shell案例之一键部署mysql

1.问题

我认为啊学习就是一个思考的过程,思考问题的一个流程应该是:提出问题,分析问题,解决问题

在shell里部署mysql服务时,我出现一些问题:

1.安装mysql-server时,没有密钥,安装失败

2. 怎么利用正则表达式去锁定临时密码

3.进入mysql数据库后,怎么对密码进行修改

2.分析

1.可以在yum 安装 mysql-server服务时,添加 --nogpgcheck,实现不用密钥安装,或者去yum源配置文件中,将mysql源中gpgcheck=1改为gpgcheck=0。

2.临时密码会放在/var/log/mysql.log中,利用grep关键字搜索出具有temporary password所在行,再利用awk去锁定相应的字段

3.因为使用的是临时密码,无法实现一部分操作,比如:查询库,表等等操作都无法进行,我们必须对密码进行修改,才能实现对数据库的一些操作,进入MySQL对密码策略进行更改,再对进行修改密码。

3.流程图

4.代码实现

复制代码
#!/bin/bash

script_start=`date +%s`

#安装wget工具,为后续下载mysql源做准备

install_wget ()

{

    yum install wget

    status1=$?

    if [ $status1 = 0 ];then

        echo "wget 安装成功"

    fi

}

#安装mysql

install_mysql ()

{

    # 把mysql源下载到本地

    wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

    # 使用rpm安装
    yum install -y mysql-server --nogpgcheck

    status2=$?

    if [ $status2 = 0 ];then

        echo "mysql服务安装成功"

    fi

}

#启动服务并设置开机自启

start_server ()

{

    systemctl start mysqld

    systemctl enable mysqld

#安装net-tools,这个工具包含了查看端口的命令

    yum install -y net-tools

    status3=$?

    if [ $status3 = 0 ];then

        netstat -ntlp |grep "mysqld"

        echo "3306端口开启,mysql服务启动了"

    else

        echo "未开启3306端口,mysql未启动"

    rpm -ivh mysql57-community-release-el7-11.noarch.rpm

    #因为本地环境安装了mysql源,所以使用yum安装mysql服务
    fi

}

#为MySQL设置密码

set_mysql_password ()

{

    mysql -uroot -p123456 -e "exit"

    status4=$?

    if [ $status4 != 0 ];then

#--connect-expired-password根据原意可知允许连接一个过期的密码,-e 后面一般跟SQL语句或者命令,相当于在外部使用命令对mysql进行操作

        temporary_password=$(grep "temporary password" /var/log/mysqld.log |awk '{print $NF}')

        mysql --connect-expired-password -uroot -p$temporary_password -e "set global validate_password_policy=LOW; set global validate_password_length=6; alter user 'root'@'localhost' IDENTIFIED BY '123456';exit"

    fi

}

install_wget

install_mysql

start_server
set_mysql_password

rm -rf mysql57-community-release-el7-11.noarch.*

script_stop=`date +%s`

run_time=$[$script_stop-$script_start]

echo "脚本此次运行时长$run_time秒"

5.结果验证

输入密码为123456,能否登录mysql

相关推荐
AC赳赳老秦2 小时前
采购专员自动化:OpenClaw 自动比价、生成询价单、跟踪供应商报价进度实战指南
开发语言·数据库·人工智能·python·自动化·github·openclaw
灯澜忆梦2 小时前
【MySQL1】| DDL 数据定义语言
数据库·sql·mysql
想你依然心痛2 小时前
嵌入式容器:Docker与BalenaOS在边缘设备上的实践——容器运行时与OTA
运维·docker·容器
竣达技术2 小时前
NAS / 服务器断电数据丢失?UPS 配套 USB关机保护板,市电断电池低自动提示服务器/电脑关机
运维·服务器·电脑
Lottie20262 小时前
京东电商进阶运营:精准定价+安全铺货+竞品监控+利润管控全自动化方案
运维·安全·自动化
至乐活着2 小时前
前端工程化最佳实践:从规范到自动化构建的全面指南
webpack·自动化·代码规范·构建工具·前端工程化
章老师说2 小时前
NGINX官方谈Lua风险:这其实是两条网关技术路线之争
运维·nginx·负载均衡·lua·openresty
wbs_scy3 小时前
仿 muduo 高并发服务器项目:实现 Any 通用容器并理解 std::any
运维·服务器
做个文艺程序员3 小时前
Linux第11篇:存储管理——磁盘分区、LVM 与文件系统
linux·运维·服务器
懂AI的老郑3 小时前
工业检测场景下智能体的应用:从自动化到智能化
运维·自动化