MySql自动化安装部署的坑
最近在开发公司的自动化部署工具,其中Mysql的自动化部署中遇到了一些问题,目前已全部解决,记录一下供大家参考
一、安装方式
为了统一管理,我采用了本地yum源的方式进行安装。
关于如何获取rpm包,请至mysql官方下载。
https://downloads.mysql.com/archives/community/
使用yum方式安装有诸多好处,在此不再复述。
二、如何离线安装
请参考之前的文章:
Linux系统使用Createrepo创建和使用本地源
三、获取安装后的初始密码
tempPwd=`grep 'temporary password' /var/log/mysqld.log`
defPwd=`echo ${tempPwd##*localhost:}`
四、修改初始密码
但是,首次登录必须修改密码,否则无法进行其他查询,由于初始密码被设置为过期,在修改的时候必须加上 --connect-expired-password选项
五、密码验证插件
mysql8.0默认开启了validate_password插件,如果修改密码需要符合相应的规则。为了绕过该规则,我通过修改临时变量的方式进行修改
set global validate_password.policy=LOW
set global validate_password.length=1
六、密码明文传输引起的警告
每次使用命令行连接数据库会提示密码在命令行中有风险,于是将密码放到了当前目录下的.my.cnf文件中,增加了Make_File方法来处理密码问题
[root@localhost ~]# mysql -uroot -p123456 -e 'select 1';
mysql: [Warning] Using a password on the command line interface can be insecure.
+---+
| 1 |
+---+
| 1 |
+---+
七、密码中的特殊字符
在mysql安装后,初始密码中包含有特殊字符,在测试的时候经常因为特殊字符导致无法连接数据库进而无法修改初始密码而导致安装流程失败
经过测试,影响登录的特殊字符有()<>&,在命令行中,可以通过在这些字符前加\进行转义成功登录,但是在shell中不可以,故使用'password'这种形式,用单引号括起来解决
在Make_File()方法中,密码的参数前后增加了单引号,解决了此问题。
所有问题都已解决,相关代码如下,由于篇幅关系,下面只给出了安装相关代码
#安装Mysql
Install(){
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
yum install mysql-community-server -y
systemctl start mysqld
systemctl enable mysqld
tempPwd=`grep 'temporary password' /var/log/mysqld.log`
defPwd=`echo ${tempPwd##*localhost:}`
nefPwd=Ivu_root_2022
Make_File root $defPwd
mysql --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$nefPwd';"
Make_File root $nefPwd
mysql --connect-expired-password -e "set global validate_password.policy=LOW;"
mysql --connect-expired-password -e "set global validate_password.length=1;"
mysql --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$1';"
Make_File root $1
mysql -e "flush privileges;"
Remove_File
}
#连接数据库前先创建密码文件
Make_File(){
path=$(pwd)/.my.cnf
echo "[mysql]
user=$1
password='$2'" > $path
}
#查询完成后删除密码文件,防止密码泄露
Remove_File(){
rm -rf $(pwd)/.my.cnf
}
action=$1
if [ -z "$action" ];then
echo "================================================="
echo "安装MySql install"
echo "创建数据库 createdb"
echo "添加用户 createuser"
echo "修改密码 chpwd"
echo "导入Sql脚本 importsql"
echo "用户授权 userauth"
echo "退出 exit"
echo "================================================="
read -p "请选择你要进行的操作: " action;
fi
case $action in
'exit')
exit
;;
'install')
rootpwd=$2
rootpwd1=$3
while [ -z "$rootpwd" ]
do
read -s -p "请设置root默认密码: " rootpwd;
echo ""
done
if [ -z "$2" ];then
while [ -z "$rootpwd1" ]
do
read -s -p "请再次输入密码: " rootpwd1;
echo ""
if [ "${rootpwd}" != "${rootpwd1}" ];then
Print_Error $PASSWORDNEQ
else
Install $rootpwd
fi
done
else
Install $rootpwd
fi
;;
*)
Print_Error "不支持的操作"
;;
esac