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ミラーサイト
[Nagoya Syouka University]
WWW
FTP
[HappySize]
WWW
FTP
インストール場所
バイナリとソース配布のインストールで生成される、ディレクトリのレイアウトを説明します。
バイナリ配布でのインストール先
バイナリ配布は解凍することによりインストールされ、通常は"/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 データベースにuser、db、host、tables_priv、columns_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クライアントを見つけようとする場所を変更する必要があります。"bin/mysqlaccess"スクリプトの 18行目付近を編集しよう。
$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 でのインストール
MySQL RPMSはRedHat 5.2で作成しているけど、他のrpmとglibcをサポートしているLinuxでも動作するよ。
以下が使用するであろう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/mysqladmin -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-Dumper、DBI 、Msql-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 を再構築、再インストールしたほうがいい。
Perl moduleを正しくインストールできない場合、以下の文献が役立つよ。
http://www.iserver.com/support/contrib/perl5/modules.html
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
mSQLまでインストールしたいなら別だけど、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
1時間きっちりなやんだかい?ボクは1時間はまったよ。これは、mysql-develがインストールされていないのが原因。RPMかなにかでインストールしておこう。
ライブラリが足りなくてインストールができない、というケースが結構多い。TurboLinux
なら、turbopkgにて zlib-devel などがインストールされているか調べてみよう。
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()関数は必要ない。両方とも、自動的にパスワードを暗号化します。