8部 インストールと設定

Linux 版 MySQL のインストール

MySQLのインストール方法はソース、バイナリ、RPMの3つが用意されています。コンパイル済みのバイナリパッケージ、もしくはRPMを使えばかなり時間が節約できますが、インストール時にカスタマイズできる範囲は限られます。ソースからインストールするにはある程度の知識とツールが必要になりますが、細かいインストールオプションを設定することが可能です。

1.MySQLのインストール概要

MySQLのバージョン

MySQLのインストールファイルには、開発バージョンと安定バージョンが用意されています。開発バージョンという名称から推測するとまだ未完成のバージョンのように感じますが、開発元でのテストが行われており、実用での採用も十分検討の余地があります。

MySQLのファイル名にはバージョン番号が付いているので、例えば、mysql-5.0.12-betaとなっていれば、バージョン番号5.0.12のベータ版と解釈することができます。

ファイル名の最後の単語(alpha/beta/gamma)でリリースの安定レベルを知ることができます。

サフィックス 内容
alpha 新しい機能の追加され、開発元でテストされている状態です。
beta 新規の開発に使用できます。新しい機能の追加はありませんが、全てのコードがテストされています。
rc

リリース版候補です。安定していると考えられますが、使用事例がまだ少ない状態です。
- ファイル名最後に単語が付いていなければ、バグレポートなしでしばらくの間動作していたことを意味します。

MySQLのダウンロード

MySQLの公式ダウンロード場所

MySQLホームページ

インストール場所

バイナリとソース配布のインストールで生成される、ディレクトリのレイアウトを説明します。

バイナリ配布でのインストール先

バイナリ配布は解凍することによりインストールされ、通常は"/usr/local/mysql"の中の次のディレクトリを生成します。

ディレクトリ ディレクトリの内容
bin クライアントプログラム、mysqldサーバ
data ログファイル, データベース
include インクルードファイル
lib Libraries
scripts mysql_install_db
share/mysql エラーメッセージファイル
sql-bench ベンチマーク

ソース配布でのインストール先

ソース配布はconfigureしコンパイルした後にインストールされます。通常、"/usr/local"下に次のサブディレクトリが生成され、各種プログラムファイルがインストールされます。

ディレクトリ ディレクトリの内容
bin クライアントプログラムとスクリプト
include/mysql インクルードファイル
info Info 形式のドキュメント
lib/mysql Libraries
libexec mysqld サーバ
share/mysql エラーメッセージファイル
sql-bench ベンチマークと crash-me
test
var データベースとログファイル

ソースインストールのレイアウトはバイナリインストールと次の点が異なります。

  • mysqldサーバは "/bin" ではなく "libexec" ディレクトリにインストールされます。
  • データディレクトリは "data" ではなく "var" です。
  • mysql_install_dbは "/usr/local/mysql/scripts" ではなく "/usr/local/bin" ディレクトリにインストールされます。
  • ヘッダーファイルのディレクトリは "include/mysql" で、ライブラリのディレクトリは "lib/mysql" です。

2.ソース配布でのインストール

簡単インストールコマンドのリスト

MySQLをソースからインストールするために行なわなければならない基本的なコマンドを紹介します。

> groupadd mysql
> useradd -g mysql mysql
> gunzip < mysql-VERSION.tar.gz | tar -xvf -
> cd mysql-VERSION
> ./configure --prefix=/usr/local/mysql
> make
> make install
> scripts/mysql_install_db
> chown -R root /usr/local/mysql
> chown -R mysql /usr/local/mysql/var
> chgrp -R mysql /usr/local/mysql
> cp support-files/my-medium.cnf /etc/my.cnf
> /usr/local/mysql/bin/safe_mysqld --user=mysql &

インストール手順

MySQL用のユーザとグループの作成

mysqldが動作するためのユーザとグループを作成しましょう。次のコマンドはmysqlグループとmysqlユーザを作成します。

groupadd mysql
useradd -g mysql mysql

上記コマンドがない場合は、環境によってはadduserやaddgroupコマンドを使うことになります。

ダウンロードファイルを、解凍したいディレクトリに移動し、解凍

ファイルを解凍したいディレクトリに移動
mv mysql-VERSION.tar.gz /usr/src/

ファイルを解凍
gunzip < mysql-VERSION.tar.gz | tar xvf -
...mysql-VERSIONディレクトリが作成される

解凍されたディレクトリに移動

cd mysql-VERSION

configureコマンドでコンパイル

configureの実行時、他にいくつかのオプションを指定できます。詳細は下記の【インストールオプション】を参照してください。

./configure --with-charset=ujis \
--prefix=/usr/local \
--localstatedir=/sql/data

make

コンパイルが失敗する場合は【コンパイル時の問題】を参照してください。

root権限でインストール

make install

MySQL特権テーブルを生成

./scripts/mysql_install_db

mysql_install_dbスクリプトはmysql データベースにuserdbhosttables_privcolumns_privテーブルを作ります。これらの特権はrootユーザーにMySQLの管理者権限を許可し、そして、だれもが「test」という名前のデータベースを作成、使用できるように許可されています。

※ rootのパスワードの初期値は空です。このことは、全てのユーザがパスワードなしでrootになれ、全ての特権許可を得ることができることを意味します。

mysql_install_db スクリプトを走らせるにはいくつか選択があります。

  • mysql_install_db を走らせる前に編集して、許可の初期状態を変更
  • インストール後に許可を変更したい場合、
    # mysql -u root mysql
    で MySQLの rootで接続し、SQL 文を実行
  • すでに許可テーブルが作成された状態で、完全に許可テーブルを作成し直す

データディレクトリ以下のファイルの所有者を mysql に、それ以外のファイルの所有者をrootにする手順は以下のとおりです。

chown -R root /usr/local/mysql
chown -R mysql /usr/local/mysql/data
chgrp -R mysql /usr/local/mysql

次に必要に応じて下記の操作を行う

  • Perl DBI/DBD インタフェースのサポートをインストールする場合は、 「PerlDBI/DBDインターフェイス」を参照のこと。
  • MySQL をマシン起動時に自動的に開始したい場合、 「support-files/mysql.server」
    をシステムのスタートアップファイルがある場所にコピーします。詳しくは「自動起動と停止」を参照。

全てがインストールされた後、配布の初期化とテストを行なうべきです。

/usr/local/mysql/bin/safe_mysqld --user=mysql &

MySQLサーバーを開始

BINDIRはsafe_mysqldがインストールされているディレクトリ"/usr/local/bin"です。

BINDIR/safe_mysqld &

コマンドがすぐに"mysqld daemon ended"エラーで失敗する場合、"mysql-data-directory/$HOSTNAME.err"ファイルになんらかの情報を見つけることができます。

インストールオプション

configureスクリプトには、MySQLをコンフィグする際のオプションが多数用意されている。通常は、configureコマンドラインにオプションを使用して行う。いくつかの環境変数を使用してもconfigureに影響を与えることができます。

configureがサポートするオプションの一覧は、次のコマンドを実行:

/configure --help

コンパイルオプション

1) クライアントだけをコンパイルする

/configure --without-server

2) ベンチマークツールをインストールしない

/configure --without-bench

3) ドキュメントをインストールしない

/configure --without-docs

4) ログファイルとデータベースディレクトリを指定する

インストール先ディレクトリの変更:mysqlプログラムを「/usr/local/mysql」配下にインストールします。

/configure --prefix=/usr/local/mysql

データベースディレクトリの変更:データベースディレクトリを「/usr/local/mysql/data」に変更します。

/configure --localstatedir=/usr/local/mysql/data

5) ソケットの位置の変更

ソケットをデフォルト位置(通常は「/tmp」または「/var/run」)でなく他のディレクトリに変更します。

/configure --with-unix-socket-path=/path/to/socket/dir

※「/path/to/socket/dir」は絶対パス名でないといけません。

6) 静的リンクされたプログラムをコンパイル

/configure --with-client-ldflags=-all-static
\
--with-mysqld-ldflags=-all-static

7) 非NULL項目にデフォルトの項目値を使用しない

非 NULL 値を要求する全ての項目に値を明示的に指定しなければ、INSERTステートメントはエラーを生成します。デフォルト値の使用を抑えるには、次のように configure を実行します。

CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS
./configure

8) 文字セットの変更

./configure --with-charset=CHARSET

※ 文字セットを変更したい場合は、コンフィグレーション間でmake distcleanを行なう必要があります
※ テーブルを生成した後に文字セットを変更する場合、 isamchk -r -q を全てのテーブルに実行する必要があります。そうでないと、インデックスは正しくソートされません。

パッチの適用

MySQLのパッチは以下の場所に公開されています。

パッチエリア

FTPサイトに配布されるパッチはテキストかgzip圧縮されたファイルです。テキストの場合は、上に示したメーリングリストからのパッチと同じにします。 圧縮されたパッチを適用するには、MySQLソースツリーのトップレベルに移動し、以下のコマンドを実行します。

gunzip < patch-file-name.gz | patch
-p1
rm config.cache
make clean

それから通常のソースインストールの指示をconfigureから始めます。現在実行しているMySQLをシャットダウンし、make install実行後、 MySQLサーバを再起動します。

メーリングリストのパッチを適用するには、 そのメッセージをファイルに保存した後、 MySQLソースツリーに移動して、以下のコマンドを実行します。

patch -p1 < patch-file-name
rm config.cache
make clean

3.バイナリ配布でのインストール

簡単インストールコマンドのリスト

MySQLをバイナリからインストールするための基本的なコマンドを紹介します。

> groupadd mysql
> useradd -g mysql mysql
> tar xvfz mysql-VERSION-OS.tar.gz
> ln -s mysql-VERSION-OS mysql
> cd mysql
> scripts/mysql_install_db
> chown -R root /usr/local/mysql
> chown -R mysql /usr/local/mysql/data
> chgrp -R mysql /usr/local/mysql
> chown -R root /usr/local/mysql/bin
> bin/safe_mysqld &

新しいユーザを追加するには bin/mysql_setpermission スクリプトを使用できます。使用の際はDBIとMsql-Mysql-modulesのPerlモジュールをインストールする必要があります。

インストール手順

MySQL用のユーザとグループの作成

mysqldが動作するためのユーザとグループを作成しましょう。次のコマンドはmysqlグループとmysqlユーザを作成します。

> groupadd mysql
> useradd -g mysql mysql

上記コマンドがない場合は、環境によってはadduserやaddgroupを使うことになります。使い方は同じです。

バイナリファイルを解凍する

それではインストールしてみましょう。まず、解凍したいディレクトリを選んで、そこで解凍します。以下の例では、/usr/local に解凍し、MySQLをインストールするディレクトリ /usr/local/mysql を作っています。

ファイルを解凍
tar xvfz mysql-VERSION-OS.tar.gz
...(ファイルが展開されmysql-VERSION-OSディレクトリが作成される)

リンクを作成
ln -s mysql-VERSION-OS mysql

mysqlディレクトリに移動
cd mysql

いくつかのファイルとサブディレクトリがmysqlディレクトリ中にあります。インストール目的の最も重要なものは"bin"と"scripts"ディレクトリです。

  • binディレクトリ
    このディレクトリはクライアントプログラムとサーバを含んでいます。シェルがMySQLプログラムを正しく見つけられるように、このディレクトリのフルパス名をPATH環境変数に追加します。
  • scriptsディレクトリ
    このディレクトリはmysql_install_dbスクリプトを含んでいる。これはサーバアクセスパーミッションを初期化するために使用されます。

mysqlaccessを使用し、かつMySQL配布を非標準の場所に持ちたい場合は、mysqlaccessがmysqlクライアントを見つけようとする場所を変更する必要があります。

$MYSQL = '/usr/local/bin/mysql';

見つけたらパスをmysqlが実際にシステム上におかれている場所を示すように変更します。

MySQL許可テーブルを作成します(これは初めて MySQL をインストールするときだけ行います)。

scripts/mysql_install_db

MySQL をマシン起動時に自動的に開始したい場合、 "support-files/mysql.server"をシステムのスタートアップファイルがある場所にコピーします。

データディレクトリ以下のファイルの所有者をmysqlに、それ以外のファイルの所有者をrootにする手順は以下のとおりです。

chown -R root /usr/local/mysql
chown -R mysql /usr/local/mysql/data
chgrp -R mysql /usr/local/mysql

MySQLサーバーは以下のコマンドで開始できます。

bin/safe_mysqld &

クライアントプログラムのビルド

自分で書いたか、第三者が作成したMySQLクライアントプログラムをコンパイルする場合、 -lmysqlclientオプションを使用してリンクします。また -L オプションを指定して、ライブラリがどこにあるか指定する必要がある場合もあります。例えばライブラリが"/usr/local/mysql/lib"にインストールされるならば、リンクの時に"-L/usr/local/mysql/lib -lmysqlclient"と指定します。

MySQLヘッダーファイルを使用するクライアントのために、それらをコンパイルする時には、-I オプションを指定しなければならない事もあります。 (例えば、 "-I/usr/local/mysql/include") 

4.Linux RPM でのインストール

以下が使用するであろうRPM filesです。

  • MySQL-VERSION.i386.rpm
     MySQL サーバー。ただ単に他のマシン上で走っている MySQL
    サーバーに接続するだけなら、これは不要でしょう。 
  • MySQL-client-VERSION.i386.rpm
     MySQL
    クライアント標準プログラム。このパッケージはほとんどの場合インストールすることになるでしょう。
  • MySQL-bench-VERSION.i386.rpm
     ベンチマーク。perl msql-mysql-modules RPM が必要。
  • MySQL-devel-VERSION.i386.rpm
     他の MySQL クライアント(perlモジュールのような)をコンパイルするのに必要なライブラリーとインクルードファイルを含みます。
  • MySQL-VERSION.src.rpm
     上記全てのソース。これは他のアーキテクチャ用に RPM を作成する場合にのみ必要でしょう。 (例えば
    Alpha or SPARC)

RPMパッケージに含まれるファイルです。

rpm -qpl MySQL-VERSION.i386.rpm

インストールの最小の方法:

rpm -i MySQL-VERSION.i386.rpm
MySQL-client-VERSION.i386.rpm

クライアントパッケージだけをインストール:

rpm -i MySQL-client-VERSION.i386.rpm

RPMはデータを"/var/lib/mysql"に保存します。 RPMは起動時にサーバーを立ちあげるように、"/sbin/rc.d/"に登録します。

RPM fileインストール後、「バイナリインストール」セクションに進み、 MySQL許可テーブルの作成から始めましょう。

5.インストール後の設定とテスト

各ディレクトリの説明

バイナリ配布を使用する場合、トップディレクトリはインストール先のディレクトリ"/usr/local/mysql"になります。ソース配布の場合、トップディレクトリはMySQLのソースディレクトリです。

  • SRCDIR
    mysqlのソースを展開したディレクトリです。通常は"/usr/src/mysql-version"となります。
  • BINDIR
    mysqladminやsafe_mysqldがインストールされたディレクトリ。ソースからインストールした場合、通常は"/usr/local/bin"だ。 バイナリ配布を使用しているはバイナリ配布の"bin"ディレクトリになります。
  • EXECDIR
    mysqldサーバーのインストール先。ソースからインストールした場合、"/usr/local/libexec"です。バイナリ配布を使用している場合、BINDIR
    ディレクトリと同一になります。

オプションファイル

MySQLのサーバー、クライアントともに、オプションファイルからデフォルトの起動オプションを読み込むことができます。

UNIXではMySQLは以下のファイルからデフォルトオプションを読み込みます。

ファイル名 説明
/etc/my.cnf グローバルオプション
データディレクトリ/my.cnf サーバ用オプション
~/.my.cnf ユーザ用オプション

「データディレクトリ」は MySQL のデータを格納するディレクトリ ("/usr/local/mysql/data"もしくは"/usr/local/var")。 

Win32ではMySQLは以下のファイルからデフォルトオプションを読み込む:

ファイル名 説明
C:\my.cnf グローバルオプション
C:\mysql\data\my.cnf ユーザ用オプション

MySQLは上記の表にかかれている順にオプションファイルを読みます。複数オプションファイルがあった場合は、後から読まれた設定が有効になります。全てのオプションはコマンドラインの引数に上書きされます。いくつかのオプションは環境変数に定義できます。オプションファイルとコマンドラインの引数は環境変数を上書きします。

以下のプログラムはオプションファイルをサポートします。

mysql, mysqladmin, mysqld, mysqldump, mysqlimport,
isamchk and pack_isam.

オプションファイルには、プログラムがサポートしているコマンドラインの long オプション(例えば、-u ではなくて --user の方)を書くことができます。プログラムを --help で起動すれば、設定可能な変数名が得られます。

オプションファイルの書式

#comment
コメントは `#' か `;' 文字で始めます。空の行は無視します。
[group]
グループ宣言。 group
はオプションを定義するプログラムかグループの名前です。この宣言の後、オプション か
set-variable
行で、このグループにオプションを与えます。このセクションの範囲は、他のグループ宣言の行が来るか、ファイルの最後に来るまでです。
option
これはコマンドラインの --option と等価です。
option=value
これはコマンドラインの --option=value と等価です。
set-variable = variable=value
これはコマンドラインの --set-variable variable=value
と等価です。これは mysqld 変数で使用される形式です。

client グループは、全ての MySQL クライアント(mysqldは除)に対してオプションを定義します。これはサーバーに接続する際に使用するパスワードを指定できるグループです(この場合、オプションファイルは自分だけが読み書きできるようにしましょう)。

オプションや値の善後にある全てのブランク文字は自動で取り除かれます。値として、`\b',`\t', `\n', `\r', `\\' and `\s' のエスケープシーケンスが使用できます。 (`\s' == blank).

オプションファイル例:

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M

[mysqldump]
quick

ユーザーオプションファイル例:

[client]
# The following password will be sent to all standard
MySQL clients
password=my_password

[mysql]
no-auto-rehash

ソースには「my-example.cnf」 という名前のサンプルファイルが 「support-files」ディレクトリにあります。バイナリ配布を利用している場合は、 「DIR/share/mysql」ディレクトリを探すと良いでしょう(ここで DIR は MySQL がインストールされたディレクトリのパス名で、普通は `/usr/local/mysql')。この「my-example.cnf」 ファイルを自分のディレクトリに 「.my.cnf」という名前でコピーして使用できます。

MySQL プログラムにオプションファイルを読ませないようにするには、コマンドラインの一番最初に --no-defaults を追加します。これはオプションの最初でないと有効になりません。どのオプションが定義されているか確かめるには、--print-defaults を最初のオプションに指定します。

MySQLの開始

MySQLはsafe_mysqldスクリプトを使用して起動します。スクリプト自体はBourneシェルですから、編集してデフォルト値を変更することもできます。safe_mysqldにオプションを与えればMySQLデーモンのオプションとすることもできます。
MySQLを起動する場合、mySQLを直接使用しないでsafe_mysqldをバックグラウンドで起動したほうが良いでしょう。safe_mysqldスクリプトは、mysqldを起動したあとにmysqldが稼動しつづけているかチェックし、MySQLが落ちたら、自動的に再起動を行ってくれます。

許可テーブルのインストールとサーバーの開始(RPMはいらない)。

・テーブルのインストール
# SRCDIR/scripts/mysql_install_db

上記コマンドで、必要なテーブルがインストールされます。これはインストール後、1回だけ行います。

MySQLサーバーを起動します。

# BINDIR/safe_mysqld &

サーバーが接続を受け付けるか確認します。

# BINDIR/mysqladmin version
# BINDIR/mysqladmin variables

mysqladmin version の出力はインストールプラットフォームと MySQLのバージョンを出力します。mysqladmin の使用方法は、--helpオプションで起動することにより表示されます。

サーバーをシャットダウンします。

# BINDIR/mysq
ladmin -u root shutdown

サーバーをリスタートするには、safe_mysqld か mysqld を直接実行します。

# BINDIR/safe_mysqld --log &

簡単なテスト方法

いくつかの簡単なテストでサーバーが動いているか確認できます。

# BINDIR/mysqlshow
+-----------+
| Databases |
+-----------+
| mysql |
+-----------+

# BINDIR/mysqlshow mysql
Database: mysql
+--------------+
| Tables |
+--------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+--------------+

# BINDIR/mysql -e "select host,db,user from db" mysql
+------+--------+------+
| host | db | user |
+------+--------+------+
| % | test | |
| % | test_% | |
+------+--------+------+

ベンチマークテスト

他のプラットフォームで MySQLのパフォーマンスを比較するために"bench"にベンチマークがあります。"bench/Results"ディレクトリには、他のデータベースやプラットフォームでベンチを実行した結果があります。全てのテストを実行するには、以下のようにします。

# cd bench
# ./run-all-tests

"tests"サブディレクトリでテストすることも可能です。例えば、"auto_increment.tst"の実行は以下のようにします。

# BINDIR/mysql -vvf test < ./tests/auto_increment.tst

これの結果は"./tests/auto_increment.res"ファイルに書き出されます。

RPM のソース配布には含まれますが、バイナリ配布には"sql-bench"ディレクトリがありません。この場合、ベンチマークをインストールする必要があります。 MySQL 3.22 のバイナリ配布から、"mysql-bench-VERSION-i386.rpm"という名前でRPMパッケージを作っており、これにはベンチマークのデータとコードが含まれます。

6.自動起動と停止

mysql.serverスクリプト

 mysql.serverスクリプトは start、stop引数を指定することによりサーバーを起動、停止できます。mysql.serverの格納場所はMySQLインストールディレクトリの「share/mysql」ディレクトリ、または MySQLソースツリーの"support-files"ディレクトリです。

MySQLの起動
mysql.server start

MySQLの停止
mysql.server stop

mysql.serverはサーバーを起動時する前にMySQLがインストールされたディレクトリをカレントディレクトリとし、safe_mysqldを起動します。

MySQLの自動起動

システムが"/etc/rc.local"を起動スクリプトとして使用しているなら、以下のようにその中に記述しよう。これでシステムが起動するたびに、MySQLも自動的に起動します。

/bin/sh -c 'cd /usr/local/mysql ;
./bin/safe_mysqld &'

 mysql.serverのオプション設定

グローバル設定ファイルである"/etc/my.cnf"に、 mysql.serverのオプションを記述することも可能です。

my.cnfファイルは以下のような記述になっています。

[mysqld]
datadir=/usr/local/mysql/var
socket=/tmp/mysqld.sock
port=3306

[mysql.server]
user=mysql
basedir=/usr/local/mysql

mysql.serverスクリプトは以下の変数を使用します。

user, datadir, basedir, bindir , pid-file

7.PerlDBI/DBDインターフェイス

Perlモジュールのインストール

MySQLはPerl DBI/DBDインターフェースをサポートします。Perl 5.004以上が必要です。

Perlの配布物はtarでアーカイブされ、圧縮されています。"MODULE-VERSION.tar.gz"という命名規則で配布されています(MODULE はモジュール名、VERSION はバージョン番号)。

PerlからMySQLを利用するには、Perl モジュールの Data-DumperDBIMsql-Mysql-modulesをインストールする必要があります。これをダウンロードしたら、次のようにしてインストールします。例ではData-Dumperモジュールを扱っていますが、まったく同じ手順でDBI、Msql-Mysql-modulesをインストールできます。注意してもらいたい点は、初めてこれらのモジュールをインストールする際には、Data-Dumper を最初にインストールし、次に DBI、最後に Msql-Mysql-modulesの順でなければならないということです。

これらモジュールは下記のURLにあります。

ftp.mysql.com/pub/mysql/Contrib/
MySQLサイト Download
http://www.mysql.com/downloads/index.html
MySQLサイト Download Perl/DBI modules ページ
http://www.mysql.com/downloads/api-dbi.html

1.配布物をカレントディレクトリに展開

それでは、作業ディレクトリでファイルを解凍展開しましょう。

gunzip < Data-Dumper-VERSION.tar.gz |
tar xvf -

上記のコマンドで"Data-Dumper-VERSION"というディレクトリができているはずです。

2.展開したディレクトリに移動

cd Data-Dumper-VERSION

3.コンパイル、インストール

perl Makefile.PL
make
make test
make install

新しいリリースのMySQLをインストールした場合は、常に Msql-Mysql-modulesを再構築、再インストールします。

Msql-Mysql-modulesの注意点

Msql-Mysql-modulesのインストールは、"perl Makefile.PL"のときに、コマンドラインで質問されます。

perl Makefile.PL

Which drivers do you want to install?

1) MySQL only
2) mSQL only (either of mSQL 1 or mSQL 2)
3) MySQL and mSQL (either of mSQL 1 or mSQL 2)

4) mSQL 1 and mSQL 2
5) MySQL, mSQL 1 and mSQL 2

Enter the appropriate number: [3] 1

MySQLがインストールしたいだけであれば 1を選択します。

Do you want to install the MysqlPerl
emulation? You might keep your old Mysql module (to be
distinguished from DBD::mysql!) if you are concerned
about compatibility to existing applications! [n]

MysqlPerlエミュレーション機能のインストールが必要かと聞かれていますが、よっぽど古いMySQLモジュールを使っているのでない限り、そのまま[Enter] を押します。

次の質問は、ヘッダ・ファイルとライブラリが入るディレクトリについて。MySQLをRPMでインストールしたのでなければ、 [Enter] を押します。
指定する際は、たとえば"mysql.h"が"/usr/include/mysql/mysql.h"にあるならば、"/usr/lib/mysql/libmysqlclient.a"や "/usr/lib/libmysqlclient.so"と同様に、ヘッダ・ディレクトリに"/usr"と入力します。

Where is your MySQL installed? Please
tell me the directory that
contains the subdir 'include'. [/usr/local]

これでインストール完了。

もし、下記のようなエラーが表示されたら、1時間ほど悩んでほしいですね。

Cannot find one of include/mysql/mysql.h,
include/mysql.h in
 /Msql-Mysql-modules

これは、mysql-develがインストールされていないのが原因。RPMかなにかでインストールしておきましょう。
ライブラリが足りなくてインストールができない、というケースが結構多いです。

Perl DBI/DBD 使用時の問題

もしPerlが "../mysql/mysql.so"モジュールが見つからないとメッセージを出した場合、シェアードライブラリ "libmysqlclient.so"を取りこめなかった可能性があります。この場合は、以下の方法で解決できます。

  • Msql-Mysql-modulesのコンパイルでは、 perl Makefile.PL
    のかわりに perl Makefile.PL --static --config とします。
  • libmysqlclient.so を他のシェアードライブラリがあるところ("/usr/lib"とか "/lib")にコピーします。Linux の場合、"/etc/ld.so.conf" ファイルに、"libmysqlclient.so" があるディレクトリを書き加え、ldconfig -v を実行することもできます。
  • LD_RUN_PATH (LD_LIBRARY_PATH) 環境変数にlibmysqlclient.so があるディレクトリを書き加えます。make LD_RUN_PATH=/usr/lib

もし DBD-mysql で以下のエラーが出た場合、 gcc (あるいは、gccでコンパイルされた古いバイナリ) を使用している可能性があります。

/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'

上記のエラーの際は、"mysql.so" を作成する時のリンクコマンドに -L/usr/lib/gcc-lib/... -lgcc を追加します。 (Perlクライアントを作る際の make の出力をチェックしましょう) -L オプションに指定するのは、システム内の"libgcc.a"があるディレクトリです。

PerlとMySQLがgccを使用して作られていない場合も原因としてあります。この場合、両方をgccでコンパイルすることにより、ミスマッチを避けることができます。

8.アップグレード/ダウングレード

アップデートのリリース

MySQL のアップデート時には次のポリシーが使われています。

  • それぞれのマイナーアップデートで、バージョン文字列中の最後の数値が増加します。主要な新機能や前のバージョンとのマイナーな非互換があった時には、バージョン文字列中の2番目の数値が増加します。また、ファイル形式が変更した時、最初の数値が増加します。
  • 安定にテストされたリリースは年に約 1、2
    回公開。その他、必要に応じてバグフィックスされたリリースを公開。
  • 作業中のリリースは約 1、8 週間毎に公開。
  • いくつかのプラットフォームのためのバイナリ配布も行っています。
  • バグ修正後、パッチを公開。
  • 危険ではないがやっかいなバグは、TCXに通知すればパッチが作成されます。その他の場合、製作中のパッチに含められます。

MySQLのアップグレード/ダウングレード

MySQL のリコンパイルによって文字セットが変更された場合、全てのテーブルに isamchk -r -q を行なう必要があります。そうしなければ、インデックスが正しい順になりません。

アップグレード時には、古いデータベースをバックアップもしておきます。もし新しい mysqldが予期せぬ何かを行った場合、それをシャットダウンし、古い mysqld を再起動することができます。

アップグレード後、再コンパイルされたクライアントプログラムで、予期せぬ問題が起きる場合、おそらく、プログラムのコンパイル時に古いヘッダやライブラリファイルを使用しています。この場合、"mysql.h"ファイルと"libmysql.a"ライブラリが、新しいMySQL配布からのものであるかどうかを確かめるために、日付をチェックします。もし違っていれば、プログラムを再コンパイルしましょう。

もし新しいmysqldサーバーが起動できないとか、パスワード無しで接続できないとか、いくつかの問題が発生した場合、以前のインストールでできた古い "my.cnf" ファイルがあるかどうかを確認しましょう。 program-name --print-defaults で確認できます。もしこの出力がプログラムの名称以外の物を返した場合、有効になっている "my.cnf" ファイルがあります。

新しいリリースの MySQL をインストールした場合に常に Msql-Mysql-modules を再構築、再インストールします。すべての DBI スクリプトがMySQLのアップグレード後にコアダンプする兆候に気づいた場合は、特に必要です。

他のアーキテクチャへのアップグレード

もし、MySQL 3.23 を使用しているならば、違うアーキテクチャのマシンに、".frm"、".MYI"、".MYD" ファイルをコピーすることができます。ただし、両者間で、同じ浮動小数点のフォーマットをサポートしている場合に限ります。

現在MySQLデータとインデックスファイル (ISAM "*.ISD" と "*.ISM" ファイル) はアーキテクチャ依存で、いくつかのケースではOS依存だ。アプリケーションを、現在のマシンとは異なるアーキテクチャ/OSを持つ他のマシンに移したい場合は、mysqldump を使用します。

有効なオプションが何かを見るためには、mysqldump --help を試そう。データを MySQLのより新しいバージョンに移す場合、速くコンパクトなダンプを得るために、より新しいバージョンで mysqldump --opt を使用します。

2つのマシン間でデータベースを移動する最も簡単な方法は、データベースが置かれているマシン上で次のコマンドを実行するです。

mysqladmin -h '任意のホスト名' create
データベース名
mysqldump --opt データベース名 | mysql -h '任意のホスト名' データベース名

遅いネットワーク上でリモートマシンからデータベースをコピーしたい場合

mysqladmin create データベース名
mysqldump -h '任意のホスト名' --opt --compress データベース名 |
mysql データベース名

ファイル内の結果を格納(この例では圧縮されている)

mysqldump --quick データベース名 | gzip >
データベース名.contents.gz

データベースの中身を含んでいるファイルを、目的のマシンに転送して、次のコマンドを実行

mysqladmin create データベース名
gunzip < データベース名.contents.gz | mysql データベース名

データベース転送を実行するために、mysqldump と mysqlimportも使用できます。大きなテーブルでは、これは単純な mysqldumpの使用よりもとても速いです。次に示すコマンドでは、DUMPDIR は mysqldumpからの出力を格納するために使用するディレクトリの完全なパス名を表わしています。 

まず、出力ファイルのためのディレクトリを作成して、データベースをダンプ

mkdir DUMPDIR
mysqldump --tab=DUMPDIR データベース名

それから、DUMPDIRディレクトリ内のファイルを目的のマシン上の対応するディレクトリに転送し、MySQL にファイルをロード

データベースの作成
mysqladmin create データベース名

テーブルの作成
cat DUMPDIR/*.sql | mysql データベース名

テーブルにデータをインポート
mysqlimport データベース名 DUMPDIR/*.txt

mysql データベースのコピーも忘れないように。それは承認テーブル (user, db, host)が格納されるためです。 mysqlデータベースをその場所に置くまで、新しいマシン上ではMySQL rootユーザとしてコマンドを実行する必要があります。

新しいマシン上へmysqlデータベースを導入した後、サーバが承認テーブル情報を再ロードするために、mysqladmin flush-privilegesを実行しましょう。

9.コンパイル時の問題

多くの問題の解決のために、再configureが必要になることがあります。
再configure時に注意すべき要点を、エラーごとにまとめました。configureで失敗したときは、そのエラー内容とこのページを参考にしてください。

再 configure 時の注意点

もしconfigureを一度実行した後に再度実行するならば、以前のビルドでできたオブジェクトを消しておきましょう。

rm config.cache
make clean

もしくは

make distclean

それから、configure を実行するごとに、makeを実行してからコンパイルすることを忘れないように。

ユーザ権限の設定

新しいユーザ権限をMySQLへ追加

ユーザーは2つの違った方法で追加できます。 GRANT構文を使用して行う方法と、MySQLの許可テーブルを直接操作する方法です。

GRANTでの新規にユーザー登録

MySQLにログイン
mysql -u root mysql

spadminユーザの作成
GRANT ALL PRIVILEGES ON *.* 
TO
spadmin@localhost
BY 'something' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* 
TO
spadmin@"%"
BY 'something' WITH GRANT OPTION;

adminユーザの作成
GRANT RELOAD,PROCESS ON *.*
TO admin@localhost;

guestユーザの作成
GRANT USAGE ON *.* 
TO guest@localhost;

これらGRANT構文では3つの新しいユーザを作ります。

spadmin
どこからでもサーバーに接続できる完全なスーパーユーザ。padmin@localhost とspadmin@"%" の両方にGRANT構文を発行しなくてはならない事に注意。もしlocalhost からの許可をした登録がないと、localhost から接続した時、mysql_install_db が自動で作成した localhost への匿名ユーザーが優先されます。
admin
localhost からパスワードなしで接続できるが、reload, processの使用だけが許されます。データベースへのアクセスは許可されていません。しかしこれは後でテーブル GRANT構文を発行すれば、個々のデータベースへのアクセス権限が設定できます。
guest
パスワードなしで localhost からのみ接続できるユーザー。グローバルな権限は全て 'N'に設定されます。USAGEは権限無しユーザーの設定を許可する事になります。

ユーザーの許可をGRANT構文で定義する

以下は、localhost, server.domain, whitehouse.govから接続が可能な custom ユーザーの追加する例です。
customユーザーは "db1" データーベースには localhost からの接続のみを許可され、 "db2"データベースには "other.com" からのみ接続が許可され、 "db3"データベースには全てのホストから接続できます。 customユーザーは、 "

mypasswd

"というパスワードを全てのホストで使用します。

mysql -u root mysql

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON db1.*
TO custom@localhost
IDENTIFIED BY 'mypasswd';

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON db2.*
TO custom@other.com
IDENTIFIED BY 'mypasswd';

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON db3.*
TO custom@'%'
IDENTIFIED BY 'mypasswd';

任意のドメインに属する全てのマシンに接続を許可

GRANT ...
ON *.*
TO user@"%.domain.co.jp"
IDENTIFIED BY 'mypasswd';

xmysqladmin、mysql_webadmin、そしてxmysqlを使っても権限テーブルへの値の挿入/変更/更新ができます。これらのユーティリティは MySQL Contrib
directoryにあります。

パスワードの設定法

INSERTかUPDATEで空ではないパスワードを設定する場合、暗号化するためにPASSWORD()関数を使用します。これはuserテーブルはプレーンテキストでなく、暗号化されたパスワードであることを要求しています。

SET PASSWORD構文を使用する

SET PASSWORD FOR jeffrey@"%" = PASSWORD('mypasswd');

GRANT ... IDENTIFIED BY構文やmysqladmin passwordコマンドでパスワードを設定した場合は、PASSWORD()関数は必要ない。両方とも、自動的にパスワードを暗号化します。

関連記事