阿拉尔市网站建设_网站建设公司_jQuery_seo优化
2026/1/8 19:00:07 网站建设 项目流程

下面给你一套在 CentOS 7 上用 **MySQL 5.7 二进制包(tar.gz)**部署的“企业可运维”方案(含 systemd、自启动、最小可用配置与加固)。先把话讲明白:MySQL 5.7 的最后一个社区版本是 5.7.44,且已进入仅维持级别支持;CentOS 7 已在 2024-06-30 结束生命周期。如果这是生产环境,建议把升级/迁移列入路线图;如果因兼容性必须上 5.7,请按下面做“隔离+最小暴露+可回滚”。(MySQL开发者区)


部署工作流(建议按这个顺序跑)🚀

flowchart TD A[安装依赖] --> B[创建用户/目录] B --> C[解压二进制包并建立软链] C --> D[写 my.cnf] D --> E[初始化数据目录] E --> F[写 systemd 服务并启动] F --> G[设置 root 密码/安全加固] G --> H[验证与基线巡检]

关键参数对齐表(先统一口径,后面命令就不会乱)

项目推荐值说明
安装目录/usr/local/mysql统一管理二进制安装路径
数据目录/data/mysql数据与程序分离,利于备份与迁移
配置文件/etc/my.cnf运维习惯路径
端口3306如非必要别对公网开放
Socket/tmp/mysql.sock本机运维连接更稳

强提醒:把 数据目录(datadir) 和 权限(owner) 配对好,90% 的启动问题都在这两点。


1)安装依赖(MySQL 5.7 二进制运行所需)

yum -y install libaio numactl-libs perl net-tools

解释:

  • libaio:InnoDB 异步 IO 依赖,不装大概率起不来或性能异常。

  • numactl-libs:NUMA 相关库,避免部分机器启动告警/性能抖动。

  • perl:部分工具脚本会用到(例如 mysql_install_db 时代遗留,5.7 偶尔仍依赖环境)。

  • net-tools:便于用netstat排查端口监听(可选但运维很顺手)。


2)创建用户与目录(最小权限模型)

groupadd -r mysql useradd -r -g mysql -s /sbin/nologin mysql mkdir -p /data/mysql /usr/local/mysql chown -R mysql:mysql /data/mysql

解释:

  • -r创建系统账户,避免与业务用户混用。

  • nologin:数据库账户不允许交互登录,减少攻击面。

  • chown只给数据目录授权,符合“程序只读、数据可写”的基本原则。


3)解压二进制包并建立软链(版本可控、可回滚)

假设你已把mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz放到/usr/local/src/(文件名以你实际为准)。

cd /usr/local/src tar -zxf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql-5.7.44 ln -sfn /usr/local/mysql-5.7.44 /usr/local/mysql chown -R root:root /usr/local/mysql-5.7.44

解释:

  • 真实目录带版本号,升级/回滚就是换软链,变更可控。

  • 程序目录归root,避免被篡改;数据目录才归mysql

追加环境变量(让 mysql 命令全局可用):

echo 'export PATH=/usr/local/mysql/bin:$PATH' >/etc/profile.d/mysql.sh source /etc/profile.d/mysql.sh

解释:

  • 放到/etc/profile.d/是企业常见做法,利于一致化配置管理。


4)写入最小可用 my.cnf(稳定优先,少即是多)

cat >/etc/my.cnf <<'EOF' [mysql] default-character-set = utf8mb4 [mysqld] user = mysql basedir = /usr/local/mysql datadir = /data/mysql port = 3306 socket = /tmp/mysql.sock pid-file = /data/mysql/mysql.pid character-set-server = utf8mb4 collation-server = utf8mb4_general_ci skip-name-resolve = 1 # 连接与基础容量(小中型通用起步值) max_connections = 500 table_open_cache = 2000 # InnoDB 基线 innodb_buffer_pool_size = 1G innodb_flush_method = O_DIRECT innodb_file_per_table = 1 # 日志(出事能追、性能可观测) log_error = /data/mysql/error.log slow_query_log = 1 slow_query_log_file = /data/mysql/slow.log long_query_time = 1 EOF

解释:

  • skip-name-resolve=1:避免 DNS 反查带来的连接抖动;配合“账号用 IP 授权”。

  • innodb_buffer_pool_size:建议按内存 60%~70%(专用库)规划;这里给的是“可启动基线”。

  • 日志放数据盘:一旦故障,error.log 是第一证据链。

  • 字符集用utf8mb4:避免表情/扩展字符写入报错(这是最常见踩坑之一)。


5)初始化数据目录(两种方式:带随机密码 / 无密码)

初始化前确保目录干净:

ls -al /data/mysql

解释:

  • 你要确认这里不是旧库残留;否则初始化会失败或“看似成功但数据不对”。

方式A:生成随机 root 密码(更安全,推荐)

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

解释:

  • --initialize会生成临时 root 密码,写入 error.log。上线更符合安全预期。

查看临时密码:

grep -i 'temporary password' /data/mysql/error.log | tail -n 1

解释:

  • 这行就是你第一次登录 root 的通行证,拿到后立刻改密码。

方式B:无密码初始化(仅限内网临时环境)

/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

解释:

  • 这会让 root 初始空密码,部署快但风险高;若你后续忘了加固,就是给自己埋雷。


6)配置 systemd 服务并启动(标准化运维入口)

cat >/etc/systemd/system/mysqld.service <<'EOF' [Unit] Description=MySQL Server 5.7 (Binary) After=network.target [Service] Type=forking User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf ExecStop=/usr/local/mysql/bin/mysqladmin --socket=/tmp/mysql.sock -uroot shutdown Restart=on-failure LimitNOFILE=100000 [Install] WantedBy=multi-user.target EOF

解释:

  • mysqld_safe:二进制安装常用方式,遇到崩溃更容易保留诊断信息。

  • LimitNOFILE:提高文件句柄上限,避免高并发下出现 “Too many open files”。

启动并设为开机自启:

systemctl daemon-reload systemctl enable mysqld systemctl start mysqld systemctl status mysqld --no-pager

解释:

  • daemon-reload:让 systemd 识别新服务文件。

  • status:第一时间确认是否“真启动”,不要只看进程。


7)首次登录与安全加固(把风险关在门里)🔒

如果你用的是“随机密码初始化”,先用临时密码登录:

/usr/local/mysql/bin/mysql -uroot -p -S /tmp/mysql.sock

解释:

  • -S指定 socket,避免走 TCP 端口,排障更直接。

进入后立刻改 root 密码(请替换为强密码):

ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPassw0rd!@#'; FLUSH PRIVILEGES;

解释:

  • 这是你必须完成的“交付门槛”。不改密码=不合格上线。

再做两件务实的加固:
1)禁止 root 远程(默认就不该放开)
2)创建业务账号并最小授权:

CREATE USER 'app'@'10.%' IDENTIFIED BY 'AppPassw0rd!@#'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,INDEX,EXECUTE ON yourdb.* TO 'app'@'10.%'; FLUSH PRIVILEGES;

解释:

  • 账号按网段授权,结合skip-name-resolve,稳定且可控。

  • 授权只给业务需要的动作,别图省事上来就ALL PRIVILEGES


8)验证清单(上线前的“最后一公里”)

mysql --version ss -lntp | grep 3306 || true tail -n 50 /data/mysql/error.log

解释:

  • 版本确认:避免“装了但不是你以为的版本”。

  • 端口监听:确认是否对外暴露;不需要公网就别开。

  • 错误日志:任何启动告警都在这里先解释清楚再交付。


你现在的最优下一步

如果你告诉我三点信息:内存大小、磁盘类型(SSD/机械)、预计并发连接数,我可以把innodb_buffer_pool_size / max_connections / table_open_cache这些参数按你的业务模型“定标”,做到既稳又不浪费资源。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询