为什么 mysql.com 的 mysql-server 包缺少服务器文件?

为什么 mysql.com 的 mysql-server 包缺少服务器文件?

我通常不使用 Ubuntu,但今天决定尝试一下,因为它是 Windows Subsystem for Linux 的首选发行版,我想今天尝试一下,看看它是否/如何取代 Windows 10 上的 VMWare 机器。

因此我在 WSL 上使用 Ubuntu,尽管我认为这在这里没有什么区别。


无论如何,我安装了 MySQL APT repo 来获取 MySQL 8.0:

$ wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
$ sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
$ sudo apt-get update
$ sudo apt-get install mysql-server

现在,当我尝试启动 mysql 服务时,却没有成功:

$ sudo service mysql start
mysql: unrecognized service

$ sudo service mysqld start
mysqld: unrecognized service

$ sudo service mysql-server start
mysql-server: unrecognized service

快速查看一下 init.d,发现没有 mysql 的文件:

$ ls -al /etc/init.d/mysql*
ls: cannot access '/etc/init.d/mysql*': No such file or directory

请注意,我无法使用它systemctl来启动服务,因为 systemd 在 WSL 上不可用。

现在有趣的部分是:当我列出 mysql-server 包中的文件时,它仅包含文件/usr/share

$ dpkg-query -L mysql-server
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/mysql-server
/usr/share/doc/mysql-server/LICENSE.gz
/usr/share/doc/mysql-server/README
/usr/share/doc/mysql-server/changelog.Debian.gz
/usr/share/doc/mysql-server/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/mysql-server

为什么 mysql-server 包在 MySQL APT repo 中缺少实际的服务器文件?

答案1

扩展 e-cloud 的答案,问题显然是 MySQL 8.0 的安装没有创建允许命令service找到安装的文件。这些文件是在安装 MySQL 5.7 时创建的,并且在之后升级到 8.0 时会保留。

笔记:

  • 以下脚本中导出的环境变量 REPO 设置了 mysql-apt-config 文件的名称。您可以在以下位置找到最新版本https://dev.mysql.com/downloads/repo/apt/
  • 该脚本在 WSL2 环境中全新安装的 Debian 上进行了测试,并首先安装了一些依赖项。如果您已经安装了 MySQL 8.0,则可以注释掉第一个块并取消注释第二个块以清理之前的安装
  • 我不喜欢重写服务初始化脚本以指向 8.0 安装的方法,因此这会删除 5.7 文件夹并将该路径符号链接到 8.0 文件夹
# mysql config to use
export REPO=mysql-apt-config_0.8.18-1_all.deb

# update system and install dependencies (fresh wsl debian image)
sudo apt update
sudo apt -y upgrade
sudo apt -y install lsb-release wget gnupg
wget –c https://dev.mysql.com/get/${REPO}

# or remove a previous installation
#sudo apt -y remove mysql-server mysql-client
#sudo apt -y autoremove && sudo apt -y autoclean

# install mysql server 5.7 to get the service init.d files
sudo dpkg -i ${REPO} # select 5.7
sudo apt update
sudo apt -y install mysql-server

# switch to mysql server 8.0 and update, link mysql path to new location
sudo dpkg -i ${REPO} # select 8.0
sudo apt update
sudo apt -y install mysql-server mysql-client
sudo rm -rf /usr/share/mysql
sudo ln -s mysql-8.0 /usr/share/mysql

# run the service
sudo service mysql start

答案2

看看这里的评论是否有帮助——https://github.com/Microsoft/WSL/issues/3631#issuecomment-465966498

这是我的可行要点https://gist.github.com/e-cloud/34acbefe0597a02f9a081a01eff6dd24

sudo apt-get remove mysql-server mysql-client -y
sudo apt-get autoremove -y && sudo apt-get autoclean -y

wget –c https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb # select 5.7

sudo apt-get update
sudo apt policy mysql-server #(it will show 5.x is the default candidate)

sudo apt-get -y install mysql-server
# ensure your host windows have no mysql service running
sudo service mysql start
sudo service mysql stop


sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb # select 8.0
sudo apt-get update
sudo apt policy mysql-server #(it will show 8.x is the default candidate)

sudo apt-get -y install mysql-server
sudo sed -ie 's/\/usr\/share\/mysql\/mysql-helpers/\/usr\/share\/mysql-8.0\/mysql-helpers/' /etc/init.d/mysql
sudo service mysql start

相关内容