你这个场景的关键矛盾是:5.7 是用 18.04 的 deb-bundle 强行装在 22.04 上的(已经占了 mysql.service / 3306 / /var/run/mysqld/mysqld.sock),再走 apt install mysql-server 装 8.0 会直接冲突——mysql-common、/etc/mysql/、服务名全都撞。
所以 8.0 别走 apt 了,两条路选一个:
路线 A:本机再装一个 8.0(官方 glibc tarball 手动部署,推荐可控)
8.0 用 Oracle 提供的 “Generic Linux (glibc)” tarball,解压即用,和 5.7 的 deb 完全不打架。
1. 下载 8.0 二进制包
cd /usr/local/srcwget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-linux-glibc2.28-x86_64.tar.xztar -xf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xzmv mysql-8.0.36-linux-glibc2.28-x86_64 /usr/local/mysql-8.0
2. 准备目录和用户
# 可以复用已有的 mysql 用户,也可以单独建 mysql80sudo mkdir -p /var/lib/mysql80 /var/log/mysql /var/run/mysqldsudo chown -R mysql:mysql /var/lib/mysql80 /var/run/mysqld /var/log/mysqlsudo chown -R mysql:mysql /usr/local/mysql-8.0
3. 独立的 /etc/my80.cnf(端口 / datadir / socket 全隔离)
[mysqld]basedir = /usr/local/mysql-8.0datadir = /var/lib/mysql80socket = /var/run/mysqld/mysqld80.sockpid-file = /var/run/mysqld/mysqld80.pidlog-error = /var/log/mysql/mysql80.errport = 3307user = mysqlserver-id = 80# 8.0 默认 caching_sha2_password,老驱动连不上可加这行# default_authentication_plugin=mysql_native_password
关键:port ≠ 3306、socket 文件名 ≠ mysqld.sock、datadir ≠ /var/lib/mysql(5.7 在那)
4. 初始化 8.0 数据目录
/usr/local/mysql-8.0/bin/mysqld \--defaults-file=/etc/my80.cnf \--initialize \--user=mysql
临时 root 密码会打在 /var/log/mysql/mysql80.err 里,记下来。
5. 写独立的 systemd 单元 /etc/systemd/system/mysql80.service
[Unit]Description=MySQL 8.0After=network.target[Service]Type=forkingUser=mysqlGroup=mysqlExecStart=/usr/local/mysql-8.0/bin/mysqld --defaults-file=/etc/my80.cnfLimitNOFILE=65535[Install]WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl enable mysql80sudo systemctl start mysql80
6. 连接验证
/usr/local/mysql-8.0/bin/mysql -u root -p -S /var/run/mysqld/mysqld80.sock# 或 TCPmysql -h 127.0.0.1 -P 3307 -u root -p
5.7 继续走默认的 mysql -u root -p(3306 / /var/run/mysqld/mysqld.sock),互不干扰。
路线 B:Docker 跑 8.0(最省事,对宿主机零污染)
如果你只是要用 8.0、不想折腾 tarball 和 systemd 单元,一句完事:
docker run --name mysql80 \-p 127.0.0.1:3307:3306 \-v /var/lib/mysql80-docker:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=你的密码 \-d mysql:8.0
连接:mysql -h 127.0.0.1 -P 3307 -u root -p。宿主机 5.7 的 deb 服务完全不受影响,这也是 AskUbuntu 上同问的被采纳答法。
顺手提一句你 5.7 那边的隐患
mysql-server_5.7.42-1ubuntu18.04_amd64.deb-bundle.tar 是给 18.04 打的,在 22.04 跑依赖 libssl1.1 和 libtinfo5,22.04 默认是 libssl3——你能装上说明这俩你已经补过了,但如果哪天 5.7 起不来,先检查这俩 .so 还在不在。
💡 选哪个?想本机长期共存、两个实例都要 systemctl 管 → 路线 A;只想”能用 8.0 客户端/连一下”→ 路线 B 的 Docker 更干净,5.7 那个 18.04 deb 本来就是勉强跑的,少碰它。
