前言
二进制包安装 mysql 是灵活度最高的方式(支持自定义程序目录、数据目录等所有路径),以下是分步骤、带详细解释的完整流程(适配aarch64/x86_64架构,以 mysql 8.0.44 为例):
一、前置准备(必做:环境检查 + 依赖 + 用户组)
1. 确认系统架构(选对应二进制包)
# 查看系统架构(aarch64/x86_64) uname -m
- 若输出
aarch64:选aarch64版本的二进制包; - 若输出
x86_64:选x86_64版本的二进制包。
2. 安装依赖包(避免初始化 / 启动失败)
# centos/rhel系 yum install -y libaio-devel numactl-devel perl net-tools openssl-devel # debian/ubuntu系 apt-get install -y libaio-dev numactl perl net-tools libssl-dev
- 依赖作用:
libaio是 innodb 引擎的异步 io 依赖;numactl优化多 cpu 架构性能。
3. 创建 mysql 专用用户 / 组(安全规范)
mysql 服务需以非 root 用户运行,避免权限过大:
# 创建系统组(-r:系统组,id<1000) groupadd -r mysql # 创建系统用户(-r:系统用户;-g:关联mysql组;-s:禁止登录;-m:不创建家目录) useradd -r -g mysql -s /sbin/nologin -m mysql # 验证创建结果 id mysql
二、下载并解压二进制包
1. 下载对应架构的二进制包
从 mysql 官网获取包(或用 wget 直接下载):
# 进入临时目录(避免污染系统目录) cd /tmp # ① aarch64架构下载链接 wget https://cdn.mysql.com/downloads/mysql-8.0/mysql-8.0.44-linux-glibc2.28-aarch64.tar.xz # ② x86_64架构下载链接 # wget https://cdn.mysql.com/downloads/mysql-8.0/mysql-8.0.44-linux-glibc2.28-x86_64.tar.xz
2. 解压到自定义程序目录(示例:/opt/mysql)
二进制包可解压到任意目录(如/opt//usr/local),这里以/opt/mysql为例:
# 解压包(替换为实际包名) tar -xvf mysql-8.0.44-linux-glibc2.28-aarch64.tar.xz -c /opt/ # 重命名(或创建软链接,方便后续升级) # 方式1:重命名(简单直接) mv /opt/mysql-8.0.44-linux-glibc2.28-aarch64 /opt/mysql # 方式2:软链接(升级时只需替换软链接指向) # ln -s /opt/mysql-8.0.44-linux-glibc2.28-aarch64 /opt/mysql
三、配置环境变量(简化命令调用)
若不配置环境变量,需用/opt/mysql/bin/mysql这类完整路径调用命令,配置后可直接用mysql:
# 将mysql的bin目录加入系统环境变量 echo "export path=/opt/mysql/bin:\$path" >> /etc/profile # 立即生效环境变量 source /etc/profile # 验证(输出mysql版本则成功) mysql --version
四、准备自定义目录(数据 / 日志 / pid)
二进制包的所有目录都需手动创建,核心目录包括:
| 目录 | 作用 |
|---|---|
/data/mysql | 数据存储目录(存放数据库、表、innodb 文件等核心数据) |
/data/mysql/log | 日志目录(存放错误日志、慢查询日志等) |
/var/run/mysqld | pid 文件目录(记录 mysql 服务的进程 id) |
1. 创建目录并设置权限
# 1. 数据目录 mkdir -p /data/mysql # 2. 日志目录 mkdir -p /data/mysql/log # 3. pid目录 mkdir -p /var/run/mysqld # 给所有目录赋予mysql用户权限(必须!否则mysql无读写权限) chown -r mysql:mysql /data/mysql chown -r mysql:mysql /var/run/mysqld # 设置目录权限(755:用户可读可写可执行,组/其他可读可执行) chmod -r 755 /data/mysql
五、编写 mysql 主配置文件(/etc/my.cnf)
my.cnf是 mysql 的核心配置文件,所有目录、参数都在这里定义,直接复制以下内容(需根据你的目录调整):
vi /etc/my.cnf
写入配置:
[mysqld] # 1. 程序目录(二进制包解压路径) basedir=/opt/mysql # 2. 数据目录(自定义的/data/mysql) datadir=/data/mysql # 3. socket文件路径(本地连接的通信文件,需和数据目录同权限) socket=/data/mysql/mysql.sock # 4. 运行用户 user=mysql # 5. 端口(默认3306) port=3306 # 6. 错误日志路径(自定义到日志目录) log-error=/data/mysql/log/mysqld.log # 7. pid文件路径 pid-file=/var/run/mysqld/mysqld.pid # 8. 禁用符号链接(安全选项) symbolic-links=0 # 9. 字符集(避免乱码) character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci # 10. 打开文件数限制(避免高并发时文件数不足) open_files_limit=65535 [client] # 客户端连接的socket路径(必须和mysqld的socket一致) socket=/data/mysql/mysql.sock # 客户端字符集 default-character-set=utf8mb4
六、初始化 mysql(生成系统表 + 临时密码)
初始化是创建 mysql 系统库(如mysql库,存储用户权限)、生成临时密码的关键步骤:
# 执行初始化(--user:指定运行用户;--datadir:指定数据目录) mysqld --initialize --user=mysql --datadir=/data/mysql
1. 获取临时密码
初始化成功后,临时密码会写入错误日志(/data/mysql/log/mysqld.log):
# 从日志中提取临时密码(最后一行的“root@localhost:”后即为密码)
temp_pwd=$(grep "temporary password" /data/mysql/log/mysqld.log | awk '{print $nf}')
echo "mysql临时密码:$temp_pwd"
- 示例输出:
mysql临时密码:abc123!@#
七、配置 systemd 服务(用systemctl管理 mysql)
手动创建 systemd 服务文件,实现systemctl start/stop等便捷管理:
vi /usr/lib/systemd/system/mysqld.service
写入配置:
[unit] # 服务描述 description=mysql server # 启动依赖(网络就绪后再启动) after=network.target remote-fs.target nss-lookup.target [service] # 进程类型(notify:mysql启动后主动通知systemd) type=notify # 运行用户/组 user=mysql group=mysql # 启动命令(指定配置文件路径) execstart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf # 打开文件数限制(和my.cnf保持一致) limitnofile=65535 # 进程数限制 limitnproc=65535 # 失败后自动重启 restart=on-failure # 禁止重启的退出状态码 restartpreventexitstatus=1 # 超时时间(0:无超时) timeoutsec=0 [install] # 多用户模式下启动 wantedby=multi-user.target
八、启动 mysql 并配置
1. 启动服务并设置开机自启
# 1. 重新加载systemd配置(识别新的mysqld.service) systemctl daemon-reload # 2. 启动mysql systemctl start mysqld # 3. 设置开机自启 systemctl enable mysqld # 4. 检查服务状态(显示active: running则成功) systemctl status mysqld
2. 重置初始密码(临时密码已过期)
mysql 初始化的临时密码仅用于首次登录,必须重置后才能使用:
# 用临时密码登录并重置密码(替换为你的临时密码和新密码) mysql -uroot -p"$temp_pwd" --connect-expired-password << eof # 新密码需符合策略(至少8位,含大小写+数字+特殊字符) alter user 'root'@'localhost' identified by 'mysql@8888'; # 刷新权限(确保修改生效) flush privileges; eof
九、配置远程访问(可选,如 navicat 连接)
1. 允许 root 远程连接
mysql -uroot -p"mysql@8888" << eof # 将root的访问主机改为“%”(任意远程主机) use mysql; update user set host='%' where user='root'; flush privileges; eof
2. 解决 navicat 兼容问题(mysql 8.0 专属)
mysql 8.0 默认用caching_sha2_password认证插件,旧版 navicat 不兼容,需改为传统插件:
mysql -uroot -p"mysql@8888" << eof alter user 'root'@'%' identified with mysql_native_password by 'mysql@8888'; flush privileges; eof
3. 开放防火墙端口
# 开放3306端口(永久生效) firewall-cmd --add-port=3306/tcp --permanent # 重启防火墙 firewall-cmd --reload
十、验证安装成功
# 1. 验证mysql版本 mysql --version # 2. 验证数据目录(输出/data/mysql则正确) mysql -uroot -p"mysql@8888" -e "show variables like 'datadir';" # 3. 创建测试库(验证数据写入) mysql -uroot -p"mysql@8888" -e "create database test_db;" # 查看/data/mysql下是否生成test_db目录 ls -l /data/mysql | grep test_db
常见问题排查
初始化失败:permission denied
- 原因:目录权限未给
mysql用户; - 解决:重新执行
chown -r mysql:mysql /data/mysql。
- 原因:目录权限未给
启动失败:can't read pid file
- 原因:
/var/run/mysqld权限不足; - 解决:
chown -r mysql:mysql /var/run/mysqld。
- 原因:
远程连接超时
- 原因:防火墙未开放 3306 端口;
- 解决:执行
firewall-cmd --add-port=3306/tcp --permanent。
总结
到此这篇关于linux环境安装mysql(二进制包形式)的文章就介绍到这了,更多相关linux安装mysql内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论