UNIXOracle SolarisDBサーバー MySQL

MySQL インストール Solaris編

更新日:2017年9月27日

MySQL Community Server とは

MySQLは非商用利用にて無償で利用できること、データベースサーバーの中でも高速に動作する性能や24時間365日ノンストップで運用できる安定性と、管理、バックアップ、リカバリーなどが簡単なことから世界で最も使用されているデータベースです。
特にサーバーサイドプログラミング言語PHPとの親和性が良く、WordPresなどのCMSアプリケーションのバックエンド処理はたいていMySQLが使用されています。
高機能な商用データベースの代表であるOracle データベースと同様にデータベース共通言語であるSQL文で動作させることが出来き、トランザクション管理も可能で信頼性が高いことに加えて、phpMyAdminなどデータベース初心者でも扱うことができる手軽さが最大の特徴です。

前準備

MySQLダウンロード

MySQLのダウンロードファイル選択ページ(https://dev.mysql.com/downloads/mysql/)にアクセスしましょう。

Select Operating SystemとSelect OS Versionのプルダウンメニューを変更してダウンロードしましょう。
ダウンロードするファイルは、次章「インストール」に記載しているインストールの方法によって異なります。
ソースコードからインストールする場合は、Select Operating Systemを「Source Code」に、Select OS Versionを「Generic Linux(Architecture Independent)」に、パッケージインストールする場合は、Select Operating Systemを「Oracle Solaris」に、Select OS Versionを「Oracle Solaris バージョン番号(SPARC/x86, 64bit)」を選択して「ダウンロード」をクリックしましょう。

ダウンロード選択ページ画面

MySQLのダウンロードファイル選択ページ(https://dev.mysql.com/downloads/mysql/)にアクセスしましょう。

MySQL Community Server 5.7.19(2017年9月27日時点)はSolaris 11にしか対応していないため、Solaris 10にMySQLパッケージ版をインストールする場合は、画面右上の「MySQL Community Server 5.6 »」をクリックして表示される「MySQL Community Server 5.6.37」のページからダウンロードしましょう。
ダウンロード方法は、最新版と同じです。

ダウンロード選択ページ画面

MySQLのダウンロードページではMySQLの技術情報やディスカッションフォーラムへ参加できるアカウント登録出来ます。とりあえずダウンロードだけするのであれば、画面下の「No thanks, just start my download.」をクリックしてダウンロードを開始しましょう。

ダウンロード画面

MySQLユーザー作成

MySQLデータベースを起動・終了させるユーザーを作成しましょう。例として、以下の条件で作成しています。

MySQLユーザーmysql
MySQLグループmysql

MySQLグループとユーザーを作成しましょう。

root@earth% groupadd -g 1001 mysql
root@earth% useradd -g 1001 -u 1001 -s /bin/csh -m -d /export/home/mysql mysql

旧MySQLデータベース削除

MySQL バージョン5.1系がすでにインストールされている場合は、新しくインストールすると起動できなくなるため、削除しておく必要があります。

root@earth% mv /var/lib/mysql /var/lib/mysqlold

MySQLインストール

MySQLのインストールは2つの方法があります、1つめはソースコードからインストールする方法、2つめはあらかじめコンパイルされたアプリケーションパッケージからインストールする方法です。
ソースコードからインストールする場合は、インストールするサーバー専用でネイティブかつクリーンなインストールが出来ます。また、インストール先を変更したり、日本語キャラクタセットのデフォルトを変更出来たりしましょう。
反面、インストールに時間がかかることや、依存する他のパッケージも一緒にインストールする必要があるなど少し敷居が高くなっています。
パッケージインストールは、ほぼ時間がかかりません。2コマンドを実行するだけでインストール出来てしまいます。ただ、何もしないと/optディレクトリに全部集められますので、/optにあらかじめ多くの容量を確保しておく必要があります。

MySQLバージョン5.7からは安全面に考慮してか初期化するコマンドがscripts/mysql_install_dbからbin/mysqldに変更されています。
この変更に伴い、データベースにログインする際は最初にMySQL管理者rootのパスワードを入力する必要があります。

MySQLをソースコードからインストール

MySQLをプログラムソースからインストールするにはCMakeが必要なので、あらかじめインストールしておきます。
Solaris用のフリーパッケージがhttps://www.opencsw.org/packages/CSWcmake/からダウンロードできます。

root@earth% pkgadd -d http://get.opencsw.org/now
root@earth% /opt/csw/bin/pkgutil -U
root@earth% /opt/csw/bin/pkgutil -y -i cmake
root@earth% /opt/csw/bin/pkgutil -y -i boost_gcc_dev

MySQLのソースディレクトリでファイルを解凍し、インストールしましょう。
CMake時にboost_1_59_0.tar.gzが必要で、-DDOWNLOAD_BOOST=1オプションを付けると自動的に取得してくれるはずですが、タイムアウトが多いのでsourceforgeのダウンロードページhttps://sourceforge.net/projects/boost/files/boost/1.59.0/などで事前に取得しておくとスムーズにコンパイルできます。

root@earth% tar xzf mysql-5.7.19.tar.gz
root@earth% cd mysql-5.7.19
root@earth% cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
? -DDEFAULT_CHARSET=utf8 \
? -DDEFAULT_COLLATION=utf8_general_ci \
? -DDOWNLOAD_BOOST=1 \
? -DWITH_BOOST=/tmp/boost

...
root@earth% make
...
[100%] Built target my_safe_process
root@earth% make install

MySQLの起動ユーザーを設定しましょう。

root@earth% cd /usr/local/mysql
root@earth% chown -R mysql:mysql .

データベースを初期化しましょう。
初期化中にMySQL管理者rootの仮パスワードが表示されます。

root@earth% ./bin/mysqld --no-defaults \
--user=mysql \
--basedir=/usr/local/mysql/ \
--datadir=/usr/local/mysql/data/ \
--log-error-verbosity=3 \
--initialize

2017-09-27T06:30:59.948828Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-09-27T06:30:59.948978Z 0 [Note] Ignoring --secure-file-priv value as server is running with --initialize(-insecure) or --bootstrap.
2017-09-27T06:30:59.949048Z 0 [Note] ./bin/mysqld (mysqld 5.7.19) starting as process 29666 ...
2017-09-27T06:30:59.951040Z 0 [Note] Creating the data directory /usr/local/mysql/data/
...
2017-09-27T06:31:01.025732Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2017-09-27T06:31:01.039939Z 1 [Note] Creating the system database
2017-09-27T06:31:01.040198Z 1 [Note] A temporary password is generated for root@localhost: foqrsZS_u0sx
2017-09-27T06:31:01.041684Z 1 [Note] Creating the system tables
2017-09-27T06:31:03.917869Z 1 [Note] Filling in the system tables, part 1
2017-09-27T06:31:04.013490Z 1 [Note] Filling in the system tables, part 2
...

Solaris用のMySQLバージョン5.7パッケージをインストール

パッケージインストールを実行するとインストールと初期化が同時に行われます。
パッケージ追加途中で/opt/mysqlディレクトリを作成することの確認、インストールを初めて良いかどうかを尋ねられますので、どちらも「y」を入力し、「エンターキー」を押してください。
また、初期化が終わった最後にMySQL管理者rootの仮パスワードが表示されます。

root@earth% gunzip mysql-5.7.19-solaris11-x86_64.pkg.gz
root@earth% pkgadd -d mysql-5.7.19-solaris11-x86_64.pkg
...
The selected base directory </opt/mysql> must exist before
installation is attempted.

Do you want this directory created now [y,n,?,q] y
...
This package contains scripts which will be executed with super-user
permission during the process of installing this package.

Do you want to continue with the installation of [y,n,?] y
Installing MySQL Community Server (GPL) as

## Installing part 1 of 1.
/opt/mysql/mysql/COPYING
/opt/mysql/mysql/README
/opt/mysql/mysql/bin/innochecksum
/opt/mysql/mysql/bin/lz4_decompress
/opt/mysql/mysql/bin/my_print_defaults
/opt/mysql/mysql/bin/myisam_ftdump
...
/opt/mysql/mysql/support-files/mysql.server
/opt/mysql/mysql/support-files/mysql.server.in
/opt/mysql/mysql/support-files/mysqld_multi.server
/opt/mysql/mysql/support-files/solaris/postinstall-solaris
[ verifying class ]
## Executing postinstall script.
2017-09-28T11:06:09.453613Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-09-28T11:06:13.337706Z 0 [Warning] InnoDB: New log files created, LSN=45790
2017-09-28T11:06:13.649019Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-09-28T11:06:13.713088Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 0aac8ed6-a43d-11e7-b7a5-8672a7efbbd7.
2017-09-28T11:06:13.714388Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2017-09-28T11:06:13.715860Z 1 [Note] A temporary password is generated for root@localhost: /h4pSyr/akj0
Installation of was successful.

MySQL起動・データベース作成

データベースサーバー起動

MySQLを起動するためのスクリプトがインストールされた場所は、ソースコードからインストールした場合のデフォルトは「/usr/local/mysql/support-files/」に、パッケージインストールした場合のデフォルトは「/opt/mysql/mysql/support-files/」です。
コマンド入力後、SUCCESS!が表示されれば起動成功です。

root@earth% cd 起動スクリプトの場所
root@earth% ./mysql.server start
Starting MySQL
.Logging to '.../earth.err'.
. SUCCESS!

サーバー起動時に自動的に起動できるように先ほどの起動スクリプトmysql.serverをコピーしましょう。

root@earth% cp ./mysql.server /etc/init.d/mysql
root@earth% ln -s /etc/init.d/mysql /etc/rc2.d/K01mysql
root@earth% ln -s /etc/init.d/mysql /etc/rc3.d/S99mysql
root@earth% ln -s /etc/init.d/mysql /etc/rc0.d/K01mysql

データベースログイン初期時

最初にデータベースへログインする時に、管理ユーザーのパスワードを変更する必要があります。

root@earth% mysql -u root -p
Enter password: 初期化の際に表示された仮パスワード
MySQL> set password for root@localhost=password('新しいパスワード');

データベース作成

データベースを作成しましょう。

root@earth% mysql -u root -p
mysql> CREATE DATABASE データベース名 CHARACTER SET utf8;
mysql> ALTER DATABASE データベース名 DEFAULT CHARACTER SET=utf8;

新しくMySQLユーザーを作成し、データベースへの権限を付与する例です。
例ではテーブル作成・削除・ 表や順序を変更する権限を与えています。

root@earth% mysql -u root -p
mysql> GRANT ALL PRIVILEGES ON データベース名.* TO ユーザー名@localhost IDENTIFIED BY 'ユーザーのパスワード';
mysql> FLUSH PRIVILEGES;
mysql> GRANT CREATE ON データベース名.* TO ユーザー名@localhost;
mysql> GRANT DROP ON データベース名.* TO ユーザー名@localhost;
mysql> GRANT ALTER ON データベース名.* TO ユーザー名@localhost;

ここまででインストールからデータベース作成までの流れを説明しました、データベースを運用して行くにはSQL文などの理解が必要ですので、またの機会に記載したいと思います。

困ったときは

MySQLをソースコードのコンパイルや起動で失敗した場合

必要なライブラリが入っているかどうかを確認しましょう。また、実行ディレクトリのパスや、ライブラリパス(LD_LIBRARY_PATH)が通っているかも同様に確認しましょう。特にSolaris 11だとOracle Studioバージョン12.4が入っていないと起動できません。
スタックオーバーフローでは、libstdc++.so.6にパスが通っていなかったり、libCrunG3.so.1が無いため起動がストップしてしまう事象が多く見られます。
Oracle Studioのインストール方法についてはサイト内「Oracle Solaris 11 インストール、環境整備」を確認しましょう。

データベース初期化に失敗した場合

インストールしたmysqlディレクトリを削除しましょう、少々強引ですがmysqldに--initializeオプションを付けた初期化の場合、すでにデータディレクトリが存在するとストップします。
ソースコードインストールの場合は/usr/local/mysql/data/をパッケージインストールの場合は/var/lib/mysqlを削除しましょう。

データベース管理者パスワードを忘れた場合

データベースを一旦終了させてmysqld_safeをパスワードを入力しなくてもログインできるように起動しましょう。
管理者(root)でパスワードを入力せずにログイン後、管理者自身のパスワードを書き換えます。

root@earth% /etc/init.d/mysql stop
root@earth% MySQL実行ファイルディレクトリ/bin/mysqld_safe --skip-grant-tables
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('新規パスワード') WHERE user = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;