MySQL

(最終更新日時:2010-03-09 23:47:21)
オープンソースのリレーショナルデータベース管理システム(RDBMS) MySQL Community Server を Xen による仮想サーバー上にソースからコンパイルしてインストールします。
仮想サーバーの構築は、Xen による仮想サーバーの構築 を参照してください。

ダウンロード

MySQL Developer Zone ダウンロードサイト(http://dev.mysql.com/downloads/)から次のファイルをダウンロードします。
MySQL Community Server 5.1.44 Source Code
Generic Linux, Compressed TAR archive
mysql-5.1.44.tar.gz
(※)下線部は 2010/02/19 現在の最新リリース番号です。

当サイトでは、Domain0 に MySQL クライアントのインストールを行うことを考慮し、MySQL 仮想サーバーの NFS 共有ディレクトリにダウンロードしています。
$ # Domain0 から MySQL マシンにログインします
$ ssh user1@actmysql.server.localnet
Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ

$ # MySQL Developer Zone ダウンロードサイトからダウンロードします
$ cd /home/exports
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.44.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/

$ exit                                                        # MySQL マシンからログアウトします

仮想サーバーへのインストール準備

当サイトの MySQL サーバーは、Xen による仮想サーバー上で稼動していますが、仮想サーバー構築時 には最小限のパッケージしかインストールしていません。

そこで、まず MySQL サーバーをソースからコンパイル、およびインストールする際に必要なパッケージをインストールします。
$ # Domain0 から MySQL マシンにログインします
$ ssh user1@actmysql.server.localnet
Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ

$ su -
パスワード:root ログインパスワード

# yum -y install gcc                                          # C コンパイラー gcc のインストール
# yum -y install gcc-c++                                      # C++ コンパイラー gcc-c++ のインストール
# yum -y install ncurses-devel                                # 端末仕様ライブラリ開発ツール ncurses-devel のインストール
# yum -y install make                                         # プログラムビルドツール make のインストール
# exit

$ exit                                                        # MySQL マシンからログアウトします
Connection to actmysql.server.localnet closed.

インストール

MySQL マシンにログインして、MySQL の実行用グループとユーザーを作成します。
(※ディレクトリ /var/mysql は、LVM ボリュームとしてインストール時にマウント指定しています)
$ # Domain0 から MySQL マシンにログインします
$ ssh user1@actmysql.server.localnet
Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ

$ su -
パスワード:root ログインパスワード

# groupadd -g 27 mysql
# useradd  -u 27 mysql -M -g mysql -s /sbin/nologin -d /var/mysql/data
# mkdir /var/mysql/data
# chown mysql.mysql /var/mysql/data
# chmod 750 /var/mysql/data

# # /usr/local/src ディレクトリのアクセス権限を変更しておきます
# chgrp users /usr/local/src
# chmod 775   /usr/local/src

# exit

/usr/local/src ディレクトリでアーカイブを展開し、コンパイルおよびインストールを行います。
$ cd /usr/local/src
$ tar zxvf /home/exports/mysql-5.1.44.tar.gz
$ cd mysql-5.1.44
$ ./configure \
>   --localstatedir=/var/mysql/data \                         # データベースの格納先を指定します
>   --enable-thread-safe-client \                             # スレッドセーフなクライアントライブラリを作成します
>   --with-low-memory \                                       # コンパイル時のメモリ/スワップスペース不足対策です
>   --with-charset=utf8 \                                     # デフォルトの文字セットに UTF-8 を指定します
>   --with-extra-charsets=all \                               # すべての文字セットを使用可能にします
>   --with-ssl \                                              # SSL 接続を有効にします
>   --with-mysqld-user=mysql                                  # 起動ユーザーを mysql にします
$ make

$ sudo make install
パスワード:自身のログインパスワード

$ exit                                                        # MySQL マシンからログアウトします
Connection to actmysql.server.localnet closed.

設定

MySQL マシンにログインして、各定義ファイルの設定を行い、MySQL サーバーを起動します。
$ # Domain0 から MySQL マシンにログインします
$ ssh user1@actmysql.server.localnet
Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ

$ su -
パスワード:root ログインパスワード

# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# vi /etc/my.cnf

     :
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set=utf8                                    # mysql コマンドの文字セットを UTF-8 にしています
prompt=[\d]> \                                                # プロンプトに操作中のデータベース名を表示するようにしています

[myisamchk]
     :


データベースを初期化します。
# cd /var/mysql/data
# su mysql -s /bin/bash
$ /usr/local/bin/mysql_install_db --user=mysql
$ exit

自動起動設定を行い、MySQL サーバーを起動します。
# cp /usr/local/share/mysql/mysql.server /etc/rc.d/init.d/mysql
# chkconfig mysql on

# service mysql start

# exit

ユーザー設定を行います。
$ mysqladmin -u root password "パスワード"                    # MySQL ユーザー root のパスワードを設定します
$ mysql -u root -p
Enter password: 設定した MySQL ユーザー root のパスワード
       :
[(none)]> USE mysql;                                          -- 操作対象を MySQL の管理データベースにします
Database changed

-- パスワードのない初期ユーザを削除します
[mysql]> DELETE FROM user WHERE password = '';
[mysql]> FLUSH PRIVILEGES;

[mysql]> quit
Bye

$ exit                                                        # MySQL マシンからログアウトします
Connection to actmysql.server.localnet closed.

MySQL クライアントのインストール

Domain0 から MySQL サーバーへリモートでアクセスするため、Domain0 に MySQL クライアントをインストールします。
MySQL マシンの共有ディレクトリに MySQL ソースファイルが存在します。
$ # Domain0 で MySQL マシンの共有ディレクトリをマウントします
$ sudo mkdir -p /mnt/mysql
パスワード:自身のログインパスワード

$ sudo mount -t nfs actmysql.server.localnet:/home/exports /mnt/mysql

$ # MySQL クライアントのインストールを行います
$ cd /usr/local/src
$ tar zxvf /mnt/mysql/mysql-5.1.44.tar.gz
$ cd mysql-5.1.44
$ ./configure \
>   --without-server \                                        # クライアントのみインストールします
>   --enable-thread-safe-client \                             # スレッドセーフなクライアントライブラリを作成します
>   --with-low-memory \                                       # コンパイル時のメモリ/スワップスペース不足対策です
>   --with-charset=utf8 \                                     # デフォルトの文字セットに UTF-8 を指定します
>   --with-extra-charsets=all \                               # すべての文字セットを使用可能にします
>   --with-ssl                                                # SSL 接続を有効にします
$ make

$ sudo make install
パスワード:自身のログインパスワード

$ # 共有ライブラリに mysql ライブラリのリンクを登録します
$ sudo vi /etc/ld.so.conf.d/mysql.conf
パスワード:自身のログインパスワード

/usr/local/lib/mysql

$ sudo /sbin/ldconfig

データベースの操作

MySQL マシンにログインして、新規にユーザーデータベースを作成し、アクセス権限を設定します。
$ # Domain0 から MySQL マシンにログインします
$ ssh user1@actmysql.server.localnet
Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ

$ mysql -u root -p
Enter password: MySQL ユーザー root のパスワード
       :
-- 例として、ユーザーデータベース testdb を作成します
[(none)]> CREATE DATABASE testdb;
Query OK, 1 row affected (0.00 sec)

-- さらに、testdb を管理するユーザーとして testuser を作成します
[(none)]> GRANT ALL ON testdb.*
    -> TO testuser@localhost
    -> IDENTIFIED BY 'testuser@localhost に設定するパスワード';
Query OK, 0 rows affected (0.00 sec)

-- リモートでデータベースを操作する場合は、リモートクライアント毎に管理ユーザーやアクセスユーザーを登録する必要があります
-- リモートクライアントの指定は以下の方法で行います
--   ホスト名       : (例) gateway.server.localnet
--   IP アドレス    : (例) 192.168.201.11
--                         192.168.201.0/255.255.255.0
--                  ただし 192.168.201.0/255.255.255.240 は NG
--                  マスク可能なアドレス長は 8, 16, 24, 32 bit のみになります
--   ワイルドカード : (例) "%.server.localnet"
--                         "192.168.201.%"
--                  ワイルドカード文字等の記号文字を使用する場合は、引用符でくくります
-- 以下は、ホスト名 gateway.server.localnet で指定しています
[(none)]> GRANT ALL ON testdb.*
    -> TO testuser@gateway.server.localnet
    -> IDENTIFIED BY 'testuser@gateway.server.localnet に設定するパスワード';
Query OK, 0 rows affected (0.00 sec)

[(none)]> quit
Bye

$ exit                                                        # MySQL マシンからログアウトします
Connection to actmysql.server.localnet closed.

作成したユーザーデータベースを Domain0 から操作します。
$ mysql -h actmysql.server.localnet -u testuser -p testdb
Enter password: MySQL testuser のパスワード
       :
[testdb]> ... SQL etc. ...
       :
[testdb]> quit

データベースのバックアップを行います。
$ # Domain0 から MySQL マシンにログインします
$ # MySQL マシンにログインせず、Domain0 から -h ホスト名 オプションを指定して操作することもできます。
$ ssh user1@actmysql.server.localnet
Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ

$ # 全データベースを backup.sql にフルバックアップします
$ mysqldump -A -Q --flush-privileges -u root -p > backup.sql
Enter password: MySQL ユーザー root のパスワード

$ # データベース testdbbackup_testdb.sql にバックアップします
$ mysqldump -B -Q --add-drop-database -u root -p testdb > backup_testdb.sql
Enter password: MySQL ユーザー root のパスワード

$ exit                                                        # MySQL マシンからログアウトします
Connection to actmysql.server.localnet closed.

バックアップファイルからデータベースを復元(リストア)します。
$ # Domain0 から MySQL マシンにログインします
$ # MySQL マシンにログインせず、Domain0 から -h ホスト名 オプションを指定して操作することもできます。
$ ssh user1@actmysql.server.localnet
Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ

$ # バックアップファイル backup.sql から復元します
$ mysql -u root -p < backup.sql
Enter password: MySQL ユーザー root のパスワード

$ mysql -u root -p < backup_testdb.sql
Enter password: MySQL ユーザー root のパスワード

$ exit                                                        # MySQL マシンからログアウトします
Connection to actmysql.server.localnet closed.

同一サーバー内にバックアップ用データベースを新たに作成し、そのデータベースにバックアップします。
$ # Domain0 から MySQL マシンにログインします
$ # MySQL マシンにログインせず、Domain0 から -h ホスト名 オプションを指定して操作することもできます。
$ ssh user1@actmysql.server.localnet
Enter passphrase for key '/home/users/domain0/.ssh/id_rsa': 鍵のパスフレーズ

$ mysql -u root -p
Enter password: MySQL ユーザー root のパスワード
       :
-- バックアップ用データベース testdbback を作成します
[(none)]> CREATE DATABASE testdbback;
Query OK, 1 row affected (0.00 sec)

-- testdbback の管理ユーザーを既存の testuser にします
[(none)]> GRANT ALL ON testdb.*
    -> TO testuser@localhost;
Query OK, 0 rows affected (0.00 sec)

[(none)]> quit
Bye

$ # データベース testdbtestdbback にバックアップします
$ # 異なるデータベースにリストアしますので -B --add-drop-database オプションは指定しません
$ mysqldump -Q -u root -p testdb > backup_testdb.sql
Enter password: MySQL ユーザー root のパスワード

$ mysql -u root -p testdbback < backup_testdb.sql
Enter password: MySQL ユーザー root のパスワード

$ rm backup_testdb.sql

$ exit                                                        # MySQL マシンからログアウトします
Connection to actmysql.server.localnet closed.

メジャーバージョンアップ

インストール済 MySQL のメジャーバージョンを上げる場合は、以下の手順で行います。
$ # バージョンアップ版のコンパイルを行います
$ cd /usr/local/src
$ tar zxvf /home/exports/mysql-x.x.xx.tar.gz
$ cd mysql-x.x.xx
$ ./configure \
       :                                                      # インストール手順の configure を行います
$ make

$ # make install 前にバックアップを取得します
$ mysqldump -A -Q --opt -u root -p > バックアップファイル名
Enter password: MySQL ユーザー root のパスワード

$ # サービスを停止します
$ su -
パスワード:root ログインパスワード

# service mysql stop

# # 念のためデータベースフォルダごとバックアップします
# mv /var/mysql/data /var/mysql/backup

# # 新バージョンのデータベースフォルダを作成します
# mkdir /var/mysql/data
# chown mysql.mysql /var/mysql/data
# chmod 750 /var/mysql/data

# # バージョンアップ版のインストールを行います
# make install

# # 定義ファイルを編集します
# cp -f /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
# vi /etc/my.cnf
       :                                                      # インストール手順の定義ファイルの編集を行います

# # データベースを初期化します
# cd /var/mysql/data
# su mysql -s /bin/bash
$ /usr/local/bin/mysql_install_db --user=mysql
$ exit

# # サービスを開始します
# service mysql start

# # リストアを行います
# mysql -u root < バックアップファイル名
# mysql -u root
       :
mysql> FLUSH PRIVILEGES;
       :
mysql> exit
 
a System House to build an Accounting system by the Computer Technology