Database JUNKY

MySQL,MariaDBを中心としたブログです

10分でMySQL8.0をamazon linuxにyumでインストールする!!

amazon linuxにMySQL8.0をインストール!

知ってはいたけど、なかなか触る機会がなく、かつ、インストールを試したことすらしていなかったので、今回、インストールの手順をメモしました。 MySQL8.0は、2018/4/19 にリリースされ、以下の機能が更新、もしくは新機能として実装されました。

MySQL :: MySQL 8.0: MySQL 5.7よりも最大2倍高速

私個人として。地味なところではありますが、降順(Descending)インデックスの対応や、Window関数などが何気にうれしいです。

細かい部分はあとで検証するとして、今回は、amazon linuxにこの、MySQL 8.0をインストールしたメモを書いていこうと思います。

amazon linux2 にMySQL8をインストールする場合は、こちらをご覧ください!

hit.hateblo.jp

f:id:hit10231023:20180309104332j:plain

それでは、早速 amazon linuxから MySQL8をインストールしてみます。 今回検証したamazon linuxインスタンスは、全くのプレーンな環境なので、すでにMySQLの過去バージョンをインストールしているかたは、一旦アンインストールしたほうがいいと思いいます。あ、データベースが残っているかたは、一旦ディレクトリごとバックアップをしておくことをお勧めします

リポジトリをインストール

$ sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm

yumリポジトリの確認

[mysql80-community]がenabledが1になっていることを確認(それ以外は、0でいいんじゃないかな?)

$sudo vi /etc/yum.repos.d/mysql-community.repo
-----------------
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

インストール

$ sudo yum install mysql-community-server* mysql-community-devel*


========================================================================================================================
 Package                             アーキテクチャー    バージョン                リポジトリー                    容量
========================================================================================================================
インストール中:
 mysql-community-server              x86_64              8.0.11-1.el6              mysql80-community              378 M
依存性関連でのインストールをします:
 mysql-community-client              x86_64              8.0.11-1.el6              mysql80-community               28 M
 mysql-community-common              x86_64              8.0.11-1.el6              mysql80-community              656 k
 mysql-community-libs                x86_64              8.0.11-1.el6              mysql80-community              2.5 M

$ sudo yum install mysql-community-devel



========================================================================================================================
 Package                            アーキテクチャー    バージョン                 リポジトリー                    容量
========================================================================================================================
インストール中:
 mysql-community-devel              x86_64              8.0.11-1.el6               mysql80-community              4.2 M

トランザクションの要約
========================================================================================================================

起動

サービス起動

$ sudo /etc/init.d/mysqld start
MySQL データベースを初期化中:                              [  OK  ]
mysqld を起動中:                                           [  OK  ]

起動後設定

パスワードの確認および変更

cat /var/log/mysqld.log | grep 'temporary password'
-----
2018-05-16T12:25:41.335860Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: fdcEh-_Eo6ng

上記のパスワードでログイン

$ mysql -uroot -pfdcEh-_Eo6ng

パスワードの変更

簡単なパスワードは弾かれるので、ログイン後にこんな感じでパスワードを変更しておく

mysql> set password = '@a@1@2@3@4@55azA@' ;

再度ログイン

パスワードの設定が完了したら、再度、設定したパスワードでログインします

$ mysql -uroot -p@a@1@2@3@4@55azA@

パスワードポリシーの変更

(個人的に)厳しいパスワード基準を緩くします、ちょっと極端にいけないパスワードですが、パスワードにpasswordを設定してみました。validate_password.policyをLOWに設定することで、複雑なパスワードを設定する必要がなくなります。

mysql> 
SHOW GLOBAL VARIABLES LIKE '%validate_password%' ;
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

mysql>
SET GLOBAL validate_password.policy=LOW ;
SET password='password' ;
Query OK, 0 rows affected (0.01 sec)

でここからが意見分かれるのですが。。。

このvalidate_password.policyってのが私だいっきらいで、例えば、MySQLインスタンス初期化したりすると、次回pluginがないとか、もうわけがわからなくなることが多いので、アンインストールしちゃう派なんですね(笑)なので、一旦自分は消しちゃいます。。。で消した後に、私はmy.cnfを設定します。

component_validate_passwordのアンインストール

いつの間にかプラグインじゃなくなっているし。。。

mysql>
UNINSTALL COMPONENT 'file://component_validate_password';

ここで一旦MySQLを停止

$ sudo /etc/init.d/mysqld stop

my.cnfを設定する

hit.hateblo.jp

インスタンス初期化&再作成

ちなみに私がここで、初期化しているのは、my.cnf中の、lower_case_table_names = 1が、初回設定でしか反映できないからです。(後から変更することはできない)

$ sudo -i
# cd /var/lib/mysql
# rm -rf  /var/lib/mysql/*
# mysqld --initialize
# chown -Rf mysql:mysql /var/lib/mysql
# /etc/init.d/mysqld start

でここから再度アカウントの設定しなおし

アカウントを設定しなおすという手間が自分の手法の場合でてしまうのですが、今回は、忌まわしき、validate_passwordが入っていないので楽っす

# cat /var/log/mysqld.log | grep 'temporary password'
2018-05-17T10:52:46.288146Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: V0>qC?Tg2/(l
2018-05-17T11:19:16.827959Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: eWayfJ0#5b-D
------------------------------
mysql -uroot -p パスワードは、eWayfJ0#5b-Dのほうですね。

mysql>
SET password='password' ;

接続/設定チェック

# exit 
$ mysql -uroot -ppassword 

mysql>
SHOW GLOBAL VARIABLES LIKE  '%validate_password%' ;
--------------------------------------------------
Empty set (0.00 sec)  <---- validate_passwordが入っていない

mysql>
SHOW GLOBAL VARIABLES LIKE 'lower_case_table_names';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_table_names | 1     |
+------------------------+-------+
-- lower_case_table_namesが有効になっている(つまり、my.cnfの設定が反映された)

てな具合になります

一方、いやいや!!アンインストールしないで、my.cnfに設定しちゃうよってかたは。。

次回起動時のため、my.cnfにパスワードポリシーを設定しておくのが良いです

mysqlを再起動すると。validate_password.policyがMEDIUMに戻ってしまうので、my.cnfに設定しておきましょう

  • こんな設定にします
$ sudo vi /etc/my.cnf

[mysqld]
validate_password.length=8
validate_password.mixed_case_count=0
validate_password.number_count=0
validate_password.special_char_count=0
validate_password.policy=LOW

念のため、再起動

$ sudo /etc/init.d/mysqld restart