LoginSignup
0
1

More than 1 year has passed since last update.

Ubuntu(wsl)へのMySQL(8)セットアップ

Last updated at Posted at 2022-10-29

MySQL触ってみよう!ということで、ここを見ながらMySQLをセットアップしていたらインストール後のセットアップで困りました。

ググって対応策を試しても解決できず困っていたのですが、公式を見に行ったら即解決しました。
StackOverflowなど便利なサイトは多いですが、公式のドキュメントを見るのが一番ですね。なのでこの記事を見る必要はないのですが、同じように詰まった人や数か月もしたら忘れる自分のために残しておきます。

結論

公式のドキュメンテーションを読もう。
以降詳細なインストールの流れと自分の詰まったところをメモっておきます。

インストール

クライアント、プログラムをaptからパッケージ経由でインストール。

sudo apt-get install mysql-server
sudo apt-get install mysql-client

これでMySQL8.0サーバー、クライアントがインストールされるので実行は可能となる。

セットアップ

まずサーバー起動

sudo service mysql start

ここで

sudo mysql_secure_installation

でrootパスワード設定など諸々の設定ができるように書かれていたが、ここでパスワードが必要。

Error: Access denied for user 'root'@'localhost' (using password: YES)

しっかり怒られます。
これをググるとセーフモードで~等、過去の解決法が出てくるが、セーフモードではパスワード変更ができません。
解決法を探しに行きます。

初期化はすでに行われているので必要ありませんが、パスワード周りを再設定したいので大人しく従います。
mysql.userテーブルを変にいじって困っているひともリセットボタンで解決です。

まずはmysqldコマンドを使い、データディレクトリを初期化します。
ただし初期化の前にデータディレクトリ以下を全削除します。(データディレクトリが空でないと実行されないため)
(自分は/var/lib/mysqlがデータディレクトリでしたが、異なる場合は動いているmysqldプロセスのオプションを見ればわかると思います。)

サーバー実行している場合は一度停止

service mysql stop

初期化

su
cd /var/lib/mysql
rm -r ./*
mysqld --initialize-insecure --user=mysql

これで/var/lib/mysql以下が再び生成され、パスなしでrootに入れる状態になります。

--initialize-insecure を使用してデータディレクトリを初期化した場合は、パスワードなしで root としてサーバーに接続します:

service mysql start
mysql -u -root --skip-password

接続後、ALTER USER ステートメントを使用して新しい root パスワードを割り当てます:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

これでパスワードが設定されたので以降パスワードでrootに入れます。

一般ユーザーでmysql -u root -pできないんだけど!!

自分はubuntuの一般ユーザーでmysqlに入ろうとすると怒られました。

$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (13)

ソケット経由で繋げないのはわかったけど、ちゃんとソケットあるし、何が悪いんだ・・・・

perrorというコマンドでエラーコードを調べられるそうです。

$ perror 13
OS error code  13:  Permission denied
MySQL error code MY-000013: Can't get stat of '%s' (OS errno %d - %s)

どうやらエラー末尾の(13)はパーミッション周りのエラーのようです。

$ ls -l /var/run/mysqld/mysqld.sock
srwxrwxrwx 1 mysql mysql /var/run/mysqld/mysqld.sock

自分はmysqld.sockのパーミッションはokでしたが、ディレクトリが読めなくなっていました

$ ls -l /var/run/
srwx------ 1 mysql mysql /var/run/mysqld
$ chmod 755 /var/run/mysqld

無事解決。

パスワードを忘れた

無いと思いますがパスワードのみリセットする方法がここにあります。
ディレクトリの初期化方法を上に書きましたが、実はこちらでもok

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1