仕事ではPostgreSQLを中心に触ってますが、検証する際はバージョンごとにOSユーザを分けてインストールしています。
同一環境にPostgreSQLを複数入れるときに/usr
や/opt
配下を使ってしまうと思わぬバッティングが起きてしまうからです。
さて、MySQLを触り始めようと思ったときに手順を調べてみるとrpmからいれる手順が多いですが、これは/usr
等を使うため
複数バージョンを入れる際は具合が悪いです。ソースからのコンパイル方法も調べてみましたが、結構/usr
配下にシンボリックリンクを
貼ったりしていて、あまり思った手順が見つからなかったのでまとめておきます。
対象環境
今回は以下の環境で実施しました。
ソースのDL
MySQLのソースは以下のOracle社のサイトからダウンロードできます。
https://dev.mysql.com/downloads/mysql/
バージョンがわかってるのであればさくっとwget
する方法が楽ですね。
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17.tar.gz
依存パッケージの準備
ソースをコンパイルする前に、必要になるOSパッケージを入手しておきます。そもそもOSに何が入っているかにもよりますが
少なくともcmake
やlibncurses5-dev
が必要なようです。
$ sudo apt-get install cmake $ sudo apt-get install libncurses5-dev
関連ディレクトリの作成
MySQLのバイナリをインストールする先をHOMEディレクトリ配下に作成しておきます。
$ mkdir -p ~/mysqlHome
コンパイルの実行
コンパイルはざっくりと以下の流れになります。
最近のMySQLはコンパイル時にboostが必要らしいですが、cmake時にダウンロードしてくれる
オプション(-DDOWNLOAD_BOOST=1
, -DWITH_BOOST
)がありますのでこれを使います。
また、cmake時に-DCMAKE_INSTALL_PREFIX
でインストール先を指定します。ここをHOME配下にすれば
複数のMySQLをいれても競合せずに済みます。
$ cd <MySQLのソースの展開先>/ $ cmake -DCMAKE_INSTALL_PREFIX=/home/denzow/mysqlHome \ -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/denzow/boost -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1
無事に終わったら、あとは以下を実行すれば/home/denzow/mysqlHome
配下にMySQLのバイナリが配置されます。
$ make && make install
PostgreSQLと比べるとえらく時間がかかるのでCPUリソースに余裕があるなら-j4
をmake のオプションとして指定し
4並列でコンパイルするのもいいでしょう。
データベースの初期化
インストールが完了したので、データベースを初期化します。ついでにPATHも切っておきましょう。
$ export PATH=$HOME/mysqlHome/bin:$PATH
.bashrc
や.bash_profile
に書いとけば楽でしょう。
さてDBを初期化します。
$ mysqld --no-defaults --user=denzow --initialize
これで~/.mysqlHome/data
配下に初期化されたDB関連ファイルが配置されます。なお初期化時にMySQLの
root@localhostユーザの初期パスワードが標準出力に表示されるのでメモしておきましょう。
denzow@denzow-ubuntu:~/work/mysql/mysql-5.7.17$ mysqld --no-defaults --user=denzow --initialize : 2017-09-02T15:31:46.084978Z 1 [Note] A temporary password is generated for root@localhost: XXXXXXX <--初期パスワード
rootユーザのパスワード再設定
rootユーザのパスワードを再設定します。
- mysqldの起動
$ mysqld &
- DBへのログインとパスワード再設定
$ mysql -uroot -p mysql> alter user 'root'@'localhost' identified by 'NEW PASSWORD';
これで一通り、MySQLを使える準備ができたので色々と触っていこうと思います。