【MySQL部署】MySQL 8.0.X部署教程_Linux上离线部署MySQL 8.0.X操作指南(二进制压缩包部署+独立目录部署,不在自动默认路径配置下安装)

【MySQL部署】MySQL 8.0.X部署教程_Linux上离线部署MySQL 8.0.X操作指南(二进制压缩包部署+独立目录部署,不在自动默认路径配置下安装)

根据开发要求,文中部署的版本是mysql-8.0.42-linux-glibc2.17-x86_64但是对于安装方式是二进制压缩包安装(Binary Tarball) ✅ 的方式,都通用。

二进制压缩包解压安装(独立目录部署)。优点:

  • 不依赖系统包管理器
  • 可以自定义安装路径、数据目录、日志目录
  • 与现有业务系统(Nginx / Java)互不干扰

0.前期准备

(本服务器不是原始状态的服务器,已经有业务在跑,安装过程不能影响业务),

如果是纯净的服务器就更简单很多,直接确定安装路径后进入进入下载安装即可。

1. 系统信息和环境检查

# 检查系统版本
cat /etc/*release

# 查看磁盘空间
df -h / /data

# 查看系统已有 MySQL 或 Redis
rpm -qa | grep -i mysql
rpm -qa | grep -i mariadb

# 查看系统运行的相关服务(Nginx/Java/MySQL/Redis)
ps -ef | egrep "nginx|java|mysql|redis"

# 查看端口占用情况
ss -lntp | egrep '3306|6379|80|8081|9000' || true

# 查看服务器 IPv4 地址
ip -4 addr show | grep i***

根据排查结果需要注意的地方:

  1. /data/imipport/ → 已经被业务系统用来放 Java jar 包。
  2. /usr/local/nginx/ → 已经被占用做 Nginx 安装和配置
  3. 绝对不能碰这两个目录,更不能动现有端口(80/9000/8081)。
  4. 用独立路径安装(最安全)MySQL → /opt/mysql/ 或 /data/mysql/
  5. 这样不会覆盖 /usr/local/nginx 和 /data/imipport。
  6. 默认端口:MySQL → 3306确认端口未被占用。

1.下载 MySQL 8.0.42

https://dev.mysql.***/downloads/mysql/

https://downloads.mysql.***/archives/***munity/

https://downloads.mysql.***/archives/***munity/?utm_source=chatgpt.***

选择:
MySQL ***munity Server
版本:8.0.x
平台:Linux - Generic (glibc 2.17) (x86, 64-bit)
文件格式:tar或tar.xz

注意:以下开始正式进入安装步骤

2.上传安装包到指定路径

下载后使用 XFTP / WinSCP / scp 上传到服务器/usr/local/src

3.创建系统用户和目录

# 创建 MySQL 用户组和系统账号
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql

# 创建安装目录、数据目录、日志目录
mkdir -p /opt/mysql
mkdir -p /data/mysql

# 修改目录所有者和权限
chown -R mysql:mysql /opt/mysql /data/mysql
chmod -R 750 /opt/mysql /data/mysql

说明: /opt/mysql 存放 MySQL 程序,/data/mysql 存放数据和日志。

4.解压 MySQL安装包

cd /usr/local/src

# 查看上传的压缩包
ls

# 解压 tar 包
tar -xvf mysql-8.0.42-linux-glibc2.17-x86_64.tar
tar -xvf mysql-8.0.42-linux-glibc2.17-x86_64.tar.xz

# 移动到安装目录
mv mysql-8.0.42-linux-glibc2.17-x86_64 /opt/mysql

# 进入解压目录,将内容移到 /opt/mysql 根目录
ls -l /opt/mysql
cd /opt/mysql
mv mysql-8.0.42-linux-glibc2.17-x86_64/* .
rmdir mysql-8.0.42-linux-glibc2.17-x86_64
ls -l /opt/mysql

5.配置my.***f

mkdir -p /etc/mysql
vim /etc/mysql/my.***f
[mysqld]
user = mysql
basedir = /opt/mysql
datadir = /data/mysql
socket = /data/mysql/mysql.sock
pid-file = /data/mysql/mysql.pid
port = 3306
#log-error = /data/mysql/logs/mysqld.log
slow_query_log = 1
slow_query_log_file = /data/mysql/logs/slow.log
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
lower_case_table_names = 1
innodb_file_per_table = 1
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 600
server_id = 1013201
#log_bin = /data/mysql/logs/mysql-bin
#binlog_format = ROW
#binlog_expire_logs_seconds = 604800
#max_binlog_size = 256M
#sync_binlog = 1

[client]
socket = /data/mysql/mysql.sock
port = 3306

重点:初始化前先注释 log-error和log_bin部分,初始化完成后再创建日志目录并删除注释符#。

重点:初始化前先注释 log-error和log_bin部分,初始化完成后再创建日志目录并删除注释符#。

重点:初始化前先注释 log-error和log_bin部分,初始化完成后再创建日志目录并删除注释符#。

6.初始化数据库(初始化前/data/mysql下必须为空)

# 清空数据目录
rm -rf /data/mysql/*

# 初始化数据库(不设置密码)
/opt/mysql/bin/mysqld --defaults-file=/etc/mysql/my.***f \
  --initialize-insecure \
  --user=mysql \
  --basedir=/opt/mysql \
  --datadir=/data/mysql

7.初始化后创建日志目录文件+撤销注释

1.创建日志目录并设置权限
# 目录必须先建好
mkdir -p /data/mysql/logs

# 建议把错误日志和慢日志的文件也顺手建了(可选,但更干净)
touch /data/mysql/logs/{mysqld.log,slow.log}

# 权限归 mysql,避免写入失败
chown -R mysql:mysql /data/mysql
chmod 750 /data/mysql
chmod 750 /data/mysql/logs
chmod 640 /data/mysql/logs/{mysqld.log,slow.log}

2.删除my.***f里的注释符#
vim /etc/mysql/my.***f

[mysqld]
user = mysql
basedir = /opt/mysql
datadir = /data/mysql
socket = /data/mysql/mysql.sock
pid-file = /data/mysql/mysql.pid
port = 3306
log-error = /data/mysql/logs/mysqld.log
slow_query_log = 1
slow_query_log_file = /data/mysql/logs/slow.log
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
lower_case_table_names = 1
innodb_file_per_table = 1
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 600
server_id = 1013201
log_bin = /data/mysql/logs/mysql-bin
binlog_format = ROW
binlog_expire_logs_seconds = 604800
max_binlog_size = 256M
sync_binlog = 1

[client]
socket = /data/mysql/mysql.sock
port = 3306

3.自检配置(不影响线上)
/opt/mysql/bin/mysqld --defaults-file=/etc/mysql/my.***f --validate-config
无输出=通过;有报错按提示修。

8.规避残留(系统自带的MariaDB)影响启动

如果没有就不用操作这一步进行规避!

# === 生产环境:规避 MariaDB 残留并统一 MySQL 配置入口(可回滚)===

# 1) 查看是否安装过 MariaDB/MySQL 相关包(只读)
rpm -qa | egrep -i 'mariadb|mysql'

# 2) 在常见配置路径中搜索 log-error 来源(只读)
grep -R --line-number --color=auto 'log[-_]error' /etc/my.***f /etc/mysql /etc/my.***f.d 2>/dev/null

# 3) 备份 /etc/my.***f(带时间戳,便于回滚)
ts=$(date +%F_%H%M%S)
cp -a /etc/my.***f /etc/my.***f.bak.$ts 2>/dev/null || true

# 4) 将 /etc/my.***f 设为“总控”,把优先级交给 /etc/mysql(不删残留,最小改动)
cat >/etc/my.***f <<'EOF'
[client]
[mysqld]
!includedir /etc/mysql
EOF

# 5) 校验 MySQL 配置语法(不启动服务,安全)
/opt/mysql/bin/mysqld --defaults-file=/etc/mysql/my.***f --validate-config

# 6) 确认 mysqld / mysqld_safe 实际使用的 log-error 都已指向我们目录
#    期望输出两行:/data/mysql/logs/mysqld.log
/opt/mysql/bin/my_print_defaults mysqld mysqld_safe 2>/dev/null | sed -n 's/^--log-error=//p'

# === 如需回滚:
# cp -a /etc/my.***f.bak.$ts /etc/my.***f

9.添加软连接+开机自启

方法1(软链接,仅测试/临时环境):
ln -s /opt/mysql/support-files/mysql.server /etc/init.d/mysql
# mysql 客户端命令软连接到 /usr/bin
ln -s /opt/mysql/bin/mysql /usr/bin/mysql

方法2方法2(复制+注册,生产推荐 ✅)
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
chkconfig --list | grep mysqld
注意:方法 1 和 方法 2 不要同时使用,否则会有两个服务脚本(mysql 和 mysqld),容易混乱。


自检配置 → 启动成功
/opt/mysql/bin/mysqld --defaults-file=/etc/mysql/my.***f --validate-config

service mysqld start    # 启动 MySQL
service mysqld stop     # 停止 MySQL
service mysqld restart  # 重启 MySQL

在线健康检查(必须过)
# 进程 & 端口
ps -ef | grep [m]ysqld
ss -lntp | grep 3306

# 关键变量(确认读的是 /etc/mysql/my.***f)
/opt/mysql/bin/mysql -uroot -S /data/mysql/mysql.sock -e "
SHOW VARIABLES LIKE 'version';
SHOW VARIABLES LIKE 'server_id';
SHOW VARIABLES LIKE 'log_error';
SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE 'log_bin_basename';
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'slow_query_log_file';
"

10.把启动脚本指到对的路径:修改 init.d 脚本路径,确保和配置文件一致

vim /etc/init.d/mysql(没有做规避操作的话直接修改这个文件)
vim /etc/init.d/mysqld(如果是有做第8步:规避Mariadb的操作,就修改这个文件)

修改这4个地方:
basedir=/opt/mysql
datadir=/data/mysql
mysqld_pid_file_path=/data/mysql/mysql.pid
$bindir/mysqld_safe --defaults-file=/etc/mysql/my.***f --user=mysql --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &

11.启动 MySQL 并测试

#启动/重启
service mysqld start
service mysqld restart

# 通过本地 socket、root 空密码登录并设新密码
/opt/mysql/bin/mysql -uroot -S /data/mysql/mysql.sock -e \
"ALTER USER 'root'@'localhost' IDENTIFIED BY 'root@123456'; FLUSH PRIVILEGES;"

# 验证能用新密码登录
/opt/mysql/bin/mysql -uroot -p -S /data/mysql/mysql.sock -e "SELECT VERSION();"

# 仅允许本地 root(建议生产)
/opt/mysql/bin/mysql -uroot -p -S /data/mysql/mysql.sock -e "
DELETE FROM mysql.user WHERE user='root' AND host<>'localhost';
FLUSH PRIVILEGES;"

12.root登录mysql

# 一次性全局生效(对整机用户生效,生产常用)
echo 'export PATH=/opt/mysql/bin:$PATH' >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

# 验证现在找到的是 /opt 下的 mysql
which mysql
mysql --version

# 之后就可以直接:
mysql -u root -p   # 会自动读 /etc/mysql/my.***f 里的 [client],走 /data/mysql/mysql.sock

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;

13.配置防火墙

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

14.创建开发账号并授权(详细版)

# 1️⃣ 创建用户
CREATE USER 'admin'@'%' IDENTIFIED BY 'root@123456';

# 2️⃣ 授权常用权限
GRANT CREATE, ALTER, INDEX, SELECT, INSERT, UPDATE, DELETE,
      CREATE TEMPORARY TABLES, CREATE VIEW, SHOW VIEW,
      CREATE ROUTINE, ALTER ROUTINE, EXECUTE
      ON *.* TO 'admin'@'%';
FLUSH PRIVILEGES;

# 3️⃣ 切换认证插件,兼容老客户端
ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'root@123456';
FLUSH PRIVILEGES;

# 4️⃣ exit退出然后测试admin登录
mysql -u admin -p

SHOW DATABASES;

可以按需限制数据库权限,例如 ON mydb.*。

15.开放远程连接

USE mysql;
root 用户只保留本地登录
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';
给开发/应用创建专用账号admin
ALTER USER 'admin'@'%' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;

配合防火墙配置,允许远程访问。

16.测试远程连接

  • 客户端工具:Navicat

  • IP:服务器 IP

  • 用户:root 或 admin

  • 密码:

  • 测试操作:

    • 创建数据库、表

    • 插入数据、查询数据

注意:安装到第16步已经完美结束,这里第17只是当时第一次安装时没有加log_bin,所以是后期加log_bin的步骤,log_bin已经完善到前面的步骤中,所以到这一步就部署完成了。

17.规范log_bin日志路径

总结

  • MySQL 8.0.42 默认会启用 binlog,但没写路径时,它一般会放在 数据目录(datadir)下

  • 你的 datadir = /data/mysql,所以默认应该是:

    /data/mysql/mysql-bin.000001 /data/mysql/mysql-bin.index

  • 如果你想规范放到 /data/mysql/logs/,就得在 my.***f 里明确写 log_bin = /data/mysql/logs/mysql-bin

17.1规范log_bin日志路径操作过程如下:

一、修改配置文件
[root@seaport ~]# date
2025年 09月 30日 星期二 09:59:47 CST
[root@seaport ~]# vim /etc/mysql/my.***f
[root@seaport ~]# cat /etc/mysql/my.***f
[mysqld]
user = mysql
basedir = /opt/mysql
datadir = /data/mysql
socket = /data/mysql/mysql.sock
pid-file = /data/mysql/mysql.pid
port = 3306
log-error = /data/mysql/logs/mysqld.log
slow_query_log = 1
slow_query_log_file = /data/mysql/logs/slow.log
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
lower_case_table_names = 1
innodb_file_per_table = 1
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 600

# === Binary Log SettingsMySQL 8.0.42 必须写秒数+211是IP尾号===
server_id = 211
log_bin = /data/mysql/logs/mysql-bin
binlog_format = ROW
binlog_expire_logs_seconds = 604800
max_binlog_size = 256M
sync_binlog = 1

[client]
socket = /data/mysql/mysql.sock
port = 3306

二、验证配置文件是否正确(不会影响正在运行的 MySQL):
/opt/mysql/bin/mysqld --defaults-file=/etc/mysql/my.***f --validate-config
如果没报错,说明写法完全正确。

三、等你允许维护窗口的时候重启:
service mysqld restart
(你机器上也有 service mysql restart,任选其一,保持一致即可)

四、重启后检查配置是否生效:
SHOW VARIABLES LIKE 'server_id';
SHOW VARIABLES LIKE 'log_bin';
SHOW VARIABLES LIKE 'log_bin_basename';
SHOW MASTER STATUS\G

--输出如下内容
server_id = 211
log_bin = ON
log_bin_basename = /data/mysql/logs/mysql-bin
SHOW MASTER STATUS 里能看到 mysql-bin.000001

17.2重启验证过程如下:

[root@seaport ~]# service mysqld restart
Shutting down MySQL.. SU***ESS! 
Starting MySQL.. SU***ESS! 
[root@seaport ~]# mysql -u root -p
Enter password: 
Wel***e to the MySQL monitor.  ***mands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.42 MySQL ***munity Server - GPL

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW VARIABLES LIKE 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 211   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'log_bin_basename';
+------------------+----------------------------+
| Variable_name    | Value                      |
+------------------+----------------------------+
| log_bin_basename | /data/mysql/logs/mysql-bin |
+------------------+----------------------------+
1 row in set (0.00 sec)

mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 157
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

18.总结

  • 安装方式:二进制压缩包安装(独立目录部署)

  • 安装目录/opt/mysql

  • 数据目录/data/mysql

  • 日志目录/data/mysql/logs

  • 账号:admin,可远程访问

  • 端口:3306,防火墙已放行

  • 开机自启:已配置

  • 业务隔离:不影响 Nginx / Java 系统

转载请说明出处内容投诉
CSS教程网 » 【MySQL部署】MySQL 8.0.X部署教程_Linux上离线部署MySQL 8.0.X操作指南(二进制压缩包部署+独立目录部署,不在自动默认路径配置下安装)

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买