#!/bin/bash
MYSQL_TAR_FILE="mysql-8.0.32-linux-glibc2.17-x86_64-minimal.tar.xz"
MYSQL_DIR="mysql-8.0.32-linux-glibc2.17-x86_64-minimal"
MYSQL_INSTALL_DIR="/usr/local/mysql"
MYSQL_DATA_DIR="/var/lib/mysql"
MYSQL_CNF_FILE="/etc/my.cnf"
MYSQL_SOCK_FILE="/var/run/mysqld/mysqld.sock"
# 打印并执行命令
run_command() {
echo "执行命令: $@"
"$@"
}
# 等待MySQL服务器启动
wait_for_mysql() {
max_attempts=60
attempt=1
while ! run_command mysql -u root --socket=$MYSQL_SOCK_FILE -e "SELECT 1" >/dev/null 2>&1; do
if [ $attempt -gt $max_attempts ]; then
echo "等待MySQL服务器启动超时!"
exit 1
fi
echo "等待MySQL服务器启动... 尝试 $attempt/$max_attempts"
sleep 1
attempt=$((attempt + 1))
done
}
# 卸载MySQL函数
uninstall_mysql() {
run_command systemctl stop mysql
run_command systemctl disable mysql
run_command yum remove -y mysql-community-server mysql-community-client mysql-community-libs mysql-community-common
run_command rm -rf $MYSQL_INSTALL_DIR
run_command rm -rf $MYSQL_DATA_DIR
run_command rm -f $MYSQL_CNF_FILE
run_command userdel mysql
run_command groupdel mysql
echo "MySQL已卸载并清理完成!"
}
# 创建MySQL systemd服务文件
create_mysql_service() {
service_file="/etc/systemd/system/mysql.service"
echo "[Unit]" > $service_file
echo "Description=MySQL Server" >> $service_file
echo "After=network.target" >> $service_file
echo "" >> $service_file
echo "[Service]" >> $service_file
echo "ExecStart=$MYSQL_INSTALL_DIR/bin/mysqld_safe --defaults-file=$MYSQL_CNF_FILE --user=mysql" >> $service_file
echo "ExecStop=$MYSQL_INSTALL_DIR/bin/mysqladmin -uroot shutdown" >> $service_file
echo "User=mysql" >> $service_file
echo "Group=mysql" >> $service_file
echo "Restart=always" >> $service_file
echo "PrivateTmp=true" >> $service_file
echo "" >> $service_file
echo "[Install]" >> $service_file
echo "WantedBy=multi-user.target" >> $service_file
echo "创建MySQL systemd服务文件完成!"
}
# 选择安装或卸载选项
select_option() {
echo "请选择要执行的操作:"
echo "1. 安装 MySQL"
echo "2. 卸载 MySQL"
read -p "输入选项数字: " choice
case $choice in
1) install_mysql ;;
2) uninstall_mysql ;;
*) echo "无效的选项!" ;;
esac
}
# 安装MySQL函数
install_mysql() {
# 检查本地是否已有MySQL安装包
if [ -f "$MYSQL_TAR_FILE" ]; then
echo "找到本地已有的MySQL安装包:$MYSQL_TAR_FILE"
else
echo "未找到本地MySQL安装包,开始下载..."
run_command wget https://cdn.mysql.com/archives/mysql-8.0/$MYSQL_TAR_FILE
fi
# 检查是否存在MySQL进程,存在则终止
mysql_processes=$(pgrep mysql)
if [ -n "$mysql_processes" ]; then
echo "检测到存在MySQL进程,开始终止..."
run_command pkill -9 mysql
while pgrep mysql >/dev/null 2>&1; do
echo "等待MySQL进程终止..."
sleep 1
done
fi
# 删除MySQL数据目录
run_command rm -rf $MYSQL_DATA_DIR
# 解压缩MySQL压缩包
run_command tar xf $MYSQL_TAR_FILE
# 重命名解压后的目录
run_command mv $MYSQL_DIR mysql
# 移动MySQL目录到适当的位置
run_command mv mysql $MYSQL_INSTALL_DIR
# 创建MySQL组和用户
run_command groupadd mysql
run_command useradd -r -g mysql -s /bin/bash mysql
# 创建MySQL数据目录并设置权限
run_command mkdir -p $MYSQL_DATA_DIR
run_command chown -R mysql:mysql $MYSQL_DATA_DIR
# 创建MySQL配置文件
run_command touch $MYSQL_CNF_FILE
run_command chmod 644 $MYSQL_CNF_FILE
echo "[mysqld]" > $MYSQL_CNF_FILE
echo "basedir=$MYSQL_INSTALL_DIR" >> $MYSQL_CNF_FILE
echo "datadir=$MYSQL_DATA_DIR" >> $MYSQL_CNF_FILE
echo "socket=$MYSQL_SOCK_FILE" >> $MYSQL_CNF_FILE
echo "port=3306" >> $MYSQL_CNF_FILE
echo "user=mysql" >> $MYSQL_CNF_FILE
# 初始化MySQL数据库
run_command $MYSQL_INSTALL_DIR/bin/mysqld --defaults-file=$MYSQL_CNF_FILE --initialize-insecure --user=mysql
# 创建MySQL systemd服务文件
create_mysql_service
# 启动MySQL服务
run_command systemctl daemon-reload
run_command systemctl start mysql
# 等待MySQL服务器启动
wait_for_mysql
# 生成随机密码
new_password=$(openssl rand -base64 12)
# 设置MySQL的root用户密码
run_command mysql -u root --socket=$MYSQL_SOCK_FILE <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '$new_password';
FLUSH PRIVILEGES;
EOF
# 添加MySQL到系统PATH
if ! grep -q "export PATH=\"$MYSQL_INSTALL_DIR/bin:\$PATH\"" ~/.bashrc; then
echo "export PATH=\"$MYSQL_INSTALL_DIR/bin:\$PATH\"" >> ~/.bashrc
source ~/.bashrc
fi
echo "MySQL安装已完成!"
echo "MySQL root 用户密码已更新为: $new_password"
}
# 选择安装或卸载选项
select_option
Centos7.9安装mysql8.0
发布时间 2023-07-14 21:46:00作者: GreeneGe