Windows Subsystem for LinuxでMariaDBを使う:mysql: unrecognized serviceエラーの解決方法
MariaDBとWindows Subsystem for Linuxで「mysql: unrecognized service」エラーが発生する場合の解決方法
Windows Subsystem for Linux (WSL)上でMariaDBをインストールした後、mysql
コマンドを実行すると、以下のエラーが発生する。
$ mysql
mysql: unrecognized service
原因:
このエラーは、WSL上でMariaDBサービスが正しく起動していないことが原因です。
解決方法:
この問題を解決するには、以下の手順を実行します。
- MariaDBサービスをインストールする:
sudo apt install mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
- rootユーザーのパスワードを設定する:
sudo mysql_secure_installation
- MySQLクライアントを起動する:
mysql -u root -p
パスワード入力時にエラーが発生する場合:
WSL上で設定されたパスワードと、MariaDBサービスのパスワードが異なる場合があります。以下のコマンドを実行して、MariaDBサービスのパスワードをリセットしてください。
sudo mysqld --skip-grant-tables
上記のコマンドを実行すると、パスワードなしでMySQLクライアントに接続できるようになります。
mysql -u root
MySQLクライアントに接続できたら、以下のコマンドを実行して、rootユーザーのパスワードを設定してください。
SET PASSWORD FOR root@localhost = PASSWORD('新しいパスワード');
- WSL上でMariaDBを使用する場合は、
mysql
コマンドではなく、mysql.exe
コマンドを実行する必要があります。 - 詳細については、MariaDB公式ドキュメントを参照してください。
上記の情報は参考用であり、最新の情報ではない可能性があります。情報の正確性については保証できません。
import mysql.connector
# データベースへの接続
connection = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="mydb"
)
# カーソルの作成
cursor = connection.cursor()
# テーブルの作成
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
)
""")
# データの追加
cursor.execute("""
INSERT INTO users (name, email) VALUES (%s, %s)
""", ("John Doe", "[email protected]"))
# データの取得
cursor.execute("""
SELECT * FROM users
""")
for row in cursor.fetchall():
print(row)
# コミット
connection.commit()
# カーソルのクローズ
cursor.close()
# データベースへの接続のクローズ
connection.close()
上記のコードを実行するには、以下のライブラリをインストールする必要があります。
pip install mysql-connector-python
MariaDBとWindows Subsystem for Linuxで「mysql: unrecognized service」エラーが発生する場合のその他の解決方法
MariaDB 10.4以降では、デフォルトで認証方式がcaching_sha2_password
になっています。WSL上でMariaDBを使用する場合、この認証方式は互換性がない可能性があります。
この問題を解決するには、パスワード認証方式をmysql_native_password
に変更する必要があります。以下の手順を実行します。
sudo systemctl stop mariadb
- MariaDBの設定ファイルを編集する:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
- 以下の行を編集します:
#password-authentication-policy=caching_sha2_password
password-authentication-policy=mysql_native_password
sudo systemctl start mariadb
symbolic link の作成
/etc/init.d/mysql
に symbolic link を作成することで、mysql
コマンドを実行できるようになります。
以下のコマンドを実行します:
sudo ln -s /usr/bin/mysql /etc/init.d/mysql
WSL バージョン 2 では、systemd サービスがデフォルトで使用されています。systemd サービスは、WSL バージョン 1 と互換性がない場合があります。
WSL バージョン 1 を使用している場合は、mysql
コマンドが正しく認識される可能性があります。
別のディストリビューションの使用
Ubuntu では、mysql
コマンドがデフォルトでインストールされています。他のディストリビューションを使用している場合は、mysql
コマンドをインストールする必要があります。
パッケージマネージャーの確認
WSL にインストールされているパッケージマネージャーによっては、mysql
コマンドがインストールされない場合があります。
パッケージマネージャーを確認して、mysql
コマンドがインストールされていることを確認してください。
mariadb windows-subsystem-for-linux