mysql.sh
#!/bin/bash
# 定义变量
#MYSQL_DIR=$1
#MYSQL_VERSION="mysql-8.0.39"
#MYSQL_USER="mysql"
#MYSQL_PORT=$2
#LOG_FILE="$MYSQL_DIR/mysql/$MYSQL_VERSION/data/error.log"
#数据传输软件数据文件
#TRANSFER_SQL_PATH="$(pwd)/project/cms_transfer_v1.0/cms_transfer.sql;"
source ./install_control.cfg
#判断是否安装MYSQL
if [ -d "$MYSQL_DIR/mysql/$MYSQL_VERSION" ]; then
echo "MYSQL环境已存在,无需安装..."
exit 1
fi
#通过进程判断MYSQL是否已经安装
if ps aux | grep -v grep | grep -v mysql.sh | grep -q mysql; then
echo "MySQL进程正在运行"
exit 1
fi
# 清理环境
rm -rf /etc/my.cnf
rm -rf /etc/my.cnf.d
rm -rf /var/lib/mysql
echo "安装环境已清理。。。。。"
# 检查是否已经存在 MySQL 用户,如果不存在则创建
if ! id -u $MYSQL_USER > /dev/null 2>&1; then
sudo groupadd $MYSQL_USER
sudo useradd -g $MYSQL_USER -r -s /bin/false $MYSQL_USER
fi
# 解压
echo "正在解压中请稍等。。。。。"
sleep 3
sudo tar -xvf mysql/$MYSQL_VERSION*tar* -C mysql
sudo mkdir -p $MYSQL_DIR/mysql
sudo mv mysql/$MYSQL_VERSION*x86_64 $MYSQL_DIR/mysql/$MYSQL_VERSION
if [ $? == 0 ]; then
echo "已解压到目标目录$MYSQL_DIR/mysql/$MYSQL_VERSION下"
else
echo "mysql解压失败"
exit 1
fi
echo "创建并赋权mysql目录"
sleep 2
sudo mkdir -p $MYSQL_DIR/mysql/$MYSQL_VERSION/data
echo "mysql目录已创建"
# 创建 socket 目录并修改权限
sudo mkdir -p $MYSQL_DIR/mysql/$MYSQL_VERSION/mysqld
sudo chown -R mysql:mysql $MYSQL_DIR/mysql/$MYSQL_VERSION
# 编辑 my.cnf 文件
cat > /etc/my.cnf << EOF
[mysqld]
port = $MYSQL_PORT
user = mysql
basedir = $MYSQL_DIR/mysql/$MYSQL_VERSION
datadir = $MYSQL_DIR/mysql/$MYSQL_VERSION/data
socket = $MYSQL_DIR/mysql/$MYSQL_VERSION/mysqld/mysqld.sock
log-error = $LOG_FILE
pid-file = $MYSQL_DIR/mysql/$MYSQL_VERSION/mysql.pid
explicit_defaults_for_timestamp=1
server_id = 11
bind-address = 0.0.0.0
character-set-server = utf8
default_storage_engine = InnoDB
[client]
port = $MYSQL_PORT
socket = $MYSQL_DIR/mysql/$MYSQL_VERSION/mysqld/mysqld.sock
default-character-set = utf8
EOF
if [ $? == 0 ]; then
echo "配置文件添加成功"
echo "export PATH=\$PATH:$MYSQL_DIR/mysql/$MYSQL_VERSION/bin" >> /etc/profile
else
echo "环境变量设定失败,请检查重试!!!"
exit 1
fi
sleep 3
# 使环境变量生效
source /etc/profile
echo "接下来进行初始化操作...."
sleep 2
# 初始化 MySQL 数据库
$MYSQL_DIR/mysql/$MYSQL_VERSION/bin/mysqld --initialize --user=mysql --basedir=$MYSQL_DIR/mysql/$MYSQL_VERSION --datadir=$MYSQL_DIR/mysql/$MYSQL_VERSION/data
if [ $? != 0 ]; then
echo "初始化失败"
sleep 3
exit 1
fi
sleep 3
# 添加 mysql 服务启动脚本
cat > /etc/systemd/system/mysql.service << EOF
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=$MYSQL_DIR/mysql/$MYSQL_VERSION/bin/mysqld --defaults-file=/etc/my.cnf
ExecStop=/bin/kill -SIGTERM \$MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动 MySQL
systemctl start mysql.service
sleep 5 # 等待服务启动
if ! systemctl status mysql.service; then
echo "MySQL 服务未能正常启动。以下是日志:"
cat $LOG_FILE
exit 1
fi
# 添加软连接
ln -sfn $MYSQL_DIR/mysql/$MYSQL_VERSION/bin/mysql /usr/bin/mysql
ln -sfn $MYSQL_DIR/mysql/$MYSQL_VERSION/bin/mysqladmin /usr/bin/mysqladmin
ln -sfn $MYSQL_DIR/mysql/$MYSQL_VERSION/bin/mysql /usr/bin/mysql
ln -sfn $MYSQL_DIR/mysql/$MYSQL_VERSION/bin/mysqladmin /usr/bin/mysqladmin
echo "软连接添加成功"
# 添加开机自启 mysql 服务
systemctl enable mysql.service
echo "开机自启 mysql 服务成功"
# 获取初始化密码
INITIAL_PASSWORD=$(grep 'temporary password' $MYSQL_ERROR_FILE | awk '{print $NF}')
# 确保找到了初始化密码
if [ -z "$INITIAL_PASSWORD" ]; then
echo "未找到初始化密码,请检查 MySQL 启动日志。"
exit 1
fi
echo "数据库初始密码为:$INITIAL_PASSWORD"
#MYSQL_USER=$3
#NEW_PASSWORD=$4
echo "正在修改初始密码..."
sleep 3
# 更改 MySQL 根用户密码
mysql --connect-expired-password -u$MYSQL_ACCOUNT -p$INITIAL_PASSWORD -h localhost -e "ALTER USER '$MYSQL_ACCOUNT'@'localhost' IDENTIFIED BY '$NEW_PASSWORD';"
if [ $? -ne 0 ]; then
echo "Failed to change the password.(更改密码失败)"
exit 1
else
echo "MySQL root password changed successfully.(恭喜你,密码修改成功!!!)"
fi
echo "数据库修改后的密码为:$NEW_PASSWORD"
# MySQL允许远程访问
mysql -u$MYSQL_ACCOUNT -p$NEW_PASSWORD -h localhost -e "USE mysql; UPDATE user SET host = '%' WHERE user = 'root'; FLUSH PRIVILEGES;"
if [ $? -ne 0 ]; then
echo "MySQL允许远程访问失败!"
exit 1
else
echo "MySQL允许远程访问成功!"
fi
#检查数据传输软件数据库是否存在
TRANSFER_OUTPUT=$(mysql -u "$MYSQL_ACCOUNT" -p"$NEW_PASSWORD" -h localhost -e "SHOW DATABASES;")
if echo "$OUTPUT" | grep -q "^cms-field-control\b"; then
echo "数据库已经存在无需导入"
else
# 数据传输软件数据导入
mysql -u$MYSQL_ACCOUNT -p$NEW_PASSWORD -h localhost -e "CREATE DATABASE cms-field-control; USE cms-field-control; SOURCE $SQL_PATH"
if [ $? -ne 0 ]; then
echo "数据传输软件数据导入失败!"
else
echo "数据传输软件数据导入成功!数据库安装完成!"
fi
fi