通过shell脚本一键部署MySQL8.0.23
MySQL安装包下载地址:MySQL :: Download MySQL Community Server (Archived Versions)
#!/bin/bash
#File name: mysql_script.sh
#Author: Wu
#Creation date: February 28, 2024
#压缩包路径
MYSQL_INSTALL_DIR="/tmp/mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar"
#安装路径
mysql_install_path=/home/mysql
#mysql 数据目录
mysql_date=/home/mysql/data
#mysql用户组 用户
user=mysql
# 是否开始
function Start(){
read -p "是否开始?(Y/N):" begin
if [ "$begin" == 'Y' ] || [ "$begin" == 'y' ] ;then
return 0 # 退出函数
else
exit 0 # 退出程序
fi
}
function check_user(){
curuser=$USER
if [ $curuser != 'root' ];then
echo "当前用户非root,请切换至root后再操作!"
exit 0
else
return 0
fi
}
function check_mariadb(){
mariadb_rpm_list='rpm -qa |grep mariadb'
if [ -n "$mariadb_rpm_list" ];then
echo "mariadb检查结果:系统已安装mariadb,需先卸载"
read -p "是否卸载mariadb?(Y/N):" choose_Unmariadb
if [ "$choose_Unmariadb" == 'Y' ] || [ "$choose_Unmariadb" == 'y' ] ;then
echo "开始卸载mariadb..."
rpm -qa |grep mariadb |xargs rpm -e --nodeps
sleep 2
echo "mariadb卸载完成!"
else
exit 0
fi
else
echo "mariadb检查结果:系统未安装mariadb."
return 0
fi
}
function mysql_check(){
mysql_rpm_list='rpm -qa |grep mysql'
if [ -n "$mysql_rpm_list" ]; then
echo "mysql检查结果:系统已安装mysql,需先卸载,已安装的MySQL如下:"
rpm -qa | grep mysql | tee
read -p "是否卸载已安装的MySQL?(Y/N):" choose_UnMySQL
if [ "$choose_UnMySQL" == 'Y' ] || [ "$choose_UnMySQL" == 'y' ];then
echo "开始卸载MySQL..."
rpm -qa |grep mysql | xargs rpm -e --nodeps > /dev/null 2>&1
sleep 2
echo "MySQL卸载完成!"
else
exit 0
fi
else
echo "mysql检查结果:系统未安装MySQL."
fi
}
function mysqlFile_check(){
mysqlFile='find / -name mysql'
if [ -n "$mysqlFile" ]; then
echo "检测到服务器可能存在MySQL残留文件,文件列表如下:"
find / -name mysql |xargs du --max-depth=0 -h # 打印可能的MySQL残留文件及大小
read -p "您要对这些文件怎么处理?(0:正常文件,不处理;1:我要手动删除;del:全部删除):" choose_delmysqlFile
if [ "$choose_delmysqlFile" == 0 ] ;then
return 0
elif [ "$choose_delmysqlFile" == 1 ] ;then
exit 0
elif [ "$choose_delmysqlFile" == 'del' ] ;then
echo "开始清理MySQL残留文件..."
#清理冗余文件
find / -name mysql |xargs rm -rf
sleep 3
rm -f /var/log/mysqld.log
echo "MySQL残留文件清理成功!"
else
echo "输入错误,请选择0、1、del."
exit 0
fi
else
rm -f /var/log/mysqld.log
echo "mysql残留文件检查结果:不存在MySQL残留文件"
fi
}
function rpmType(){
Start # 是否开始
check_user # 检查用户
check_mariadb # 检查mariadb
mysql_check # 检查MySQl
mysqlFile_check # 检查残留文件
}
rpmType
if [ ! -d $mysql_install_path ];then
mkdir -p $mysql_install_path
echo "目录以创建"
fi
sleep 2
cd /tmp/
tar -xvf $MYSQL_INSTALL_DIR -C $mysql_install_path 1>/dev/null 2>&1
cd $mysql_install_path 1>/dev/null 2>&1
echo -e "正在安装依赖"
yum install -y libaio net-tools openssl-devel 1>/dev/null 2>&1
echo "创建数据目录"
mkdir -p $mysql_date
sleep 1
echo "创建日志目录"
mkdir -p /home/mysql/log
sleep 1
#创建MYSQL用户和用户组
if grep -q "^$user:" /etc/group; then
echo "用户组已存在"
else
groupadd $user
echo "用户组不存在,已创建"
fi
if grep -q "^$user" /etc/passwd; then
echo "用户已经存在"
else
useradd -r -g $user $user
echo "用户不存在已创建"
fi
chown -R mysql:mysql $mysql_install_path
sleep 2
echo -e "正在安装,可能需要10分钟时间,请您稍等。。。。。。。"
rpm_list=(
mysql-community-client-8.0.32-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.32-1.el7.x86_64.rpm
mysql-community-common-8.0.32-1.el7.x86_64.rpm
mysql-community-debuginfo-8.0.32-1.el7.x86_64.rpm
mysql-community-devel-8.0.32-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.32-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.32-1.el7.x86_64.rpm
mysql-community-libs-8.0.32-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.32-1.el7.x86_64.rpm
mysql-community-server-8.0.32-1.el7.x86_64.rpm
mysql-community-server-debug-8.0.32-1.el7.x86_64.rpm
mysql-community-test-8.0.32-1.el7.x86_64.rpm
)
for install_rpm in ${rpm_list[@]}
do
rpm -ivh ${install_rpm}
done
echo -e "mysql 安装完成 "
sleep 1
echo -e "修改配置文件"
cat > /etc/my.cnf << EOF
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
[mysqldump]
single-transaction = 1
master-data = 1
[mysqld]
server_id = 1
port = 3306
log-bin=mysql-bin
binlog_expire_logs_seconds=604800 #以秒为单位 7天
binlog_format = row
lower_case_table_names = 1
character_set_server=utf8mb4
datadir=/home/mysql/data/
socket=/home/mysql/data/mysql.sock
log-error=/home/mysql/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default_password_lifetime = 0
tmpdir = /tmp
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
max_allowed_packet=32M
authentication_policy = sha256_password
EOF
systemctl start mysqld.service
mysql_password=$(grep 'temporary password' /home/mysql/log/mysqld.log | awk '{print $NF}')
echo -e "mysql密码为:"$mysql_password
sleep 2
is_start=$(ps -ef | grep mysqld | grep -v grep || netstat -tln | grep "3306 ")
#检查是否启动成功
if [ -n "$is_start" ]; then
echo -e "MySQL 启动成功!"
else
echo -e "MySQL 未启动!"
fi
#因为mysql默认安装在/var/lib/mysql 如果指定目录安装的话,需要把数据文件cp 到指定目录
echo -e "移动数据文件"
mv /var/lib/mysql/* /home/mysql/data/
sleep 1
echo -e "移动日志文件"
mv /var/log/mysqld.log /home/mysql/log/
chown -R mysql:mysql $mysql_install_path
sleep 1
#创建socket软连接
ln -s /home/mysql/data/mysql.sock /var/lib/mysql/mysql.sock
echo -e "重载mysql"
systemctl restart mysqld.service
##检查是否启动成功
if [ -n "$is_start" ]; then
echo -e "MySQL 已启动!"
else
echo -e "MySQL 未启动!"
exit 0
fi
cd /tmp
echo -e "修改root用户密码,创建test 用户并授权,加载sql脚本"
sleep 3
cat > test.sql << EOF
#ALTER USER 'root'@'localhost' IDENTIFIED BY 'Wzb@888888';
create database lq_income_platform;
CREATE USER 'test'@'%'IDENTIFIED BY 'Test@123';
GRANT ALL PRIVILEGES ON lq_income_platform.* TO 'test'@'%' WITH GRANT OPTION;
use lq_income_platform;
create table test(a int,b varchar(10));
insert into test(a,b) values(1,'test');
EOF
#修改mysql root用户密码
mysql_password=Wzb@888888
mysql -u root -p$mysql_password < test.sql