首页 > 解决方案 > Windows 中的 Ubuntu Linux 18.04 WSL:MariaDB 服务启动失败

问题描述

在我的 Linux WSL for Windows 中首次安装 MariaDB 存储库配置工具后(如MariaDB 下载页面中所述),我执行mysql了但出现了套接字错误。netstat -apn | grep mysql什么都不显示,表示mysql服务已停止;sudo apt list | grep *mysql-server*说明我已经安装成功了mysql-server

但是,正如我尝试sudo service mysql start的那样,命令行给出:

 * Starting MariaDB database server mysqld                 [fail]

我尝试了以下方法,但都失败了并得到了相同的答案:

如何启动我的 MariaDB 服务?谢谢

标签: mysqllinuxubuntumariadbwindows-subsystem-for-linux

解决方案


我能够在 WSL1 上重现您的问题(或看起来非常相似的问题)。你能确认你使用的是 WSL1 吗?

我启动了 Ubuntu 20.04 的两个克隆实例(wsl --import一个干净的备份)——一个在 WSL1 上,另一个在 WSL2 上。不幸的是,我没有一个方便的 18.04 可以使用,但我希望问题是一样的。

在 WSL2 上,一切正常。在安装步骤之后(几乎是您在评论中添加的那些,但对于 20.04),我能够:

sudo service mariadb start

然后sudo mysql -u root成功。

然而,在 WSL1 上,MariaDB 安装似乎以一种奇怪的方式失败。它不会创建/etc/mysql/mariadb.cnf,这会导致您看到空的/etc/mysql/my.cnf,因为它是指向 的符号链接mariadb.cnf

所以我手动创建了 mariadb.cnf:

sudo vi /etc/mysql/mariadb.cnf

内容:

# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/

#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]
# Port or socket location where to connect
# port = 3306
socket = /run/mysqld/mysqld.sock

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

这只是mariadb.cnfWSL2 上安装正确创建的默认值。

尝试启动服务然后给出了一个关于缺失的错误/etc/mysql/debian-start,所以我重复了复制它的相同步骤:

sudo vi /etc/mysql/debian-start

与内容:

#!/bin/bash
#
# This script is executed by "/etc/init.d/mariadb" on every (re)start.
#
# Changes to this file will be preserved when updating the Debian package.
#
# NOTE: This file is read only by the traditional SysV init script, not systemd.
#

source /usr/share/mysql/debian-start.inc.sh

# Read default/mysql first and then default/mariadb just like the init.d file does
if [ -f /etc/default/mysql ]; then
  . /etc/default/mysql
fi

if [ -f /etc/default/mariadb ]; then
  . /etc/default/mariadb
fi

MYSQL="/usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf"
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
# Don't run full mysql_upgrade on every server restart, use --version-check to do it only once
MYUPGRADE="/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --version-check"
MYCHECK="/usr/bin/mysqlcheck --defaults-file=/etc/mysql/debian.cnf"
MYCHECK_SUBJECT="WARNING: mysqlcheck has found corrupt tables"
MYCHECK_PARAMS="--all-databases --fast --silent"
MYCHECK_RCPT="${MYCHECK_RCPT:-root}"

## Checking for corrupt, not cleanly closed (only for MyISAM and Aria engines) and upgrade needing tables.

# The following commands should be run when the server is up but in background
# where they do not block the server start and in one shell instance so that
# they run sequentially. They are supposed not to echo anything to stdout.
# If you want to disable the check for crashed tables comment
# "check_for_crashed_tables" out.
# (There may be no output to stdout inside the background process!)

# Need to ignore SIGHUP, as otherwise a SIGHUP can sometimes abort the upgrade
# process in the middle.
trap "" SIGHUP
(
  upgrade_system_tables_if_necessary;
  check_root_accounts;
  check_for_crashed_tables;
) >&2 &

exit 0

接着chmod 755 /etc/mysql/debian-start

之后,瞧:

sudo service mariadb restart

sudo mysql -u root

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.5.8-MariaDB-1:10.5.8+maria~focal mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

鉴于您迄今为止尝试过的步骤,我建议您将几乎所有这些都吹走以尝试“干净”重新开始:

sudo apt remove mariadb-server
sudo apt autoremove
sudo rm -rf /etc/mysql
sudo rm -rf /var/lib/mysql
sudo rm -rf /usr/lib/mysql

然后重新安装 mariadb-server 并按照上述步骤创建正确的文件。


推荐阅读