AWS上でMySQL5.7動作環境を最速で作る方法(Generic binaries使用)(※5.6追記あり)

 ビルドするほどに時間はかからず、rpmで入れるよりは自由度が高い(自分のローカルでの動作、複数バージョンの動作)ということで、Generic binariesを使って、とにかく最短でMySQL 5.7 の2つのバージョンを入れてみます。

f:id:sakaik:20170106162210j:plain:w350

 環境はいつもの t2.micro です。
今回からは、(デフォルトではディスク10GBだけど30GBまでは無料お試し枠に入っているということで)ディスクを30GBにしました。
10GBだと、MySQL 5.7 をダウンロード&展開(=インストール)のセット3つめで満杯になります。ちょっと窮屈。

スクリプトの作成と実行

 つべこべ言わず、以下の内容を記述したファイルを作成します。名前は inst5717 とか。
作成したら、実行権限を与えて実行します。
 次に(別窓とかで) inst5717 をコピーして inst5716 を作成し、ファイル中の MVER=17 の数字部分を 16 に変更して実行します。

 実行後は、それぞれのディレクトリに移動して、mysqlクライアントプログラムを使って接続確認&パスワードの変更をします。

#!/usr/bin/bash

MVER=17

sudo yum -y install wget libaio-devel
sudo yum -y remove mariadb-libs

cd ~
mkdir -p mysql/
cd mysql
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.${MVER}-linux-glibc2.5-x86_64.tar.gz
tar xvf mysql-5.7.${MVER}-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.7.${MVER}-linux-glibc2.5-x86_64 mysql57${MVER}
cd mysql57${MVER}

#echo ------------------------------------
#echo Please push ENTER key to continue.
#read

cat <<EOF > my.cnf
[mysqld]
log-error=/home/ec2-user/mysql/mysql57${MVER}/my.err
basedir = /home/ec2-user/mysql/mysql57${MVER}
datadir = /home/ec2-user/mysql/mysql57${MVER}/data
port=157${MVER}
socket=/tmp/mysql57${MVER}.sock
character-set-server=utf8mb4

[mysqladmin]
socket=/tmp/mysql57${MVER}.sock

[mysql]
port=157${MVER}
socket=/tmp/mysql57${MVER}.sock
default-character-set=utf8mb4
EOF


bin/mysqld --defaults-file=./my.cnf --initialize
bin/mysql_ssl_rsa_setup --defaults-file=./my.cnf

bin/mysqld_safe &

sleep 3

grep 'temporary password' my.err 
echo To connect: ./bin/mysql --defaults-file=./my.cnf -uroot -p
echo Change password: ALTER USER root@localhost IDENTIFIED BY \'mypass\';

注意点やその他情報など

  • 当然ながら、ダウンロード提供されていないバージョンのファイルはダウンロードできませんので、適宜 MVER=17 の部分は最新状態に変更してお使いください。概ね、最新から3つのマイナーバージョンのダウンロードが提供されています。
  • スクリプト実行後は、インストールしたフォルダではなく実行時のフォルダに戻ってしまうので、クライアントからの接続確認の際には自分でcdする必要があります
  • この方法で、概ね3分程度で、MySQL実行までたどり着きます。ほとんどが tar を展開している時間です。

 こちらからは以上です



#5.6や 8.0のスクリプトも欲しいね。


●2017お年始のMySQL関連日記書き殴り一覧:

追記:MySQL 5.6 用スクリプト

 まぁここまで来たら作りますよね、当然。
データベースファイル群作成の方法が異なるのと、それに伴い、Perl系のプログラムやライブラリを入れておく必要がある点が異なります。処理時間は70秒程度でした。

あとは、やっていない事と言えば

  • 5.6と 5.7、ひとつのスクリプトになったらいいなぁ
  • ファイルのwgetについて、存在しない場合は検知してちゃんとエラー出して止まるといいなぁ
  • 処理終了後に、そのまま(インストール後の)フォルダに居てくれたらいいなぁ

というあたりでしょうか。

誰かやりませんか。


MySQL 5.6.35 をインストールするスクリプト例:

#!/usr/bin/bash

MVER=35

sudo yum -y install wget libaio-devel perl perl-Data-Dumper
sudo yum -y remove mariadb-libs

cd ~
mkdir -p mysql/
cd mysql
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.${MVER}-linux-glibc2.5-x86_64.tar.gz
tar xvf mysql-5.6.${MVER}-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.${MVER}-linux-glibc2.5-x86_64 mysql56${MVER}
cd mysql56${MVER}

#echo ------------------------------------
#echo Please push ENTER key to continue.
#read

cat <<EOF > my.cnf
[mysqld]
log-error=/home/ec2-user/mysql/mysql56${MVER}/my.err
basedir = /home/ec2-user/mysql/mysql56${MVER}
datadir = /home/ec2-user/mysql/mysql56${MVER}/data
port=156${MVER}
socket=/tmp/mysql56${MVER}.sock
character-set-server=utf8mb4

[mysqladmin]
socket=/tmp/mysql56${MVER}.sock

[mysql]
port=156${MVER}
socket=/tmp/mysql56${MVER}.sock
default-character-set=utf8mb4
EOF


scripts/mysql_install_db --datadir=./data

bin/mysqld_safe &

sleep 3

echo To connect: ./bin/mysql --defaults-file=./my.cnf -uroot