环境:Rocy
1.mysql二进制安装
[root@localhost ~]# wget -c https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
[root@localhost ~]# xz -d mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
[root@localhost ~]# tar xvf mysql-8.0.36-linux-glibc2.28-x86_64.tar -C /usr/local
[root@localhost ~]# cd /usr/local
[root@localhost local]# mv mysql-8.0.36-linux-glibc2.28-x86_64 mysql
[root@localhost local]# cd mysql
[root@localhost mysql]# useradd mysql
[root@localhost mysql]# mkdir etc logs data
[root@localhost mysql]# more /usr/local/mysql/etc/my.cnf
more: 打不开 /usr/local/mysql/etc/my.cnf: 没有那个文件或目录
解决:
-
先创建并编写 MySQL 配置文件
进入 MySQL 目录
cd /usr/local/mysql
创建 my.cnf 配置文件
cat > /usr/local/mysql/etc/my.cnf << EOF
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
user=mysql
basedir=/usr/local/mysql
skip-name-resolve
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
EOF -
授权目录权限(关键步骤)
递归授权给 mysql 用户
chown -R mysql:mysql /usr/local/mysql
-
初始化 MySQL 数据库(生成临时密码)
初始化数据库
bin/mysqld --initialize --user=mysql
--basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data -
解决
libtinfo.so.5依赖问题(Rocky 9 专属)检查现有库文件
ll /usr/lib64/libtinfo.so*
创建软链接解决依赖
ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
-
配置并启动 MySQL 服务
复制启动脚本到 systemd
cat > /etc/systemd/system/mysqld.service << EOF
[Unit]
Description=MySQL Server
After=network.target[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
Restart=always[Install]
WantedBy=multi-user.target
EOF重载 systemd 并启动服务
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld -
查看临时密码并修改 root 密码
从日志中提取临时密码
grep 'temporary password' /usr/local/mysql/logs/mysqld.log
登录 MySQL(输入临时密码)
/usr/local/mysql/bin/mysql -uroot -p
修改 root 密码(替换为你的密码,需满足复杂度要求)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
exit
三、验证部署
# 检查服务状态
systemctl status mysqld
# 测试登录


一、当前问题分析
这说明 MySQL 服务根本没启动成功 ,/tmp/mysql.sock 文件都没生成,所以无法通过 socket 连接。同时你在 mysql 用户下操作,缺少 /etc/init.d/ 目录权限,导致复制启动脚本失败。
二、先切回 root 用户(关键)
你现在在 mysql 用户下,很多系统操作没有权限,先切回 root:
并重新启动 MySQL(从根源解决 socket 问题)
-
杀死所有残留 MySQL 进程
杀死所有 mysqld 相关进程
kill -9 (ps -ef | grep -E 'mysqld|mysqld_safe' | grep -v grep | awk '{print 2}')
验证进程已清空(无输出即为成功)
ps -ef | grep -E 'mysqld|mysqld_safe' | grep -v grep
-
检查并修复目录权限
确保 MySQL 目录归属正确
chown -R mysql:mysql /usr/local/mysql
确保 /tmp 目录可写(socket 文件生成在这里)
chmod 1777 /tmp
-
用 systemd 重新启动 MySQL 服务(之前已经配置好)
重新加载 systemd 配置
systemctl daemon-reload
启动 MySQL 服务
systemctl start mysqld
查看启动状态(必须看到 active (running))
systemctl status mysqld
如果启动超时,耐心等 30 秒,MySQL 8.0 初始化需要时间。
-
验证 socket 文件是否生成
ls -lh /tmp/mysql.sock
正常输出应类似:srwxrwxrwx. 1 mysql mysql 0 3月 13 22:45 /tmp/mysql.sock
四、如果服务仍启动失败:查看日志定位根因
常见原因:
- 内存不足:虚拟机内存 < 1G,MySQL 启动时 OOM 被系统杀死 → 建议给虚拟机至少 2G 内存。
- SELinux 阻止 :临时关闭
setenforce 0后再启动。 - 数据目录损坏 :如果日志提示
InnoDB: corruption,需要备份后重新初始化。
五、启动成功后重置密码(最终步骤)
服务正常运行后,用之前的临时密码或重置密码登录:
# 方式1:用临时密码登录(q6pO;As5o4)
/usr/local/mysql/bin/mysql -uroot -p
# 方式2:如果密码仍错误,用免密模式重置(服务启动后无法用,必须先 stop)
systemctl stop mysqld
/usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
sleep 5
/usr/local/mysql/bin/mysql -uroot -e "USE mysql; FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@123456'; FLUSH PRIVILEGES;"
kill -9 $(ps -ef | grep mysqld_safe | grep -v grep | awk '{print $2}')
systemctl start mysqld
六、验证最终结果
# 登录测试
/usr/local/mysql/bin/mysql -uroot -pRoot@123456
# 查看版本
SELECT VERSION();
