Author:Arsen
Date:2025/01/24
官方参考文档:点击链接跳转
目录
- 规划
- 下载
- 安装
- 管理
- FAQ
规划
OS | MySQL Server Version | 备注 |
---|---|---|
CentOS 7.9 or Linux - Generic | 8.0.33 | (GNU libc) 2.17 |
下载
二进制包下载地址:https://downloads.mysql.com/archives/community/
注意,OS Version 选择对应的 glibc 版本:
首先查看自己服务器 glibc 版本:
ldd --version
因此,需要选择对应的 2.17 版本。
安装
创建 mysql 数据目录
/data/mysql
创建 mysql 用户组
groupadd -g 27 -o -r mysql
创建 mysql 用户
useradd -M -N -g mysql -o -r -d /data/mysql -s /bin/false -c "MySQL Server" -u 27 mysql
选项解析:
-M
:不创建用户的主目录
-N
:不为用户自动创建同名的组,如果需要加入一个已存在的组,可通过-g
选项来指定
-g
:指定用户的主组,此时,不会自动创建mysql
组,前提是系统中已经存在mysql
组
-o
:允许新用户使用已经存在的 UID
-r
:创建系统用户,系统用户通常用于没有交互性登录权限的服务账户,UID 通常小于 1000
-d
:指定用户的家目录,通常是 MySQL 数据文件的存储目录
-s
:禁用用户登录,即不提供交互式 shell 登录
-c
:为用户添加注释,在系统的/etc/passwd
文件中可以看到该注释
-u
:指定 UID,通常,MySQL 用户会使用固定的 UID 以便与系统中的 MySQL 服务保持一致
安装包上传至服务器并解压
tar xf mysql-8.0.33-linux-glibc2.17-x86_64-minimal.tar.xz
mv mysql-8.0.33-linux-glibc2.17-x86_64-minimal/* /data/mysql
MySQL Linux 通用二进制分发目录解释:
bin
:包含了软件的主程序或者工具的可执行文件docs
:MySQL 手册(Info 格式)man
:Unix 手册页(包含了命令的用法、选项和示例)include
:存放头文件(通常是 C 或 C++ 编程语言的头文件)lib
:存放库文件(动态或静态库)LICENSE
:软件的许可证文件README
:包含软件的简要说明和安装信息share
:存放共享的资源文件support-files
:与管理多个服务器进程、自动启动配置和日志轮换相关的其他支持文件
创建文件导入、导出安全目录(防止 SQL 注入)
mkdir /data/mysql/secure-file
创建配置文件目录
mkdir /data/mysql/conf
创建数据目录
mkdir /data/mysql/data
创建日志目录
mkdir /data/mysql/logs
配置 MySQL
官方:https://dev.mysql.com/doc/mysql-secure-deployment-guide/8.0/en/secure-deployment-post-install.html
vim /data/mysql/conf/my.cnf
[mysqld]
datadir=/data/mysql/data
socket=/tmp/mysql.sock
port=13306
log-error=/data/mysql/logs/localhost.localdomain.err
user=mysql
secure_file_priv=/data/mysql/secure-file
local_infile=OFF
目录/文件授权
chown mysql.mysql -R /data/mysql/
chmod 750 -R /data/mysql
初始化数据目录(较快,秒级)
cd /data/mysql/
bin/mysqld --defaults-file=/data/mysql/conf/my.cnf --initialize
过滤出初始密码
cat logs/localhost.localdomain.err |grep 'root@localhost'
# 初始密码为: >BqGh,R>D5-G
管理
配置 systemd 管理,实现在主机重启时启用 MySQL 服务器的自动重启功能。
vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
# Have mysqld write its state to the systemd notify socket
Type=notify
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Start main service
ExecStart=/data/mysql/bin/mysqld --defaults-file=/data/mysql/conf/my.cnf $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 10000
Restart=on-failure
RestartPreventExitStatus=1
# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
设置开机自启动
systemctl enable mysqld.service
使配置生效
systemctl daemon-reload
启动 MySQL 服务
systemctl start mysqld.service
查看 MySQL 状态
systemctl status mysqld.service
重置 MySQL root 账户密码
bin/mysql -u root -p
# 这里输入我们上面过滤出来的“初始密码 >BqGh,R>D5-G”
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Zhurs@123!';
新密码验证
bin/mysqlshow -u root -p
systemd 常用管理命令:
# 启动
systemctl start mysqld.service
# 停止
systemctl stop mysqld.service
# 重启
systemctl restart mysqld.service
# 开机自启
systemctl enable mysqld.service
FAQ
[ERROR] [MY-013276] [Server] Failed to set datadir to …
现象:
原因:
MySQL 无法访问 datadir
指定的目录 /data/mysql/data/
,错误信息显示 OS errno: 13 - Permission denied
,这表明 MySQL 的 mysqld
进程没有足够的权限在该目录中创建和写入文件。
解决:
# 赋权
chmod 750 -R /data/mysql
# 再次初始化
bin/mysqld --defaults-file=/data/mysql/conf/my.cnf --initialize
ERROR 1820 (HY000): You must reset your password …
现象:
原因:
未修改初始密码。
解决:
# 修改初始密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Zhurs@123!';