なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

MySQL 8.0をカジュアルに立ちあげる

この記事はMySQL Casual Advent Calendar 2017 - Qiitaの2日目のエントリとなります。

きっかけ、前提

MySQL8.0、まだRCの状態だけど、色々な機能追加の話題が盛り上がっている中でのAdvent Calendarでもあるので、MySQL 8.0新機能検証なネタを投下してくれる人も多いんじゃないかと思います。|д゚)チラッ

そこで、インストール手順自体は、何番煎じだよ、って話でもあるのですが、新機能検証記事を読んで「試してみたい!」ってときに、簡単に試せる環境ほしいよね、ってことで、このタイミングでエントリ投下することにしました。

正直なトコロ、MySQL 5.7を立ち上げる時と、ちょっとした差しかないです。


今時だとコンテナだなんだかんだあるかと思いますが、今回は頼らず、ピュアにOS立ち上げて、って手順にします。
以降、作業はVirtualBoxで、vagrantも使わずやってます。


あと、ゴリゴリやる人はソースも合わせて読むので、ソースから立ち上げるでしょうけど、カジュアルに立てたいので、yum使います。
やっぱyumらくちーん。

OS準備~mysqld起動まで

VituralBoxに(じゃなくてもいいけど)、CentOS 6.xをminimalでインストール。
執筆時点だと、最新かつ6.x系最終の6.9ですね。7.x系でもいいと思います。

AWS/EC2のAmazon Linuxも6.xと同じ操作系なので6.xを選んでいます。


CentOSのiso(CentOS-6.9-x86_64-bin-DVD1.iso)を食わせるとインストーラGUIが起動するので、その途中でネットワークは設定しておきましょう。
カジュアルに立てるには、余計な作業は省きたいです。

それ以外は、ちょっと触りたいだけならば、ほぼデフォでいいと思います。
仮想マシンへ割り当てるCPU数、メモリ、ディスク、および、OS内で設定するswap割り当てあたりはお好みで。

インストーラでの作業が終了し、OSが起動したらログインして、以降rootで作業とします。

yumで初期状態作る
yum -y update
yum -y install wget

これだけで十分です。他に必要なライブラリは、MySQLyum installするときに、依存性解決で一緒に持ってきてくれますから。

iptables

ローカルホスト上での操作しかしない場合、この作業は不要です。
でも、リモートでアクセスしたい(外からmysqlコマンドラインjdbcMySQL Workbench等でつなぎたい)場合、TCP:3306ポートが塞がれているので、カジュアルにiptablesをOffります。

chkconfig iptables off
service iptables stop

VirtualBoxじゃなくて、AWS/EC2でやる場合、セキュリティグループのInboundでTCP:3306を許可する設定を忘れないように。


VirtualBoxで作業を続ける場合、テキスト画面にコピペができないので、ここから先はWindowsならTeraterm等、コピペできるsshクライアントで接続して作業することを推奨します。

MySQLyumリポジトリ取得

MySQL 8.0をインストールしようとしているけど、リポジトリrpmファイル名は「mysql57-」です。(執筆時現在)

wget https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
yum -y localinstall mysql57-community-release-el6-11.noarch.rpm
yumリポジトリの設定ファイルを修正

デフォのままだとMySQL5.7がインストールされるので、MySQL 8.0だけが有効になるように編集します。

vi /etc/yum.repos.d/mysql-community.repo

[mysql57-community]と[mysql80-community]のブロックで、それぞれ、「enabled」のトコロの「0」「1」を変えてあげます。
(以下は編集後の状態)

[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
yumからインストール&初回起動
yum -y install mysql-community-server
service mysqld start

初回起動の時点で、初期化処理が走ります。

なお、MySQL 5.7と同様、自動起動設定(chkconfig)は、ONにされてます。

初回ログイン

MySQL 5.7と同様、rootの初期パスワードがログの中にこっそり吐かれますので、拾ってあげます。
目で全部追いかけるとツライので、grepで拾ってきます。

grep 'temporary password' /var/log/mysqld.log
mysql -u root -p
Enter password:<B>ここで、拾ってきた初期パスワードを入力</B>
rootパスワード変更

MySQL 5.7と同様、初期パスワードを変更するまでは、ログインはできても他のコマンドを受け付けてもらえません!


しかも、パスワードポリシーが有効化されているので、大小英文字、数字、記号を含むパスワードしか受け付けてくれません。
めんどくさいのはOracleさんも承知で、公開されているトレーニング資料にも書いてあります。
それに倣って、パスワード文字列は「MySQL_80」を使います。

mysql> SET PASSWORD = 'MySQL_80';
リモートでもrootで入れるように

iptablesと同様、ローカルホストのみでの作業なら不要です。
MySQL Workbench使うよね!今のバージョンのMySQL WorkbenchでもMySQL 8.0を扱えます。

mysql> create user 'root'@'%' identified by '任意のパスワード';
mysql> grant all on *.*  to 'root'@'%';

一応、ログイン試験してみてね。
パスワード入力要求の返事が来ない場合、ネットワークのドコかで塞がれてる。。。

おまけ-1:my.confの場所

MySQL 8.0に限った話ではないですが、MySQLは色んな場所でパラメータ設定できるけど、yumで構築したときは、ここだけ押さえておけば良いです。

/etc/my.cnf

初期の適用状態は、「SHOW GLOBAL VARIABLES;」投げるとか、もっとカジュアルに確認するならMySQL Workbenchの「Status and System Variables」から見るとよいです。

おまけ-2:パスワードポリシー無効化

これもMySQL 5.7からの話なのですが、パスワードポリシーは以下のコマンドで無効化できます。

mysql> uninstall plugin validate_password;

これで、ゆるゆるな文字列でパスワード設定できます。

おまけ-3:MySQL 5.7までのキャッチアップ

こちらの本が、MySQL 5.7までのキャッチアップには最適かなと思います。
電子書籍版も出てます。

やさしく学べるMySQL運用・管理入門【5.7対応】

やさしく学べるMySQL運用・管理入門【5.7対応】

MySQL 5.7から触り始める人にも優しい本。MySQL 8.0に追加される予定のネタもちょいちょい出てきます。

MySQL 5.6まではわかってる人が、MySQL 5.7で増えた機能をキャッチアップすることを主眼にした本。こちらもMySQL 8.0に入る前に読んでおくとよいです。

さいごに

以上、カジュアルにMySQL 8.0なサーバーが1台立ち上がりました。
カジュアルに立ち上げる方法が分かっていれば、カジュアルに壊すのも怖くない!

MySQLでよくわからないことがあったら、
mysql-casualのSlackに投げると、きっといいことあるよ!


なお、今年のAdvent Calendarのエントリには入れてないですが、
MySQL 5.6をカジュアルに立ちあげる」
MySQL 5.7をカジュアルに立ちあげる」
もありまぁす。