大企業営業から未経験ITエンジニアを目指すブログ

アラサー大企業営業から未経験ITエンジニアを目指すブログ。日々学んだことを忘備録的に記します。

Windows10にVagrantとVirtualBoxでCentOSの仮想環境を構築⑤MySQLのインストール

CentOSに標準でインストールされているDBはMariaDBというらしいが、私はMySQLを使いたい!

参考URL:https://weblabo.oscasierra.net/installing-mysql57-centos7-yum/

     https://qiita.com/nooboolean/items/7efc5c35b2e95637d8c1

 

①mariaのインストール確認 ※mariaが入っているとMySQLインストールできない(?)

yum list maria*

→Installed Packagesにたくさん出てくる。

 

mariaDB ライブラリとデータフォルダを削除

yum remove mariadb-libs  →その後yum list installed | grep mariadb-libsで無ければOK

sudo rm -r /var/lib/mysql/ →そんなファイルはありません。lsで見ても無いのでOK

 

③公式が用意しているrpmファイルをインストール

③-1. 公式のCommunity Edition→MySQL Yum Repository→Red Hatの該当バージョンのダウンロードボタン→下の「No thanks just download」のURLをコピー

③-2. インストール

sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

 

リポジトリに反映されているかを確認

yum info mysql-community-server

 

⑤インストール

yum install -y mysql-community-server

 

⑥インストールの確認

mysqld --version

 

⑦起動確認

sudo systemctl start mysqld

sudo systemctl status mysqld →runningならOK

sudo systemctl stop mysqld

 

<初期設定へ>

⑧パスワードの設定

⑧-1. 初期パスワードの確認

cat /var/log/mysqld.log | grep root

⑧-2. 上記パスワードでログイン

mysql -u root -p

ログインできたけどパスワード変更ができない。ログアウトして止める。

 

対策

https://qiita.com/StaticProgramer/items/fad0018ab23b9b1ba3ff

https://dev.mysql.com/doc/refman/8.0/en/resetting-permissions.html

・サーバのプロセスIDを含む.pidファイルを見つける。

だいたい下記のどこかにあるはず。

/var/lib/mysql/, /var/run/mysqld/, and /usr/local/mysql/data/、/var/run/mysqld/はあったけど中には何もないことが分かった。

linuxのrootユーザがmysqldを起動するのはセキュリティ上良くないから、通常はmysqlユーザがmysqldを起動する。

しかし、MySQLドキュメントの通りMySQLサーバを起動する際、Linuxのrootユーザならば、下記オプションをつけて起動すると失敗。

systemctl start mysqld --user=mysql
systemctl: option '--user' doesn't allow an argument

今のユーザはvagrantだった!←whoで確認可能。

https://oshiete.goo.ne.jp/qa/8812503.html

 

普通にインストールとかしていれば、mysqldの起動は自動でmysqlユーザがやっているらしい。

sudo つけずにsystemctl start mysqldやると↓になった。

Authentication is required to manage system services or units.
Authenticating as: root

・sudo systemctl start mysqld をやって  ps -u mysql をやってみる

mysqlがmysqldをやっていたので、sudo systemctl start mysqld で問題なし。

 

⑧-3. 公式のやり方通り、--skip-grant-tables オプションをつけてmysqlを起動する

・sudo vi /etc/my.cnf

・[mysqld]ブロック末尾に↓を追記。

 skip-grant-tables

 参考:https://qiita.com/metheglin/items/4a1101bd24bf73a0ec6d

・sudo systemctl start mysqld

⑧-4. ログインしてパスワード変更

mysql

FLUSH PRIVILEGES;

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

⑧-5. ログアウト、停止して、⑧-3の追記分を削除。

 

文字コードの確認と変更

⑨-1. 再度起動、ログイン

mysql -u root -p

→パスワードを聞かれたら入力

⑨-2. show variables like "chara%";

全部utf8になってればOK。

(ほとんどutf8mb4だけど多分大丈夫??)

 

※systemctl enable mysqldでCentOS起動に合わせた自動起動の設定も可能

 

DBインストール完了!!

 

と思ったら、ログインできなくなってしまった。

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

下記を参考にいろいろやる。

https://teratail.com/questions/53026

systemctl stop mysqld

systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

systemctl start mysqld

mysql -u root

でもupdateできなくてあきらめる。

がちゃがちゃやってたら、再起動してもmysql -u rootだけで入れるようになった?

のでとりあえずok