mysql二进制部署

环境: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: 没有那个文件或目录

解决:

  1. 先创建并编写 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

  2. 授权目录权限(关键步骤)

    递归授权给 mysql 用户

    chown -R mysql:mysql /usr/local/mysql

  3. 初始化 MySQL 数据库(生成临时密码)

    初始化数据库

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

  4. 解决 libtinfo.so.5 依赖问题(Rocky 9 专属)

    检查现有库文件

    ll /usr/lib64/libtinfo.so*

    创建软链接解决依赖

    ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5

  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

  6. 查看临时密码并修改 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 问题)

  1. 杀死所有残留 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

  2. 检查并修复目录权限

    确保 MySQL 目录归属正确

    chown -R mysql:mysql /usr/local/mysql

    确保 /tmp 目录可写(socket 文件生成在这里)

    chmod 1777 /tmp

  3. 用 systemd 重新启动 MySQL 服务(之前已经配置好)

    重新加载 systemd 配置

    systemctl daemon-reload

    启动 MySQL 服务

    systemctl start mysqld

    查看启动状态(必须看到 active (running))

    systemctl status mysqld

如果启动超时,耐心等 30 秒,MySQL 8.0 初始化需要时间。

  1. 验证 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();
相关推荐
夕除2 小时前
Mysql--07
数据库·mysql
顶点多余2 小时前
Mysql--后端与前端关系
数据库·mysql
mygljx3 小时前
【MySQL 的 ONLY_FULL_GROUP_BY 模式】
android·数据库·mysql
sunwenjian8863 小时前
Springboot项目本地连接并操作MySQL数据库
数据库·spring boot·mysql
Mr. Cao code4 小时前
MySQL服务器配置与socket连接详解
服务器·数据库·mysql
Yupureki4 小时前
《MySQL数据库基础》1. 数据库基础
c语言·开发语言·数据库·c++·mysql·oracle·github
xyyaihxl4 小时前
【MySQL】复合查询
数据库·mysql
未来龙皇小蓝4 小时前
【MySQL-索引调优】02:单列索引
数据库·mysql·性能优化
剑锋所指,所向披靡!5 小时前
MySQL数据的增删改查
java·数据库·mysql