当前位置: 首页 > news >正文

linux上从 MySQL 官方二进制包安装 MySQL

准备工作(确认与下载)

  1. 确认系统架构(示例):

uname -m   # 输出 aarch64 或 x86_64
lsb_release -a   # 确认发行版/版本(可选)

2. 下载 MySQL 二进制包

访问 MySQL 社区服务器下载页面:
https://dev.mysql.com/downloads/mysql/

选择:

  • Version: 8.0.x(或 5.7.x)

  • Operating System: Linux - Generic

  • OS Version: Linux - Generic (glibc 2.28) (xxx, 64-bit)

下载你想要安装版本的 tar 包:

wget https://dev.mysql.com/get/MySQL-8.0/mysql-8.0.xx-linux-glibc2.28-xxx.tar.xz

安装目录与用户准备

建议把 MySQL 安装到 /usr/local/mysql/opt/mysql。并创建 mysql 用户/组与数据目录。

# 以 root 或 sudo 执行
sudo groupadd mysql || true
sudo useradd -r -g mysql -s /bin/false mysql || true# 创建安装与数据目录
sudo mkdir -p /usr/local/mysql
sudo mkdir -p /var/lib/mysql     # 数据目录
sudo mkdir -p /var/run/mysqld    # socket / pid 文件目录
sudo chown -R mysql:mysql /var/lib/mysql /var/run/mysqld

注意:如果你使用的是 Debian/Ubuntu 的系统服务(apt 安装版本),这些目录由包自动处理;二进制手动安装需自己管理权限。


解压二进制包并部署

把 tar.xz 解压到目标目录(示例使用 /usr/local):

cd /usr/local
sudo tar -xJf /path/to/mysql-8.0.xx-linux-*.tar.xz
# 解压后目录可能名为 mysql-8.0.xx-... ,可改名为 mysql
sudo mv mysql-8.0.*/ mysql
sudo chown -R mysql:mysql /usr/local/mysql

设置符号链接(可选,方便升级):

sudo ln -sfn /usr/local/mysql /usr/local/mysql-current

将可执行文件加入 PATH(可在 /etc/profile.d/mysql.sh):

sudo tee /etc/profile.d/mysql.sh > /dev/null <<'EOF'
export PATH=/usr/local/mysql/bin:$PATH
EOF
source /etc/profile.d/mysql.sh

配置 my.cnf(最小示例)

/etc/my.cnf/etc/mysql/my.cnf 放一份最小配置(示例):

[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /var/lib/mysql
port = 3306
socket = /var/run/mysqld/mysqld.sock
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/error.log
# 根据内存/负载调整:
# innodb_buffer_pool_size = 1G
# max_connections = 200

创建日志文件目录并设置权限:

sudo mkdir -p /var/log/mysql
sudo touch /var/log/mysql/error.log
sudo chown -R mysql:mysql /var/log/mysql

初始化数据目录(两种方式)

1)安全模式初始化(推荐:自动创建随机 root 密码)

cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql
# 输出会包含临时 root 密码,记下来(或查 error.log)

2)不设置密码(测试用,不建议生产)

sudo bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql
# 初始化后 root 密码为空

初始化过程会在 /var/log/mysql/error.log 输出信息,包括初始 root 密码(如果用 --initialize)。

确保数据目录属主:

sudo chown -R mysql:mysql /var/lib/mysql

systemd 服务单元(创建 / 管理)

创建 systemd unit 文件 /etc/systemd/system/mysql.service(示例):

[Unit]
Description=MySQL Server
After=network.target[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql
ExecStop=/usr/local/mysql/bin/mysqladmin --defaults-file=/etc/my.cnf shutdown
PIDFile=/var/run/mysqld/mysqld.pid
Restart=on-failure
LimitNOFILE=5000[Install]
WantedBy=multi-user.target

然后 reload systemd 并启用:

sudo systemctl daemon-reload
sudo systemctl enable mysql
sudo systemctl start mysql
sudo systemctl status mysql

如果你偏好直接使用 mysqld 而非 mysqld_safe,可以把 ExecStart 改为 /usr/local/mysql/bin/mysqld --daemonize --defaults-file=/etc/my.cnf 并确保 PIDFile 路径一致。


首次登录与安全配置

若使用 --initialize,error.log 会记录临时 root 密码。登录并运行 mysql_secure_installation(或手动设置):

# 登录(替换临时密码)
/usr/local/mysql/bin/mysql -u root -p# 或使用环境 PATH
mysql -u root -p

运行 mysql_secure_installation(交互式):

sudo /usr/local/mysql/bin/mysql_secure_installation

它会引导你设置 root 密码、移除匿名用户、禁止远程 root 登录、删除测试数据库、重新加载权限等。

如果想手动设置 root 密码(示例):

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码'; 
FLUSH PRIVILEGES;

常见额外配置与优化

  • 将 basedir、datadir、socket、pid-file 在 my.cnf 中明确指定,避免多个安装混淆。

  • 若系统启用 AppArmor(Ubuntu),需为自建 MySQL 调整 AppArmor 配置或禁用相关 profile。路径 /etc/apparmor.d/

  • 防火墙(ufw/iptables):如果需要远程访问,允许 3306 端口(注意安全)。

  • SELinux(RHEL/CentOS)上要设定正确的上下文。


验证安装是否成功

# 查看进程
ps aux | grep mysqld# 登录
mysql -u root -p# 查看版本
mysqladmin version

日常运维命令(快速清单)

sudo systemctl start|stop|restart mysql
sudo tail -f /var/log/mysql/error.log
mysqld --verbose --help | head -n 50   # 查看默认变量位置
mysql -e "SHOW VARIABLES LIKE 'datadir';"

卸载(手动安装)与清理

  1. 停止服务并移除 unit:

sudo systemctl stop mysql
sudo systemctl disable mysql
sudo rm /etc/systemd/system/mysql.service
sudo systemctl daemon-reload
  1. 删除安装目录、数据、配置(注意:会丢数据):

sudo rm -rf /usr/local/mysql /usr/local/mysql-current /var/lib/mysql /etc/my.cnf /var/log/mysql

常见故障排查(简要)

  • 启动失败查看 /var/log/mysql/error.log(最重要)。

  • socket 文件未找到:确认 my.cnf 中 socket 路径一致,且 /var/run/mysqld 存在且属主为 mysql。若重启后丢失,参考上文 tmpfiles/systemd RuntimeDirectory。

  • 权限问题:确认数据目录属主 mysql:mysql 并且有读写。

  • 端口被占用:ss -ltnp | grep 3306

  • AppArmor/SELinux 拒绝访问:检查系统日志(journalctl -xe)与对应安全模块配置。

一键安装脚本:

#!/bin/bash
#
# 自动安装 MySQL 8.0.42 (aarch64, glibc2.28)
# 适用于 Debian 11 ARM64 系统
# 作者: ChatGPT GPT-5
# -------------------------------------------MYSQL_VER="8.0.42"
MYSQL_TAR="mysql-${MYSQL_VER}-linux-glibc2.28-aarch64.tar.xz"
MYSQL_URL="https://downloads.mysql.com/archives/get/p/23/file/${MYSQL_TAR}"INSTALL_DIR="/usr/local/mysql"
DATA_DIR="/var/lib/mysql"
LOG_DIR="/var/log/mysql"
RUN_DIR="/var/run/mysqld"
MY_CNF="/etc/my.cnf"
SERVICE_FILE="/etc/systemd/system/mysql.service"
TMPFILES_CONF="/etc/tmpfiles.d/mysqld.conf"ROOT_PASSWORD="19940416"
DB_NAME="oilgas_triple"
INIT_SQL="/root/oilgas_triple.sql"   # 如果存在该文件则自动导入#--------------------------
echo "===> 检查系统架构与依赖..."
ARCH=$(uname -m)
if [ "$ARCH" != "aarch64" ]; thenecho "❌ 当前架构不是 aarch64,请确认你下载的是正确版本的 MySQL 包。"exit 1
fiapt-get update -y
apt-get install -y libaio1 xz-utils curl lsb-release#--------------------------
echo "===> 创建 mysql 用户与目录..."
groupadd -r mysql 2>/dev/null || true
useradd -r -g mysql -s /bin/false mysql 2>/dev/null || truemkdir -p $INSTALL_DIR $DATA_DIR $LOG_DIR $RUN_DIR
chown -R mysql:mysql $DATA_DIR $LOG_DIR $RUN_DIR#--------------------------
echo "===> 下载并解压 MySQL 二进制包..."
cd /usr/local
if [ ! -f "/tmp/${MYSQL_TAR}" ]; thenecho "下载 ${MYSQL_TAR} ..."curl -L -o "/tmp/${MYSQL_TAR}" "$MYSQL_URL"
fitar -xJf "/tmp/${MYSQL_TAR}" -C /usr/local
mv /usr/local/mysql-${MYSQL_VER}-linux-glibc2.28-aarch64 /usr/local/mysql
chown -R mysql:mysql $INSTALL_DIR#--------------------------
echo "===> 配置环境变量..."
cat >/etc/profile.d/mysql.sh <<'EOF'
export PATH=/usr/local/mysql/bin:$PATH
EOF
source /etc/profile.d/mysql.sh#--------------------------
echo "===> 生成 my.cnf 配置文件..."
cat >$MY_CNF <<EOF
[client]
port = 3306
socket = ${RUN_DIR}/mysqld.sock[mysqld]
user = mysql
basedir = ${INSTALL_DIR}
datadir = ${DATA_DIR}
socket = ${RUN_DIR}/mysqld.sock
pid-file = ${RUN_DIR}/mysqld.pid
log-error = ${LOG_DIR}/error.log
port = 3306
symbolic-links = 0
EOF#--------------------------
echo "===> 初始化数据库目录..."
$INSTALL_DIR/bin/mysqld --initialize-insecure --user=mysql --basedir=$INSTALL_DIR --datadir=$DATA_DIR
chown -R mysql:mysql $DATA_DIR#--------------------------
echo "===> 创建 systemd 服务文件..."
cat >$SERVICE_FILE <<EOF
[Unit]
Description=MySQL Server
After=network.target[Service]
Type=forking
User=mysql
Group=mysql
RuntimeDirectory=mysqld
RuntimeDirectoryMode=0755
ExecStart=${INSTALL_DIR}/bin/mysqld_safe --defaults-file=${MY_CNF} --datadir=${DATA_DIR}
ExecStop=${INSTALL_DIR}/bin/mysqladmin --defaults-file=${MY_CNF} shutdown
PIDFile=${RUN_DIR}/mysqld.pid
Restart=on-failure
LimitNOFILE=5000[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload#--------------------------
echo "===> 创建 tmpfiles 配置(确保重启后 /var/run/mysqld 存在)..."
cat >$TMPFILES_CONF <<EOF
d ${RUN_DIR} 0755 mysql mysql -
EOF
systemd-tmpfiles --create $TMPFILES_CONF#--------------------------
echo "===> 启动 MySQL 服务..."
systemctl enable mysql
systemctl start mysql
sleep 5if ! systemctl is-active --quiet mysql; thenecho "❌ MySQL 启动失败,请检查日志:$LOG_DIR/error.log"exit 1
fi#--------------------------
echo "===> 设置 root 密码并初始化数据库..."
mysql -u root --socket=${RUN_DIR}/mysqld.sock <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '${ROOT_PASSWORD}';
FLUSH PRIVILEGES;
CREATE DATABASE IF NOT EXISTS ${DB_NAME};
EOF# 导入初始化 SQL(如果存在)
if [ -f "$INIT_SQL" ]; thenecho "===> 导入初始化 SQL 文件: $INIT_SQL"mysql -u root -p${ROOT_PASSWORD} ${DB_NAME} < "$INIT_SQL"
fi#--------------------------
echo "✅ MySQL ${MYSQL_VER} 安装完成!"
echo "-------------------------------------------"
echo "服务控制: systemctl start|stop|restart mysql"
echo "配置文件: $MY_CNF"
echo "数据目录: $DATA_DIR"
echo "日志目录: $LOG_DIR"
echo "root 密码: ${ROOT_PASSWORD}"
echo "数据库名: ${DB_NAME}"
echo "socket: ${RUN_DIR}/mysqld.sock"
echo "-------------------------------------------"

http://www.dtcms.com/a/573828.html

相关文章:

  • 网络通信---OSI七层模型
  • 淘宝客如何做淘宝客网站网站特色分析
  • 问题:编译jetson-inference,找不到-lnpymath
  • redis集群下如何使用lua脚本
  • 剪贴板管理工具,高效管理复制内容
  • 2.1 python装饰器基础:从语法糖到高阶函数
  • 什么是网站维护中珠宝 网站欣赏
  • 《投资-162》谨慎参与大涨之后的大跌的反弹。
  • 【区块链】一、原理与起源
  • LeetCode算法日记 - Day 94: 最长的斐波那契子序列的长度
  • 站长之家特效网站成都记者留言网站
  • 从咨询师到产品创造者:当AI让‘重复劳动‘变成创业金矿
  • 浅学Java-设计模式
  • Java Vector集合全面解析:线程安全的动态数组
  • FIB为什么要用液态镓来做离子源?
  • zabbix深度监控之邮件告警、微信群和微信告警
  • h5手机网站建设网页制作开版费
  • 企业做网站需要多少钱江西省住房建设厅统计网站
  • 游戏登录接口被爆破?从限流到 AI 防护的完整防御方案
  • 【训练技巧】优化器adam和adamw的公式推导详解及区别
  • 网易云网站开发网页开发的基本过程
  • 网站建设实训报告作业惠民网站建设
  • 上海华亮建设集团网站河南省城乡与住房建设厅网站首页
  • 【计算机视觉目标检测算法对比:R-CNN、YOLO与SSD全面解析】
  • 如何判断一个需求是“必须做”还是“可以等”?
  • 网站的主机做网站有发展吗
  • 力扣.84柱状图中最大矩形 力扣.134加油站牛客.abb(hard 动态规划+哈希表)牛客.哈夫曼编码
  • Verilog宏define
  • 性能瓶颈如何识别定位
  • ubuntu24.04制作离线本地APT源