乐大师头像
关注

ubuntu 22安装mysql8.0

ubuntu 22系统新安装完成。

其apt源需要修改。

借助ai写了一个脚本替换源地址。

脚本如下:

#!/bin/bash
###############################################################################
# ubuntu-change-apt-source.sh  —  Ubuntu 软件源一键切换脚本
#
# 支持:Ubuntu 16.04 / 18.04 / 20.04 / 22.04 / 24.04 / 24.10 / 25.04
# 自动识别系统代号(codename)与源文件格式:
#   - 24.04 及以上(noble+):/etc/apt/sources.list.d/ubuntu.sources (deb822 格式)
#   - 22.04 及以下          :/etc/apt/sources.list (单行格式)
#
# 用法:
#   sudo ./ubuntu-change-apt-source.sh [镜像]
#   镜像可选:aliyun(默认) | tuna | ustc | tencent | huawei | official
#   示例:sudo ./ubuntu-change-apt-source.sh tuna
#
# 特性:
#   - 自动备份原文件(带时间戳)
#   - 自动禁用其它 .list / .sources,避免冲突
#   - 只保留归档源和当前系统对应套件,避免 404
#   - 换源后自动执行 apt update 验证
###############################################################################

set -euo pipefail

RED=$'\033[31m'; GREEN=$'\033[32m'; YELLOW=$'\033[33m'; CYAN=$'\033[36m'; NC=$'\033[0m'
info()  { echo "${CYAN}[*]${NC} $*"; }
ok()    { echo "${GREEN}[✓]${NC} $*"; }
warn()  { echo "${YELLOW}[!]${NC} $*"; }
die()   { echo "${RED}[✗]${NC} $*" >&2; exit 1; }

#--------------------------------------------------------------- 0. 权限检查
[[ $EUID -eq 0 ]] || die "请用 root 运行(sudo $0 $*)"

#--------------------------------------------------------- 1. 识别系统与代号
[[ -r /etc/os-release ]] || die "找不到 /etc/os-release,无法识别系统"
. /etc/os-release
[[ "${ID:-}" == "ubuntu" ]] || die "当前系统 ID=${ID:-未知},本脚本仅适用于 Ubuntu"

VERSION_ID="${VERSION_ID:-}"
CODENAME="$( . /etc/os-release; echo "${UBUNTU_CODENAME:-${VERSION_CODENAME:-}}" )"
if [[ -z "$CODENAME" ]]; then
  command -v lsb_release >/dev/null 2>&1 && CODENAME="$(lsb_release -cs)"
fi
[[ -n "$CODENAME" ]] || die "无法获取系统代号,请先安装 lsb-release:apt-get install -y lsb-release"

info "系统:${PRETTY_NAME:-Ubuntu $VERSION_ID}  →  代号:${CODENAME}($VERSION_ID)"

# 判断使用哪种源文件格式(Ubuntu 24.04 起默认 deb822)
MAJOR="${VERSION_ID%%.*}"
if [[ "$MAJOR" -ge 24 ]]; then
  NEW_FORMAT=1        # deb822: /etc/apt/sources.list.d/ubuntu.sources
  DEB822_SUITE_EXTRA=""
else
  NEW_FORMAT=0
  DEB822_SUITE_EXTRA=""
fi

#------------------------------------------------------------ 2. 选择镜像源
MIRROR="${1:-aliyun}"
case "$MIRROR" in
  aliyun)   BASE="https://mirrors.aliyun.com/ubuntu"                              ; NAME="阿里云"   ;;
  tuna)     BASE="https://mirrors.tuna.tsinghua.edu.cn/ubuntu"                    ; NAME="清华 TUNA";;
  ustc)     BASE="https://mirrors.ustc.edu.cn/ubuntu"                             ; NAME="中科大"   ;;
  tencent)  BASE="https://mirrors.cloud.tencent.com/ubuntu"                       ; NAME="腾讯云"   ;;
  huawei)   BASE="https://repo.huaweicloud.com/ubuntu"                            ; NAME="华为云"   ;;
  official) BASE="http://archive.ubuntu.com/ubuntu"                               ; NAME="官方"     ;;
  *) die "未知镜像 '${MIRROR}',可选:aliyun | tuna | ustc | tencent | huawei | official" ;;
esac
# security 套件:国内镜像通常与主站同路径;官方源安全更新在 security.ubuntu.com
SEC_BASE="$BASE"
[[ "$MIRROR" == "official" ]] && SEC_BASE="http://security.ubuntu.com/ubuntu"
info "目标镜像:${NAME}  →  ${BASE}"

STAMP="$(date +%Y%m%d-%H%M%S)"

#------------------------------------------------------ 3. 备份并清理旧配置
info "备份原有配置…"
BACKUP_DIR="/etc/apt/backup-${STAMP}"
mkdir -p "$BACKUP_DIR"
[[ -f /etc/apt/sources.list ]] && cp -a /etc/apt/sources.list "$BACKUP_DIR/" || true
if compgen -G "/etc/apt/sources.list.d/*" >/dev/null; then
  cp -a /etc/apt/sources.list.d "$BACKUP_DIR/" || true
fi
ok "原配置已备份到:${BACKUP_DIR}"

# 注释掉旧 sources.list,并禁用 sources.list.d 下其余源,防止重复/冲突
if [[ -f /etc/apt/sources.list ]]; then
  grep -qE '^#.*by ubuntu-change-apt-source' /etc/apt/sources.list 2>/dev/null || \
    sed -i '1i # Disabled by ubuntu-change-apt-source at '"$STAMP"'\n' /etc/apt/sources.list
  sed -i -E 's@^[[:space:]]*(deb|deb-src)[[:space:]]@#\1 @' /etc/apt/sources.list
fi
# 只禁用"指向 Ubuntu 官方/旧镜像"的源,保留 Docker / NodeSource 等第三方源
for f in /etc/apt/sources.list.d/*.list /etc/apt/sources.list.d/*.sources; do
  [[ -e "$f" ]] || continue
  case "$f" in
    *.disabled-by-script-*) continue ;;   # 已处理过
  esac
  if grep -qiE '(archive|security|ports)\.ubuntu\.com|mirrors\.(aliyun|tuna|ustc|cloud\.tencent|huaweicloud)\.(com|cn)[^ ]*ubuntu' "$f" 2>/dev/null; then
    mv "$f" "${f}.disabled-by-script-${STAMP}"
    info "  已禁用旧 Ubuntu 源:$(basename "$f")"
  else
    warn "  保留第三方源(未改动):$(basename "$f")"
  fi
done
ok "旧 Ubuntu 源已禁用(备份目录中仍保留原文件)"

#------------------------------------------------------------ 4. 写入新配置
if [[ "$NEW_FORMAT" -eq 1 ]]; then
  # ---- Ubuntu 24.04+ : deb822 格式 ----
  TARGET="/etc/apt/sources.list.d/ubuntu.sources"
  info "写入 deb822 格式源:${TARGET}"
  cat > "$TARGET" <<EOF
# Generated by ubuntu-change-apt-source.sh at ${STAMP}
# Mirror: ${NAME} (${BASE})

Types: deb
URIs: ${BASE}/
Suites: ${CODENAME} ${CODENAME}-updates ${CODENAME}-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

Types: deb
URIs: ${SEC_BASE}/
Suites: ${CODENAME}-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF
  ok "已写入 ${TARGET}"
else
  # ---- Ubuntu 22.04 及以下 : 单行格式 ----
  TARGET="/etc/apt/sources.list"
  info "写入经典格式源:${TARGET}"
  cat > "$TARGET" <<EOF
# Generated by ubuntu-change-apt-source.sh at ${STAMP}
# Mirror: ${NAME} (${BASE})

deb ${BASE}/ ${CODENAME} main restricted universe multiverse
deb ${BASE}/ ${CODENAME}-updates main restricted universe multiverse
deb ${BASE}/ ${CODENAME}-backports main restricted universe multiverse
deb ${SEC_BASE}/ ${CODENAME}-security main restricted universe multiverse
EOF
  ok "已写入 ${TARGET}"
fi

#-------------------------------------------------------- 5. 清缓存并验证
info "刷新软件包索引(apt update)…"
if apt-get update; then
  ok "换源成功,软件源已生效。"
  echo
  info "当前源列表:"
  if [[ "$NEW_FORMAT" -eq 1 ]]; then
    grep -E '^(URIs|Suites):' "$TARGET" | sed 's/^/    /'
  else
    grep -E '^deb ' "$TARGET" | sed 's/^/    /'
  fi
  echo
  warn "如需回滚:cp -a ${BACKUP_DIR}/sources.list* /etc/apt/ 2>/dev/null; cp -a ${BACKUP_DIR}/sources.list.d/* /etc/apt/sources.list.d/ 2>/dev/null; apt-get update"
else
  die "apt update 失败。请检查网络、DNS 或代理;原配置备份在 ${BACKUP_DIR}"
fi

从mysql官网下载源文件包。

解包:

tar xf mysql-server_8.0.44-1ubuntu22.04_amd64.deb-bundle.tar

依次安装:

dpkg -i mysql-common_8.0.44-1ubuntu22.04_amd64.deb

dpkg -i mysql-community-client-plugins_8.0.44-1ubuntu22.04_amd64.deb

dpkg -i libmysqlclient21_8.0.44-1ubuntu22.04_amd64.deb

dpkg -i libmysqlclient-dev_8.0.44-1ubuntu22.04_amd64.deb

dpkg -i mysql-community-client-core_8.0.44-1ubuntu22.04_amd64.deb

dpkg -i mysql-client_8.0.44-1ubuntu22.04_amd64.deb

apt-get install libmecab2

dpkg -i mysql-community-server-core_8.0.44-1ubuntu22.04_amd64.deb

dpkg -i mysql-community-server_8.0.44-1ubuntu22.04_amd64.deb

使用systemctl查看mysql状态:

systemctl status mysql

使用ps aux |grep mysql也可以

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/bigwood99/article/details/166469957

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--