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



