根据开发要求,文中部署的版本是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***
根据排查结果需要注意的地方:
- /data/imipport/ → 已经被业务系统用来放 Java jar 包。
- /usr/local/nginx/ → 已经被占用做 Nginx 安装和配置
- 绝对不能碰这两个目录,更不能动现有端口(80/9000/8081)。
- 用独立路径安装(最安全)MySQL → /opt/mysql/ 或 /data/mysql/
- 这样不会覆盖 /usr/local/nginx 和 /data/imipport。
- 默认端口: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 系统