脚本使用场景
1.服务器新增mysql数据库
2.已存在mysql数据库,数据库已备份,升级或者重新部署数据库
前置条件
一台可以联网的centos7服务器
最低配置要求:
2G1核
操作步骤
复制代码到服务器上,代码在文末
保存为install_db.sh
chmod +x install_db.sh
运行过程
场景一:新增mysql服务
- 运行 sh install_db.sh
- 安全检测:无MySQL服务
根据提示输入:
大版本的版本号比如8.0
root密码(要求符合密码复杂度),比如:0qaWS(SICnsj
等待1-5分钟
等待屏幕输出
root@localhost密码是0qaWS(SICnsj
已添加开机自启
安装完成
场景二:重新部署或升级服务版本
- 运行 sh install_db.sh
- 安全检测:由于考虑到服务器的数据安全问题。当本地存在mysql时,脚本将停止运行,将输出红色闪烁字样提醒。
已安装MySQL
版本号为:mysql Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)
端口号为:33060
3306
- 移除之前版本的数据库,参考命令rpm -e 包名。
- 再次运行 sh install_db.sh
- 安全检测:无MySQL服务
- 根据提示输入:
大版本的版本号比如8.0
root密码(要求符合密码复杂度),比如:0qaWS(SICnsj
等待1-5分钟,期间将增加重设密码操作,密码为输入的密码
等待屏幕输出
root@localhost密码是0qaWS(SICnsj
已添加开机自启。
附录:脚本代码内容
#!/bin/bash
# 检查是否已安装MySQL
version=`mysql --version`
if [ $? == 0 ]; then
# 如果已安装,输出版本号和端口
port=$(netstat -anpt|grep mysqld|grep LISTEN|awk '{print $4}'|sed 's/.*://')
echo -e "\033[31;05m已安装MySQL\n版本号为:${version}\n端口号为:${port}\033[0m"
exit
else
echo '无mysql服务,将进行部署服务'
# 定义变量
mysql_version=$1
password=$2
# 获取版本号
read -p "请输入需要安装的 MySQL 版本号(5.7/8.0):" mysql_version
if [[ "${mysql_version}" != "5.7" && "${mysql_version}" != "8.0" ]]; then
echo "不支持的MySQL版本号!请重新运行脚本并输入5.7或8.0"
exit 1
fi
# 获取密码,隐藏输入内容
read -s -p "请输入 MySQL的root 密码(密码符合大小写字母特殊字符复杂度):" password
echo ""
#清理旧版本遗留的安装包
rpm -qa | grep mysql-community | xargs rpm -e --nodeps
rpm -qa | grep Percona-Server | xargs rpm -e --nodeps
# 安装对应版本的 MySQL
if [[ $mysql_version == "5.7" ]]
then
rpm -e --nodeps mysql80-community-release-el7-3.noarch
yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum install -y mysql-community-server mysql-community-client
elif [[ $mysql_version == "8.0" ]]
then
rpm -e --nodeps mysql57-community-release-el7-11.noarch
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum install -y mysql-community-server mysql-community-client
else
echo "输入的版本号错误"
exit 1
fi
# 获取my.cnf中log-error的值
log_error=$(grep -Po '(?<=log-error=)[^[:space:]]*' /etc/my.cnf)
# 读取临时密码
temp_pass=$(grep 'temporary password' $log_error | awk '{print $NF}'| tail -1)
# 启动Mysql
systemctl start mysqld
# 修改密码
if [[ $mysql_version == "5.7" ]]; then
# 修改Mysql密码
mysql -uroot -p"$temp_pass" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$password'; FLUSH PRIVILEGES;"
elif [[ $version == "8.0" ]]; then
# 修改Mysql密码
mysql -uroot -p"$temp_pass" -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$password'; FLUSH PRIVILEGES;"
fi
fi
# 验证Mysql
if mysql -uroot -p$password -e "SELECT 1" >/dev/null 2>&1; then
echo "mysql 数据库可以正常查询"
else
sed -i '/\[mysqld\]/a skip_grant_tables' /etc/my.cnf
sed -i '/\[mysqld\]/a default_authentication_plugin=mysql_native_password' /etc/my.cnf
systemctl restart mysqld
mysql -e "update mysql.user set authentication_string='' where user='root' and host='localhost';"
sed -i '/skip_grant_tables/d' /etc/my.cnf
systemctl restart mysqld
mysql -uroot -p --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$password'; FLUSH PRIVILEGES;"
fi
#fi
mysql -uroot -p$password -e "SELECT 1" >/dev/null 2>&1
echo -e "\033root@localhost密码是$password\033"
#开机自启
chkconfig mysqld on >/dev/null
echo '已添加开机自启'