【MySQL】 MySQL 5.7 のインストール ~ CentOS 編 ~

■ インストール/初期設定

 * MySQL 8.0 については、以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/37626919.html

インストール

sudo yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

# MySQLのインストール
sudo yum install -y  mysql mysql-devel mysql-server

# バージョン確認 
mysql --version

# 一旦、MySQLの起動し、エラーが発生しないことを確認し、停止する
sudo systemctl start mysqld
sudo systemctl stop mysqld

初期設定(MySQLの修正)

# 修正前のファイルをバックアップとして、とっておく
sudo cp -p /etc/my.cnf /etc/my.cnf.orig

# viなどでファイルを修正する
sudo vi /etc/my.cnf
~~~
[mysqld]
・・・
# 追加
character-set-server=utf8
# 【任意設定】MySQL5.7 からユーザーのパスワードの有効期限がデフォルトで360日(無期限にする)
default_password_lifetime=0
# 【任意設定】弱いパスワードを設定できるようにする
validate_password=0
・・・
~~~

# 意図した修正かどうかを最後に差分をとって確認する
sudo diff /etc/my.cnf /etc/my.cnf.orig

MySQL自動起動

sudo systemctl enable mysqld

# enabledで表示されたら自動起動が有効になっている
sudo systemctl is-enabled mysqld

MySQLの起動

# MySQLの起動
sudo systemctl start mysqld

# MySQLの再起動
sudo systemctl restart mysqld

# MySQLの停止
sudo systemctl stop mysqld

■ rootの設定

[前提条件] MySQLを起動させておく(sudo systemctl start mysqld)
# [1] /var/log/mysqld.log で、検索キーワード「temporary password」などで
#     仮パスワード(以下の「****」部分)をメモるかコピーしておく
sudo less /var/log/mysqld.log
/temporary password

2016-08-07T14:27:06.815348Z 1 [Note] A temporary password is generated for root@localhost: ****
# q で終了

# [2] 初期設定を行う
mysql -u root -p
# パスワードは[1]を入れる。

# 新しいパスワードを変更する
# 「validate_password=0」を行っていない場合は
# 条件として「8文字以上、数字・大文字・記号を一文字づつ入れる」ようなパスワードを入力する
# 例「Passwd1#」など
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Passwd1#';
GRANT ALL ON  *.* TO 'root'@'%' IDENTIFIED BY 'Passwd1#' WITH GRANT OPTION;

FLUSH PRIVILEGES;

SELECT Host, User FROM mysql.user;

exit

【補足】パスワードの設定をゆるくするには...

SET GLOBAL validate_password_policy=LOW;

参考文献

http://weblabo.oscasierra.net/mysql-57-init-setup/
http://gihyo.jp/dev/serial/01/mysql-road-construction-news/0010
より抜粋

■rootアカウントの仮パスワード
MySQL 5.6までは旧rpm版でのみ仮パスワードが生成され
"/root/.mysql_secret"ファイルに出力されていましたが,
MySQL 5.7ではデフォルトで仮パスワードが生成されるようになっています。
また、出力先も"/var/log/mysqld.log"(MySQLのエラーログファイル)に変更になっています。

【任意設定】外部からアクセスするためにファイアウォールをあける

# ファイアウォールが有効か?(「active (running)」なら以下を実行)
systemctl status firewalld

sudo firewall-cmd --add-service=mysql --zone=public --permanent

sudo firewall-cmd --reload

■ アンインストール

# サービスを止める
systemctl stop mysqld.service

# アンインストール
sudo yum -y remove mysql-libs mysql-server mysqlclient15 mysql-devel perl-DBD-mysql mysql mysql-community-common mysql57-community-release
# 又は sudo yum -y remove mysql* でもよさそう
sudo rm -rf /var/lib/mysql
sudo rm /var/log/mysqld.log

# 最後に削除されているか確認
rpm -qa | grep -i mysql

参考文献

http://qiita.com/rojiuratech/items/80dda65d832b407322f1

■ おかしいなっと思ったら...

[1] MySQLのログ「/var/log/mysqld.log」を参照し、検索「error」等で
    おかしい箇所がないか探ってみるのも手かと...

sudo less /var/log/mysqld.log
~~~~
2017-02-07T13:58:05.108524Z 0 [ERROR] Can't start server: Bind on TCP/IP port: Address already in use
2017-02-07T13:58:05.108527Z 0 [ERROR] Do you already have another mysqld server running on port: 3306 ?
2017-02-07T13:58:05.108534Z 0 [ERROR] Aborting

# ポート「3306」が使われてるって怒られた
~~~~

[2] そもそもMySQLが起動したか調べる

ps ax | grep mysqld