✨MySQL Linux 通用版离线安装
1452 字
7 分钟
✨MySQL Linux 通用版离线安装
MySQL 5.7.41 安装与远程配置指南
一、准备工作
- 确保依赖已安装:
Terminal window yum install -y libaio numactl # CentOS / RHELapt-get install -y libaio1 # Debian / Ubuntu - 创建 MySQL 专用用户:
Terminal window groupadd mysqluseradd -r -g mysql -s /bin/false mysql
二、解压安装包
- 上传
mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz到宿主机,例如/usr/local/src:Terminal window cd /usr/local/srctar -zxvf mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz - 移动到安装目录:
Terminal window mv mysql-5.7.41-linux-glibc2.12-x86_64 /usr/local/mysql - 修改权限:
Terminal window chown -R mysql:mysql /usr/local/mysql
三、初始化数据库
-
创建数据目录:
Terminal window mkdir -p /data/mysqlchown -R mysql:mysql /data/mysql -
初始化数据库:
Terminal window cd /usr/local/mysqlbin/mysqld --initialize --user=mysql --datadir=/data/mysql这里会生成临时 root 密码,注意保存。
四、配置文件
新建
/etc/my.cnf:
[mysqld]basedir=/usr/local/mysqldatadir=/data/mysqlsocket=/tmp/mysql.sockuser=mysqlport=3306symbolic-links=0character-set-server=utf8mb4max_connections=200bind-address=0.0.0.0 # 开启远程访问
[client]socket=/tmp/mysql.sockdefault-character-set=utf8mb4五、启动 MySQL
- 注册服务脚本:
Terminal window cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchmod +x /etc/init.d/mysqld - 启动服务:
Terminal window service mysqld start# 或/etc/init.d/mysqld start - 开机自启:
Terminal window chkconfig --add mysqld # CentOS 6systemctl enable mysqld # CentOS 7+
六、登录并修改密码
- 使用临时密码登录:
Terminal window /usr/local/mysql/bin/mysql -u root -p - 修改 root 密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
七、开启远程登录
方式一:创建新用户(推荐)
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES;方式二:修改已有 root 用户
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;FLUSH PRIVILEGES;八、防火墙设置
- CentOS / RHEL7+:
Terminal window firewall-cmd --zone=public --add-port=3306/tcp --permanentfirewall-cmd --reload - iptables(老系统):
Terminal window iptables -A INPUT -p tcp --dport 3306 -j ACCEPTservice iptables saveservice iptables restart
九、远程连接测试
在另一台机器执行:
mysql -h 宿主机IP -P3306 -u root -p十、安全建议
- 不要直接开放
root@%,建议创建单独的业务用户:CREATE USER 'app_user'@'%' IDENTIFIED BY '安全密码';GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'%';FLUSH PRIVILEGES;
十一、小版本升级执行脚本
#!/bin/bash# ==============================================# MySQL 小版本升级脚本(例如 5.7.41 -> 5.7.43)# 用法:# ./upgrade_mysql.sh <mysql_tar_path> <install_dir> <root_password>## 示例:# ./upgrade_mysql.sh /opt/mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz /data/mysql 123456# ==============================================
set -e
MYSQL_TAR=$1INSTALL_DIR=$2MYSQL_PASS=$3BACKUP_DIR=/backup/mysql_backup_$(date +%F_%H%M%S)
if [ -z "$MYSQL_TAR" ] || [ -z "$INSTALL_DIR" ] || [ -z "$MYSQL_PASS" ]; then echo "❌ 用法: $0 <mysql_tar_path> <install_dir> <root_password>" exit 1fi
if [ ! -f "$MYSQL_TAR" ]; then echo "❌ 找不到安装包: $MYSQL_TAR" exit 1fi
# Step 1: 逻辑备份数据库echo "📦 导出所有数据库到 $BACKUP_DIR/dump.sql ..."mkdir -p $BACKUP_DIR$INSTALL_DIR/bin/mysqldump -uroot -p"$MYSQL_PASS" --all-databases --single-transaction --quick --routines --events > $BACKUP_DIR/dump.sql
# Step 2: 物理备份整个安装目录echo "📂 备份 MySQL 安装目录到 $BACKUP_DIR/mysql_dir ..."cp -a $INSTALL_DIR $BACKUP_DIR/mysql_dir
# Step 3: 停止 MySQLecho "⏹ 停止 MySQL..."systemctl stop mysql || pkill -9 mysqld || true
# Step 4: 解压新版本到临时目录echo "📦 解压新版本 MySQL ..."TMP_DIR=$(mktemp -d)tar -xf $MYSQL_TAR -C $TMP_DIRMYSQL_NEW_DIR=$(tar -tf $MYSQL_TAR | head -1 | cut -f1 -d"/")
# Step 5: 替换二进制文件(保留 data、配置文件)echo "🔄 替换二进制文件..."rsync -av --delete --exclude=data --exclude=mysql.sock --exclude=mysql.pid \\ $TMP_DIR/$MYSQL_NEW_DIR/ $INSTALL_DIR/
chown -R mysql:mysql $INSTALL_DIR
# Step 6: 启动 MySQLecho "🚀 启动 MySQL..."systemctl start mysqlsleep 8
# Step 7: 运行 mysql_upgradeecho "🔧 执行 mysql_upgrade ..."$INSTALL_DIR/bin/mysql_upgrade -uroot -p"$MYSQL_PASS"
# Step 8: 显示版本$INSTALL_DIR/bin/mysql -uroot -p"$MYSQL_PASS" -e "SELECT VERSION();"
echo "✅ MySQL 升级完成!"echo " 原安装目录已备份到: $BACKUP_DIR"echo " 当前安装目录: $INSTALL_DIR"十二、自动安装脚本
#!/bin/bash# ==============================================# 通用 MySQL 安装脚本(离线安装 + 自动生成 my.cnf + systemd + 免临时密码)# 用法:# ./install_mysql.sh <mysql_tar_path> <root_password> [install_dir]## 示例:# ./install_mysql.sh /opt/mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz 123456# ./install_mysql.sh /opt/mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz Abc@1234 /data/mysql# ==============================================
set -e
MYSQL_TAR=$1MYSQL_PASS=$2INSTALL_DIR=${3:-/usr/local/mysql} # 默认安装目录MYSQL_DATADIR="$INSTALL_DIR/data"MYSQL_USER="mysql"
if [ -z "$MYSQL_TAR" ] || [ -z "$MYSQL_PASS" ]; then echo "❌ 用法: $0 <mysql_tar_path> <root_password> [install_dir]" exit 1fi
if [ ! -f "$MYSQL_TAR" ]; then echo "❌ 找不到安装包: $MYSQL_TAR" exit 1fi
# Step 1: 停止旧 MySQLecho "⏹ 停止 MySQL..."pkill -9 mysqld 2>/dev/null || truesystemctl stop mysqld 2>/dev/null || true
# Step 2: 删除旧目录echo "🧹 删除旧 MySQL 目录 $INSTALL_DIR ..."rm -rf $INSTALL_DIR
# Step 3: 创建 mysql 用户id -u $MYSQL_USER &>/dev/null || useradd -r -s /sbin/nologin $MYSQL_USER
# Step 4: 解压指定版本echo "📦 解压 MySQL 包..."tar -xvf $MYSQL_TAR -C /usr/local/MYSQL_NEW_DIR=$(tar -tf $MYSQL_TAR | head -1 | cut -f1 -d"/")mv /usr/local/$MYSQL_NEW_DIR $INSTALL_DIR
# Step 5: 初始化数据目录(使用 --initialize-insecure,root 密码为空)echo "📂 初始化数据目录..."rm -rf $MYSQL_DATADIRmkdir -p $MYSQL_DATADIRchown -R $MYSQL_USER:$MYSQL_USER $INSTALL_DIRchmod 750 $INSTALL_DIRchmod 750 $MYSQL_DATADIR
$INSTALL_DIR/bin/mysqld --initialize-insecure --user=$MYSQL_USER \\ --basedir=$INSTALL_DIR --datadir=$MYSQL_DATADIR
# Step 5.1: 创建日志文件,确保可写touch $INSTALL_DIR/mysql.errchown $MYSQL_USER:$MYSQL_USER $INSTALL_DIR/mysql.err
# Step 6: 生成 /etc/my.cnfecho "📝 生成 /etc/my.cnf ..."cat > /etc/my.cnf <<EOF[client]port = 3306socket = $INSTALL_DIR/mysql.sock
[mysqld]basedir = $INSTALL_DIRdatadir = $MYSQL_DATADIRsocket = $INSTALL_DIR/mysql.sockpid-file = $INSTALL_DIR/mysql.pidlog-error = $INSTALL_DIR/mysql.errsymbolic-links = 0sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESEOF
# Step 6.1: 创建 systemd 服务文件echo "📝 生成 /etc/systemd/system/mysql.service ..."cat > /etc/systemd/system/mysql.service <<EOF[Unit]Description=MySQL ServerAfter=network.target
[Service]User=$MYSQL_USERGroup=$MYSQL_USERExecStart=$INSTALL_DIR/bin/mysqld_safe --defaults-file=/etc/my.cnfExecStop=$INSTALL_DIR/bin/mysqladmin --defaults-file=/etc/my.cnf -uroot -p$MYSQL_PASS shutdownLimitNOFILE=5000Restart=on-failure
[Install]WantedBy=multi-user.targetEOF
# 重新加载 systemd 并开机自启systemctl daemon-reexecsystemctl enable mysql
# Step 7: 启动 MySQLecho "🚀 启动 MySQL..."systemctl start mysqlsleep 8
# Step 8: 设置 root 密码echo "🔧 设置 root 密码..."$INSTALL_DIR/bin/mysql -uroot --socket=$INSTALL_DIR/mysql.sock \\ -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_PASS'; FLUSH PRIVILEGES;"
# Step 9: 开启远程访问echo "🌐 开启远程访问..."$INSTALL_DIR/bin/mysql -uroot -p"$MYSQL_PASS" --socket=$INSTALL_DIR/mysql.sock \\ -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$MYSQL_PASS' WITH GRANT OPTION; FLUSH PRIVILEGES;"
# Step 10: 显示版本$INSTALL_DIR/bin/mysql -uroot -p"$MYSQL_PASS" --socket=$INSTALL_DIR/mysql.sock -e "SELECT VERSION();"
echo "✅ MySQL 安装完成!"echo " 版本包: $MYSQL_TAR"echo " 安装目录: $INSTALL_DIR"echo " root 密码: $MYSQL_PASS"echo " 使用 systemctl 管理 MySQL: systemctl start|stop|restart mysql"十三、自动重置脚本
#!/bin/bash# ==============================================# MySQL 重置脚本# 用法:# ./reset_mysql.sh [install_dir]## 示例:# ./reset_mysql.sh # 默认 /usr/local/mysql# ./reset_mysql.sh /data/mysql # 自定义安装目录# ==============================================
set -e
INSTALL_DIR=${1:-/usr/local/mysql}MYSQL_USER="mysql"
echo "⚠️ 警告: 该操作将删除 MySQL 安装目录及数据目录!"read -p "确定要清空 $INSTALL_DIR 吗? (yes/no): " CONFIRMif [ "$CONFIRM" != "yes" ]; then echo "❌ 已取消操作" exit 1fi
# Step 1: 停止 MySQLecho "⏹ 停止 MySQL..."pkill -9 mysqld 2>/dev/null || truesystemctl stop mysqld 2>/dev/null || true
# Step 2: 删除安装目录if [ -d "$INSTALL_DIR" ]; then echo "🧹 删除目录: $INSTALL_DIR" rm -rf "$INSTALL_DIR"fi
# Step 3: 删除 socket 和 PID 文件(防止残留)rm -f /tmp/mysql.sockrm -f /tmp/mysql.pidrm -f /var/run/mysqld/mysqld.pidrm -f /var/run/mysqld/mysqld.sock
# Step 4: 保证 mysql 用户存在id -u $MYSQL_USER &>/dev/null || useradd -r -s /sbin/nologin $MYSQL_USER
echo "✅ MySQL 已重置完成,$INSTALL_DIR 已清空"文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
✨MySQL Linux 通用版离线安装
https://dear7575.cn/posts/mysql-linux-off/ 相关文章 智能推荐
1
✨Shell 脚本请求接口
技术分享 记录使用 Shell 脚本批量读取项目 ID 并请求接口的示例,包含日志记录、参数清洗和请求结果输出。
2
✨Jenkins 自动部署
技术分享 记录 Jenkins 自动部署 Java 项目的 SSH 配置和部署脚本示例,包含构建、传输、启动和日志处理流程。
3
✨K8S 基础操作指南
技术分享 整理 Kubernetes 常用基础操作命令,包含 Secret、ConfigMap、Service、Deployment 等资源的快速部署示例。
4
✨IDEA 常用快捷键
技术分享 整理 IntelliJ IDEA 日常开发常用快捷键,覆盖搜索、编辑、导航、重构、运行调试、Git 与窗口操作。
5
✨使用EasyExcel实现导出Excel写入图片
技术分享 记录使用 EasyExcel 导出 Excel 并写入图片的实现示例,包含自定义写入处理逻辑。
随机文章 随机推荐