#!/bin/bash # 简化的MySQL安装脚本 # 作者: emotion-museum # 日期: 2025-07-21 REMOTE_HOST="root@47.111.10.27" echo "🚀 开始MySQL安装..." # 创建远程安装脚本 cat > /tmp/mysql_install_remote.sh << 'EOF' #!/bin/bash set -e echo "📦 MySQL安装开始..." # 1. 清理环境 echo "🧹 清理环境..." pkill -f mysqld 2>/dev/null || true rm -rf /usr/local/mysql /tmp/mysql-* /etc/my.cnf /var/log/mysqld.log 2>/dev/null || true # 2. 解压MySQL包 echo "📦 解压MySQL包..." cd /tmp tar -xJf /data/package/mysql-8.0.24-linux-glibc2.12-x86_64.tar.xz if [ -d 'mysql-8.0.24-linux-glibc2.12-x86_64' ]; then echo "✅ 解压成功" mv mysql-8.0.24-linux-glibc2.12-x86_64 /usr/local/mysql else echo "❌ 解压失败" exit 1 fi # 3. 创建用户 echo "👤 创建mysql用户..." groupadd mysql 2>/dev/null || true useradd -r -g mysql -s /bin/false mysql 2>/dev/null || true # 4. 设置权限 echo "📁 设置权限..." chown -R root:root /usr/local/mysql chown -R mysql:mysql /data/programs/mysql chmod -R 750 /data/programs/mysql # 5. 创建配置文件 echo "⚙️ 创建配置文件..." cat > /etc/my.cnf << 'EOCNF' [mysqld] user = mysql port = 3306 basedir = /usr/local/mysql datadir = /data/programs/mysql socket = /tmp/mysql.sock pid-file = /var/run/mysqld/mysqld.pid bind-address = 0.0.0.0 max_connections = 200 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci default-authentication-plugin = mysql_native_password log-error = /var/log/mysqld.log slow_query_log = 1 slow_query_log_file = /var/log/mysql-slow.log long_query_time = 2 innodb_buffer_pool_size = 512M innodb_log_file_size = 128M log-bin = mysql-bin binlog_format = ROW expire_logs_days = 7 skip-name-resolve sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO [mysql] default-character-set = utf8mb4 socket = /tmp/mysql.sock [client] default-character-set = utf8mb4 socket = /tmp/mysql.sock EOCNF # 6. 创建必要目录 echo "📁 创建必要目录..." mkdir -p /var/run/mysqld /var/log chown mysql:mysql /var/run/mysqld touch /var/log/mysqld.log chown mysql:mysql /var/log/mysqld.log # 7. 创建符号链接 echo "🔗 创建符号链接..." ln -sf /usr/local/mysql/bin/mysql /usr/local/bin/mysql ln -sf /usr/local/mysql/bin/mysqld /usr/local/bin/mysqld ln -sf /usr/local/mysql/bin/mysqladmin /usr/local/bin/mysqladmin ln -sf /usr/local/mysql/bin/mysqldump /usr/local/bin/mysqldump # 8. 启动MySQL echo "🚀 启动MySQL..." nohup /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql > /var/log/mysqld.log 2>&1 & # 等待启动 echo "⏳ 等待MySQL启动..." sleep 20 # 检查进程 if pgrep -f mysqld > /dev/null; then echo "✅ MySQL进程启动成功" else echo "❌ MySQL进程启动失败" tail -20 /var/log/mysqld.log exit 1 fi # 检查端口 if netstat -tlnp | grep :3306 > /dev/null; then echo "✅ MySQL端口3306正在监听" else echo "⚠️ MySQL端口3306未监听" fi # 9. 设置密码 echo "🔐 设置密码..." sleep 10 # 尝试无密码连接 if /usr/local/mysql/bin/mysql -u root -e 'SELECT VERSION();' > /dev/null 2>&1; then echo "✅ 无密码连接成功,设置密码..." /usr/local/mysql/bin/mysql -u root << 'EOSQL' ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'EmotionMuseum2025*#'; CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'EmotionMuseum2025*#'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; CREATE USER IF NOT EXISTS 'emotion'@'localhost' IDENTIFIED WITH mysql_native_password BY 'EmotionDB2024!'; CREATE USER IF NOT EXISTS 'emotion'@'%' IDENTIFIED WITH mysql_native_password BY 'EmotionDB2024!'; GRANT ALL PRIVILEGES ON emotion_museum.* TO 'emotion'@'localhost'; GRANT ALL PRIVILEGES ON emotion_museum.* TO 'emotion'@'%'; FLUSH PRIVILEGES; EOSQL echo "✅ 密码设置完成" else echo "⚠️ 无密码连接失败,检查临时密码..." TEMP_PASSWORD=$(grep 'temporary password' /var/log/mysqld.log | tail -1 | awk '{print $NF}' 2>/dev/null || echo '') if [ -n "$TEMP_PASSWORD" ]; then echo "发现临时密码,重置..." /usr/local/mysql/bin/mysql -u root -p"$TEMP_PASSWORD" --connect-expired-password << 'EOSQL' ALTER USER 'root'@'localhost' IDENTIFIED BY 'EmotionMuseum2025*#'; FLUSH PRIVILEGES; EOSQL echo "✅ 密码重置完成" fi fi # 10. 验证安装 echo "🔍 验证安装..." if /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'SHOW DATABASES;' > /dev/null 2>&1; then echo "✅ MySQL连接验证成功" /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'SHOW DATABASES;' # 检查emotion_museum数据库 if /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'USE emotion_museum; SHOW TABLES;' > /dev/null 2>&1; then echo "✅ emotion_museum数据库存在" /usr/local/mysql/bin/mysql -u root -p'EmotionMuseum2025*#' -e 'USE emotion_museum; SHOW TABLES;' else echo "⚠️ emotion_museum数据库不存在" fi else echo "❌ MySQL连接验证失败" exit 1 fi echo "🎉 MySQL安装完成!" echo "连接信息:" echo " 主机: localhost" echo " 端口: 3306" echo " root密码: EmotionMuseum2025*#" echo " emotion密码: EmotionDB2024!" EOF # 上传并执行脚本 echo "📤 上传安装脚本到服务器..." scp /tmp/mysql_install_remote.sh $REMOTE_HOST:/tmp/ echo "🚀 在服务器上执行安装..." ssh $REMOTE_HOST "chmod +x /tmp/mysql_install_remote.sh && /tmp/mysql_install_remote.sh" echo "✅ MySQL安装脚本执行完成!"