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