Windows Subsystem for LinuxでMariaDBを使う:mysql: unrecognized serviceエラーの解決方法

2024-04-02

MariaDBとWindows Subsystem for Linuxで「mysql: unrecognized service」エラーが発生する場合の解決方法

Windows Subsystem for Linux (WSL)上でMariaDBをインストールした後、mysqlコマンドを実行すると、以下のエラーが発生する。

$ mysql
mysql: unrecognized service

原因:

このエラーは、WSL上でMariaDBサービスが正しく起動していないことが原因です。

解決方法:

この問題を解決するには、以下の手順を実行します。

  1. MariaDBサービスをインストールする:
sudo apt install mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
  1. rootユーザーのパスワードを設定する:
sudo mysql_secure_installation
  1. 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
  1. MariaDBの設定ファイルを編集する:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
  1. 以下の行を編集します:
#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


Spark SQL JDBC でMariaDBテーブルを読み込む:4つの方法を徹底比較

Apache Spark SQL を使ってJDBC経由でMariaDBに接続する場合、まれにクエリ結果が列名のみになってしまうことがあります。この問題は、様々な要因によって引き起こされる可能性があり、根本的な原因を特定して解決することが重要です。...


MariaDB/MySQLで「Unknown column in 'having clause'」を完全撃退!解決策と回避策まとめ

MySQL 5.5 でクエリを実行中に "Unknown column in 'having clause'" エラーが発生する場合は、HAVING 句で指定されている列がクエリで選択されていない可能性があります。このエラーは、SELECT 句で選択していない列を HAVING 句でフィルター条件として使用しようとすると発生します。...


MariaDB UNION構文:副問い合わせネストで内部SELECTにエイリアスを付与

しかし、いくつかの代替手段を用いることで、実質的に内部SELECTサブクエリにエイリアスを付与したような挙動を実現することができます。共通テーブル式(CTE)の使用MariaDBバージョン8. 0以降では、CTEを用いることで、内部SELECTサブクエリに名前を付けることができます。CTEは、再利用可能なクエリブロックを定義する機能であり、UNION構文内でCTEを参照することで、内部SELECTサブクエリにエイリアスのような役割を持たせることができます。...


PHPとMariaDBでLOAD DATA LOCAL INFILEを使う際のエラーと解決策

このエラーは、PHP または MariaDB のアップデート後に、LOAD DATA LOCAL INFILE コマンドを実行しようとすると発生します。このコマンドは、ローカルファイルからデータをデータベースに読み込むために使用されますが、セキュリティ上の理由から、デフォルトで無効化されています。...


SQL SQL SQL SQL Amazon で見る



MariaDB on Windows - データベースエンジン起動エラーのトラブルシューティングガイド

MariaDB on Windowsでデータベースエンジンを起動しようとすると、エラーが発生する可能性があります。このエラーは、さまざまな原因によって発生する可能性があり、解決方法も原因によって異なります。原因エラーが発生する原因として、以下の例が挙げられます。


MariaDBの起動に失敗するエラー「Failed to start LSB: Start and stop the mysql database server daemon」の解決方法

このエラーは、MariaDBデータベースサーバーの起動に失敗したことを示します。LSB(Linux Standard Base)は、Linuxディストリビューション間の互換性を向上させるための標準規格であり、このエラーメッセージは、LSB準拠のinitスクリプトを使用してMariaDBを起動しようとした際に発生します。


Docker vs Snapcraft vs ソースコード?WSLにMariaDBをインストールする最適な方法は?

WSL は、Windows 10 と Windows 11 で利用可能な機能で、Linux 環境を直接実行することができます。WSL 上に MariaDB をインストールすることで、Windows 上でデータベースサーバーを構築し、Web アプリケーション開発など様々な用途に利用することができます。