Go to the first, previous, next, last section, table of contents.


4 MySQL のインストール

この章では、どのようにして MySQL を得、インストールするのかをのべます:

4.1 MySQL を得る方法

現在のバージョンとダウンロードの指示についての情報は MySQL ホームページ をチェックしてく ださい。

主なダウンロードミラーはここにあります:

http://download.sourceforge.net/mirrors/mysql/

MySQL ミラーサイトになることに興味があれば、匿名 rsync ができます : rsync://download.sourceforge.net/mysql/。下記リストにあなたのミラー を追加するため、webmaster@mysql.com に電子メールを送って、我々に 知らせてください。

我々のメインサイトからのダウンロードに問題があれば、下記に一覧されたミラー の一つを使用してみてください。

悪いまたは遅れているミラーは webmaster@mysql.com に報告してくださ い。

ヨーロッパ:

北アメリカ:

南アメリカ:

アジア:

オーストラリア:

アフリカ:

4.2 MySQL がサポートする OS

我々は GNU Autoconf を使用していますので、MySQL は POSIX スレッ ドと C++ コンパイラが動作する全ての新しいシステムに移植可能です。(クライ アントコードのコンパイルだけは C++ を必要としますが、スレッドは必要ではありません。) 我々は自身のソフトウェアを、最初に Sun Solaris (現在は 2.5 ~ 2.7) 上と SuSE Linux Version 7.x で使用し開発します。

多くの OS では、ネイティブスレッドは最新バージョ ンだけで動作することに注意してください。 MySQL は次の OS/スレッドパッケージの組み合わせで、コンパイルの 成功が報告されています。

Note that not all platforms are suited equally well for running MySQL. How well a certain platform is suited for a high-load mission critical MySQL server is determined by the following factors:

Based on the above criterea, the best platforms for running MySQL at this point are x86 with SuSE Linux 7.1, 2.4 kernel and ReiserFS (or any similar Linux distribution) and Sparc with Solaris 2.7 or 2.8. FreeBSD comes third, but we really hope it will join the top club once the thread library is improved. We also hope that at some point we will be able to include all other platforms on which MySQL compiles, runs ok, but not quite with the same level of stability and performance, into the top category. This will require some effort on our part in cooperation with the developers of the OS/library components MySQL depends upon. If you are interested in making one of those components better, are in a position to influence their development, and need more detailed instructions on what MySQL needs to run better, send an e-mail to internals@lists.mysql.com.

Please note that the comparison above is not to say that one OS is better or worse than the other in general. We are talking about choosing a particular OS for a dedicated purpose - running MySQL, and compare platforms in that regard only. With this in mind, the result of this comparison would be different if we included more issues into it. And in some cases, the reason one OS is better than the other could simply be that we have put forth more effort into testing on and optimizing for that particular platform. We are just stating our observations to help you make a decision on which platform to use MySQL on in your setup.

4.3 使用する MySQL バージョン

make を行う前に決める事は、あなたが最新の開発リリースを使用するのか、 または最新の安定リリースを使用するのかです。

make 前の2番目の決定事項は、ソースディストリビューションとバイナリディ ストリビューションのどちらを使用するかです。多くの場合、バイナリがプラッ トフォーム用に存在していれば、おそらくバイナリディストリビューションを使 用すべきです。通常、それはソースディストリビューションよりも簡単にインス トールできます。

次のケースでは、おそらくソースインストールの方が良いでしょう:

MySQL の命名法では、リリース番号は3つの数値とサフィックスからな ります。例えば、mysql-3.21.17-beta のようなリリース名は次のように 解釈されます:

MySQL の全てのバージョンは、比較的安全に使用できることを確かめ るため、我々は標準テストとベンチマークを通して確認しています。標準テス トは以前に見つかった全てのバグをチェックするように拡張されるため、テスト スイートはより良く保持されます。

全てのリリースは少なくても次のテストがされていることに注意してください:

内部テストスイート
これは顧客のための製品システムの一部です。多くのテーブルと何百というメガ バイトのデータを持っています。
MySQL ベンチマークスイート
これは一般的な範囲のクエリを実行します。これは、最適化の最新バッチが実際 にコードをより速く作れるかどうかを確認するテストでもあります。 「13.7 Using Your Own Benchmarks」節参照。
crash-me テスト
これは、データベースがサポートしている機能と、その許容量と制限を決定しよ うとします。 「13.7 Using Your Own Benchmarks」節参照.

他のテストは我々の内部製品環境で最新の MySQL バージョンを我々が 少なくとも1つのマシンで使用することです。我々は動作のため 100ギガバイト 以上のデータを持ちます。

4.4 アップデートがリリースされる方法と時

MySQL は MySQL AB でかなり速く進化していて、我々はこれを他の MySQL ユーザに共有してもらいたいです。我々は、他の人が必要とし ていると思われるとても便利な機能を持った時に、リリースの作成を試みます。

我々は、実装が簡単な機能を要求するユーザの手助けも試みます。我々は、我々 のライセンスユーザが求めるものにも注目し、特に我々の拡張 email サポート 顧客が求めるものに注目して、彼らの手助けを試みます。

新しいリリースをダウンロードする必要はありません。News 節は、新しいリリー スが、あなたが本当に求める何かを持っているかどうかをあなたに教えます。 「F MySQL change history」節参照.

我々は MySQL の更新時は次のポリシーにしたがって行います:

現在の安定リリースはバージョン 3.23 です; 我々はすでにバージョン 4.0 の開発に移行しています。 しかし、安定バージョンでもバグはまだ修正されます。 我々は、バグ修正と``行なわなければいけない''ことを無視するような、完全な 凍結を考えていません。``幾分かの凍結''とは、``ほとんど確実に既に動作して いるものに影響を与えない''小さなことを追加するかもしれないということを意 味します。

4.5 インストールレイアウト

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

バイナリ配布はアンパックすることによりインストールされ、インストール場所 はあなたが選択した場所(通常 `/usr/local/mysql')の中の次のディレクト リを選択し生成します:

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

ソース配布は configure しコンパイルした後にインストールされます。デフォ ルトではインストールステップは `/usr/local' 配下のファイルを次のサ ブディレクトリにインストールします:

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

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

スクリプト `scripts/make_binary_distribution' を実行することにより、 コンパイルされたソースディストリビューションから、あなた自身のバイナリイン ストレーションを生成できます。

4.6 MySQL バイナリディストリビューションのインストール

次にさらに詳細な説明を行ないます:

MySQL バイナリ配布をインストールするには、次のツールが必要です:

Linux では、代わりのインストール方法として RPM (RedHat Package Manager) を使用することができます。 「4.6.1 Linux RPM notes」節参照.

問題が起きたときは、mysql@lists.mysql.com に質問を投稿する時に mysqlbug常に使用してください。問題がバグでないとして も、mysqlbug はあなたの問題を解決する助けになるであろうシステム情 報を収集します。mysqlbug を使用しないと、あなたの問題の解決を得る 可能性が小さくなります! mysqlbug は、配布のアンパック後に `bin' ディレクトリ内に見つけられます。 「2.3 バグや問題を報告する方法」節参照.

MySQL バイナリ配布をインストールし、使用するために行なわなければならない 基本的なコマンド:

shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
shell> ln -s mysql-VERSION-OS mysql
shell> cd mysql
shell> scripts/mysql_install_db
shell> chown -R root  /usr/local/mysql
shell> chown -R mysql /usr/local/mysql/data
shell> chgrp -R mysql /usr/local/mysql
shell> chown -R root /usr/local/mysql/bin/
shell> bin/safe_mysqld --user=mysql &

DBIMsql-Mysql-modules Perl モジュールをインストールする 場合、bin/mysql_setpermission スクリプトを使用して、新しいユーザを 追加することができます。

ここでさらに詳細な説明を続けます:

バイナリ配布のインストールには、次のステップに従い、それから インストー ル後のセットアップとテストのために 「4.16 インストール後の設定とテスト」節 に進んでくだ さい。

  1. 配下に配布をアンパックしたいディレクトリを選んで、そこに移ってください。 以下の例では、`/usr/local' 配下に配布をアンパックし、MySQL をインストールするディレクトリ `/usr/local/mysql' を生成します。(し たがって、以下の指示は `/usr/local' にファイルを生成するパーミッショ ンを持っているとみなします。ディレクトリがプロテクトされている場合は、 root でインストールを行なう必要があります。)
  2. 配布ファイル 「4.1 MySQL を得る方法」節. にリストされたサイトの一つから得てください。 MySQL バイナリ配布は圧縮された tar.gz アーカイブとして提供 され、`mysql-VERSION-OS.tar.gz' のような名前を持ちます。ここで VERSION は数値(例えば、3.21.15)で、OS は配布が意図 しているオペレーティングシステムの種類を表します(例えば pc-linux-gnu-i586)。
  3. -max がついたバイナリディストリビューションは、バイナリがトランザク ション安全なテーブルとその他の機能をサポートしていることを意味します。 「15.2 mysqld-max, An extended mysqld server」節参照. 全てのバイナリは同じ MySQL ソースディストリビュー ションから構築されていることに注意してください。
  4. mysqld を実行するユーザーとグループを追加します:
    shell> groupadd mysql
    shell> useradd -g mysql mysql
    
    これらのコマンドは mysql グループと mysql ユーザを追加します。 useraddgroupadd 構文は、別の UNIX 上では少し異なるでしょ う。adduseraddgroup と呼ばれることもあります。ユーザとグ ループは mysql の代わりに他の何かにすることもできます。
  5. インストールディレクトリに移動します:
    shell> cd /usr/local
    
  6. 配布をアンパックし、インストールディレクトリを生成してください:
    shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
    shell> ln -s mysql-VERSION-OS mysql
    
    最初のコマンドは `mysql-VERSION-OS' という名前のディレクトリを生成 します。二番目のコマンドはそのディレクトリにシンボリックリンクを作成しま す。これはインストールディレクトリを `/usr/local/mysql' として、よ り簡単に参照させるためです。
  7. インストールディレクトリに移ってください:
    shell> cd mysql
    
    いくつかのファイルとサブディレクトリが mysql ディレクトリ中に見つ けられます。インストール目的の最も重要なものは `bin'`scripts' サブディレクトリです。
    `bin'
    このディレクトリはクライアントプログラムとサーバを含んでいます。シェルが MySQL プログラムを正しく見つけられるように、このディレクトリの フルパス名をあなたの PATH 環境変数に追加すべきです。 「A Environment Variables」節参照.
    `scripts'
    このディレクトリは mysql_install_db スクリプトを含んでいます。こ れはサーバアクセスパーミッションを初期化するために使用されます。
  8. mysqlaccess を使用し、かつ MySQL 配布を非標準の場所に持 ちたい場合は、mysqlaccessmysql クライアントを見つけよ うとする場所を変更する必要があります。`bin/mysqlaccess' スクリプト の 18 行目付近を編集してください。次のような行を探してください:
    $MYSQL     = '/usr/local/bin/mysql';    # path to mysql executable
    
    パスを mysql が実際にシステム上におかれている場所を示すように変更 してください。これを行なわないと、mysqlaccess 実行時に Broken pipe エラーになるでしょう。
  9. MySQL 許可テーブルを作成します (これは初めて MySQL をインストールするときだけ行います):
    shell> scripts/mysql_install_db
    
    3.22.10以前のバージョンの MySQL は、mysql_install_db. 実行時に MySQL を起動していましたが、もはやこれは起動しなくなりました
  10. バイナリのオーナーを root に、 データディレクトリの所有権を mysqld を実行するユーザに変更し てください:
    shell> chown -R root /usr/local/mysql
    shell> chown -R mysql /usr/local/mysql/var
    shell> chgrp -R mysql /usr/local/mysql
    
    最初のコマンドはファイルの owner 属性を root ユーザーに変更し、 2番目のコマンドは ownermysql ユーザに変更し、 3番目のコマンドは group 属性を mysql グループに変更します。
  11. Perl DBI/DBD インタフェースのサポートをインストールしたい 場合、 「4.11 Perl のインストールについて」節 を見てください。
  12. MySQL をマシン起動時に自動的に開始したい場合、 support-files/mysql.server をシステムのスタートアップファイルがある場所にコ ピーしてください。さらなる情報は support-files/mysql.server スクリプト自身 の中と、 「4.16.3 MySQL の自動起動と自動停止」節 に見つけられます。

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

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

shell> bin/safe_mysqld --user=mysql &

15.3 safe_mysqld, the wrapper around mysqld」節参照.

4.16 インストール後の設定とテスト」節参照.

4.6.1 Linux RPM notes

(訳注:もし RedHat 以外の Linux を使用しており、.rpm を、自分が使用している パッケージ管理システムの管理下におきたい場合、alien : http://kitenet.net/programs/alien/ というツールを 使用します。これは RPM(Debian, Slackware) を自分が使用しているパッケージの形式に変換してくれます。 )

RPM を使用して MySQL をインストールすることを推奨します。 MySQL RPMS は RedHat 6.2 で作成していますが、 他の rpmglibc をサポートしている Linux でも動作するでしょう。

RPM file での問題, 例えば, ``Sorry, the host 'xxxx' could not be looked up'' に遭遇した場合には → 「4.6.3.1 Linux Notes for Binary Distributions」節.

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

RPM パッケージに含まれるファイルをみるには、以下を実行:

shell> rpm -qpl MySQL-VERSION.i386.rpm

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

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

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

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

RPM はデータを `/var/lib/mysql' に保存します。 RPM は起動時にサーバーを立ちあげるように、`/etc/rc.d/' に登録します。 (以前にインストールがされていて、前にインストールされた MySQL 起 動ファイルを何か変更している場合、それをコピーしておいた方がいいでしょう。 そうすればその変更を失うことはありません。)

RPM ファイルのインストール後は、`mysqld' デーモンが実行されていて、 MySQL の使用を開始することができます。 「4.16 インストール後の設定とテスト」節参照。

うまくいかない場合、バイナリインストールの章でさらに情報を探すことができま す。 「4.6 MySQL バイナリディストリビューションのインストール」節参照。

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

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

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

4.6.3 System 特有の問題

以下のセクションでは特定のシステム上に起こると認められたいくつかの問題のを示します。

4.6.3.1 Linux Notes for Binary Distributions

MySQL は少なくとも Linux バージョン 2.0 を必要とします。

TcX のバイナリリリースは -static でリンクされており、これはあなたのシステムが どのバージョンのライブラリーを使用しているか気にする必要がありません。 よって、LinuxThreads もこの場合必要ありません。 -static でリンクされたプログラムのサイズは ダイナミックリンクされたプログラムより大きくなりますが、少し(3-5%)速くなります。 しかし一つの問題として、このスタティックリンクされたプログラムでは、 ユーザー定義関数(UDF)が使用できないことです。 もし UDF を使用する(書く)場合(C, C++とかで)、自分自身で MySQL を ダイナミックリンクを使用してコンパイルしなくてはなりません。

もし glibc2 ではなく libc ベースのシステムを使用しているなら、 このバイナリリリースではホスト名解決と getpwnam() にいくつか問題が出ます。 (これは glibc がホスト名解決と getpwent() にいくつかの外部ライブラリに 依存しているためで、たとえ -static リンクしても解決しません). この場合、mysql_install_db 実行時に以下のエラーが出るでしょう:

Sorry, the host 'xxxx' could not be looked up

あるいは、--user オプションで mysqld を起動しようとしたとき、 以下のエラーが出る場合:

getpwnam: No such file or directory

この問題は、以下のうちのどれかの方法で解決できます:

Linux-Intel binary と MySQL RPM リリースは、もっとも速くなるように 調整されています。我々はもっとも早く安定したコンパイラーを常に使用しています。

MySQL Perl サポートは Perl 5.004_03 以上のバージョンを必要としま す。

Linux 2.2 バージョンのいくつかでは、TCP/IP 上で mysqld サーバに多く の新しい接続を行なう時に、エラー Resource temporarily unavailable を得ることがあります。

この問題は、Linux では TCP/IP ソケットをクローズする時と、それがシステムに よって実際に解放される間に遅延があるためです。TCP/IP スロットの数は有限な ので、TCP/IP 上で MySQL `test-connect' ベンチマークを実行し た時のように、短い時間にとても多くの新しい TCP/IP 接続が行なわれた場合に上 記エラーが得られます。

我々はこの問題について、異なる Linux メーリングリストで何回かメールを受け ました。しかし、当然、我々はこれを解決することはできません。

この問題の知られている'解決策'は、あなたのクライアント内で永続的な接続を使 用するか、データベースサーバとクライアントが同じマシン上で実行されている場 合にソケットを使用することだけです。我々は、将来、Linux 2.4 カーネ ルでこの問題が解決されることを希望します。

4.6.3.2 HP-UX Notes for Binary Distributions

Some of the binary distributions of MySQL for HP-UX is distributed as an HP depot file and as a tar file. To use the depot file you must be running at least HP-UX 10.x to have access to HP's software depot tools.

The HP version of MySQL was compiled on an HP 9000/8xx server under HP-UX 10.20, and uses MIT-pthreads. It is known to work well under this configuration. MySQL Version 3.22.26 and newer can also be built with HP's native thread package.

Other configurations that may work:

The following configurations almost definitely won't work:

To install the distribution, use one of the commands below, where /path/to/depot is the full path to the depot file:

The depot places binaries and libraries in `/opt/mysql' and data in `/var/opt/mysql'. The depot also creates the appropriate entries in `/etc/init.d' and `/etc/rc2.d' to start the server automatically at boot time. Obviously, this entails being root to install.

To install the HP-UX tar.gz distribution, you must have a copy of GNU tar.

4.7 MySQL ソースディストリビューションのインストール

ソースインストールに取り掛かる前に、最初に我々のバイナリがあなたのプラット フォームに有効で、動作するかどうかをチェックしてください。我々は、我々のバ イナリが可能な限りのオプションで構築されていることを確認するために多くの努 力をしています。

ソースから MySQL を作成しインストールするためには次のツールが必 要です:

-fno-exceptions オプションを解釈する gcc の最近のバージョ ンを使用している場合は、それを使用することがとても重要です。そう でなければ、ランダムにクラッシュするバイナリができあがるでしょう。また、 -fno-exceptions に加え、-felide-contructors-fno-rtti を使用することをお奨めします。 疑いがある時は、次を行なってください:

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static

多くのシステムで、これは速くて安定したバイナリを与えます。

問題が起きたときは、mysql@lists.mysql.com に質問を投稿する時に mysqlbug を常に使用してください。問題がバグでないとして も、mysqlbug はあなたの問題を解決する助けになるであろうシステム情 報を収集します。mysqlbug を使用しないと、あなたの問題の解決を得る 可能性が小さくなります! mysqlbug は、配布のアンパック後に `scripts' ディレクトリ内に見つけられます。 「2.3 バグや問題を報告する方法」節参照.

4.7.1 素早いインストールの概要

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

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

RPM ソースから開始する場合は:

shell> rpm --rebuild MySQL-VERSION.src.rpm

これはインストールできるRPMバイナリを作成します

もし DBIMsql-Mysql-modules Perl モジュールをインストールするなら、 bin/mysql_setpermission スクリプトが使用する新しいユーザーを 追加することができます。

次にさらに詳細な説明を行ないます:

ソース配布のインストールには、次のステップに従い、それから インストール 後の初期化とテストのために 「4.16 インストール後の設定とテスト」節参照 に進んでください。

  1. 配布をアンパックしたいディレクトリを選んで、そこに移ってください。
  2. 配布ファイルを 「4.1 MySQL を得る方法」節. にリストされたサイトの一つから得てください。
  3. MySQL で Berkeley DB テーブルの使用に興味がある場合、Berkeley DB ソースコー ドのパッチバージョンを入手する必要があります。処理の前に Berkeley DB テー ブルの章を読んでください。 「8.5 BDB or Berkeley_DB Tables」節参照. MySQL ソース配布は圧縮された tar アーカイブとして提供さ れ、`mysql-VERSION.tar.gz' のような名前を持ちます。ここで VERSION は 3.23.38 のような番号です。
  4. mysqld を実行するユーザーとグループを追加します:
    shell> groupadd mysql
    shell> useradd -g mysql mysql
    
    これらのコマンドは mysql グループと mysql ユーザを追加します。 useraddgroupadd 構文は、別の UNIX 上では少し異なるでしょ う。adduseraddgroup と呼ばれることもあります。ユーザとグ ループは mysql の代わりに他の何かにすることもできます。
  5. カレントディレクトリに配布をアンパックしてください:
    shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -
    
    このコマンドは `mysql-VERSION' という名前のディレクトリを作成します。
  6. アンパックされた配布のトップレベルディレクトリに移ってください:
    shell> cd mysql-VERSION
    
    注意: 現在のこのトップレベルディレクトリで MySQL の configure と build を行なう必要があります。別のディレクトリでは build できません。
  7. リリースを configure し、全てをコンパイルしてください:
    shell> ./configure --prefix=/usr/local/mysql
    shell> make
    
    configure の実行時、いくつかのオプションを指定できます。オプショ ンの一覧は ./configure --help を実行してください。 「4.7.3 典型的な configure オプション」節, さらに有用なオプションのいくつかに ついて議論しています。 configure が失敗して、援助を得るために mysql@lists.mysql.com にメー ルを送ろうとする場合、`config.log' から問題の解決の手助けにできると 考えられる行を含めてください。configure が異常終了する場合、 configure からの出力の最後の数行も含めてください。バグレポートは mysqlbug スクリプトを使用して投稿してください。 「2.3 バグや問題を報告する方法」節参照。 コンパイルが失敗する場合、いくらかのよくある問題での手助けのため、 「4.9 コンパイルの問題か?」節 を参照してください。
  8. 全てをインストールしてください:
    shell> make install
    
    このコマンドは root として実行する必要があります。
  9. MySQL 権限テーブルを生成してください(以前に MySQL をイ ンストールしていない時にだけ必要です):
    shell> scripts/mysql_install_db
    
    注意: 3.22.10 より古い MySQL バージョンでは、 mysql_install_db 実行時に MySQL サーバが開始されましたが、 これはもはや真ではありません!
  10. バイナリのオーナーを root に、 データディレクトリの所有権を mysqld を実行するユーザに変更し てください:
    shell> chown -R root  /usr/local/mysql
    shell> chown -R mysql /usr/local/mysql/var
    shell> chgrp -R mysql /usr/local/mysql
    
    最初のコマンドはファイルの owner 属性を root ユーザーに変更し、 2番目のコマンドは ownermysql ユーザに変更し、 3番目のコマンドは group 属性を mysql グループに変更します。
  11. Perl DBI/DBD インタフェースのサポートをインストールしたい 場合、 「4.11 Perl のインストールについて」節 を見てください。
  12. MySQL をマシン起動時に自動的に開始したい場合、 support-files/mysql.server をシステムのスタートアップファイルがあ る場所にコピーしてください。さらなる情報は support-files/mysql.server スクリプト自身の中と、 「4.16.3 MySQL の自動起動と自動停止」節 に見つけられます。

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

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

コマンドがすぐに mysqld daemon ended エラーで失敗する場合、 `mysql-data-directory/'hostname'.err' ファイルになんらかの情報を 見つけることができます。 よくあることとして、すでに他の mysqld が 走っている場合などがあります。 「22.3 同一マシン上に複数の MySQL サーバーを走らせる」節参照.

4.16 インストール後の設定とテスト」節参照。

4.7.2 パッチの適用

時々、パッチは、メーリング・リストに流されたり、または MySQL FTPサイトの パッチエリア に置かれます。

メーリング・リストからのパッチを適用するには、パッチが載っているメッセージを ファイルに保存して、あなたの MySQL ソース・ツリーの 一番上のディレクトリーに移動し、以下のようにコマンドを実行します:

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

FTPサイトに置かれるパッチは、プレーンテキストファイルとして、 あるいは gzip で圧縮されたファイルとして頒布されます。 プレーンテキストのパッチの場合は、上に示したメーリングリストの パッチと同様に適用します。 圧縮されたパッチを適用するには、 MySQL ソース・ツリーの 一番上のディレクトリーに移動し、以下のようにコマンドを実行します:

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

それから通常のソースインストールの指示を ./configure ステップから 始めます。make install ステップ実行後、あなたの MySQL サー バを再起動します。

make install を実行する前に、現在走っているサーバーを止める必要があるかもしれません。 ( mysqladmin shutdown で止めます ) いくつかのシステムでは、現在実行しているものを止めない限り、 新しいバージョンをインストールできないようになっています。

4.7.3 典型的な configure オプション

configure スクリプトは MySQL 配布をどのようにコンフィグ するかを制御するための多くの処理を提供します。典型的には、 configure コマンドラインにオプションを使用してこれを行ないます。 いくつかの環境変数を使用しても configure に影響を与えることができ ます。 「A Environment Variables」節参照. configure がサポートするオプションの一覧は、次のコマンドを 実行してください:

shell> ./configure --help

良く使われる configure オプションのいくつか以下に説明します:

4.8 開発ソースツリーからのインストール

警告: 我々の新しいテストコードについて我々を手助けすることに興味 がある場合にだけ、この節を読むべきです。MySQL を得て、あなたのシ ステム上で実行したいだけの場合は、ソースディストリビューションかバイナリディ ストリビューションのどちらかを使用すべきです。

以下は、我々のもっとも新しい開発ソースツリーを得る手順です:

  1. Download BitKeeper from http://www.bitmover.com/cgi-bin/download.cgi. You will need Bitkeeper 2.0 or newer to access our repository.
  2. Follow the instructions to install it.
  3. Once BitKeeper is installed, if you want to clone 3.23 branch, bk clone bk://work.mysql.com:7000 mysql, and bk clone bk://work.mysql.com:7001 mysql-4.0 for 4.0 branch. The initial download may take a while, depending on the speed of your connection.
  4. You will need GNU autoconf, automake, libtool, and m4 to do the next stage. If you get some strange error during the first stage, check that you really have libtool installed!
    cd mysql
    bk -r edit
    aclocal; autoheader; autoconf;  automake;
    ./configure  # Add your favorite options here
    make
    
    We have a collection of our standard configure scripts in the `BUILD/' subdirectory. If you are lazy, you can use `BUILD/compile-pentium-debug'. It will actually work on a lot of non-x86 machines despite its name.
  5. Once the build is done, make install. Be careful with this on a production machine - this may overwrite your live release binary. We recommend that if you have another installation of MySQL that you ./configure with different values for prefix, tcp-port, and unix-socket-path.
  6. Play hard with your new installation and try to make the new features crash. Start by running make test. 「26.2 MySQL Test Suite」節参照.
  7. If you have gotten to the make stage and it does not compile, please report it to bugs@lists.mysql.com. If you have installed the latest version of the required GNU tools, and they crash trying to process our configuration files, please report it also. However, if you execute aclocal and get command not found, or a similar problem, do not report it, make sure all the needed tools are installed and your PATH variable is set correctly.
  8. After the initial bk clone, do bk pull to get the updates.
  9. You can examine change history of the tree with all the diffs with bk sccstool. If you see some funny diffs or code that you have a question about, do not hesitate and e-mail internals@lists.mysql.com. Also if you think you have a better idea on how to do something, send an email to the same place with a patch. bk diffs will produce a patch for you after you have made changes to the source. If you do not have the time to code your idea, just send a description.
  10. BitKeeper has a nice help utility that you can access via bk helptool.

4.9 コンパイルの問題か?

Solaris 上で gcc を使用した場合、一切警告無く全ての MySQL プログラムがきれいに作れます。 他のシステムではインクルードファイルの違いから警告が出るかもしれません。 MIT-pthreads を使用した際の警告は 「4.10 MIT-pthreads に関して」節 を参照してください。 他の問題は、以下をチェックしてください。

多くの問題の解決のために、再 configure が必要です。 あなたが再構成する必要があるならば、以下に気をつけてください:

古いコンフィグやオブジェクトファイルの使用を防ぐため、 configure 前に以下のコマンドを実行してください:

shell> rm config.cache
shell> make clean

こうするかわりに、make distclean としても構いません。

以下に、 MySQL をコンパイルする際に起こりやすい問題をあげておきます:

4.10 MIT-pthreads に関して

このセクションではMIT-pthreadsを使っているさいに起こる問題についていくつか述べて います。

Linux では、MIT-pthreads を使用してはならず、 LinuxThreads をインストールするべきです! 「4.12.5 Linux Notes (All Linux Versions)」節参照.

もしあなたのシステムが本来のスレッドのサポートを提供しなければ、あなたは、 MIT-pthreadsパッケージを使って、MySQL を構築する必要があります。 これにはほとんどのFreeBSDシステム、SunOS4.x,Solaris 2.4とそれ以前、ほかいくつか が含まれます。 「4.2 MySQL がサポートする OS」節参照.

4.11 Perl のインストールについて

4.11.1 UNIX への Perl のインストール

MySQL は Perl DBI/DBD インターフェースをサポートします。 「24.2 MySQL Perl API」節参照. DBI/DBD インターフェースの Perl のクライアントは、Perl バージョン 5.004 以上が必要です。 これより古いバージョンの Perl ですと動きません

MySQL Perl は、 MySQL クライアント・プログラミング・サポートが 既にインストールされていることが条件です。 もしあなたが RPM ファイルから MySQL をインストールしたのなら、 クライアント・プログラムは、クライアント RPM にあります。 が、 クライアント・プログラミング・サポートは、開発者向け RPM にあります。 開発者向け RPM をインストールしたことを確かめて下さい。

これらは バージョン 3.22.8 から MySQL 配布とは分けられて配布されています。 もし Perl モジュールをインストールしたいなら、 http://www.mysql.com/Downloads/Contrib を確認してください。ここにおかれています。

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

Data-Dumper, DBI, Msql-Mysql-modules が必要です。 これを取ってきたら、以下のようにしてインストールします。 Data-Dumper モジュールを例にしますが、他も同様にできます。

  1. 配布物をカレントディレクトリに展開:
    shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
    
    これは `Data-Dumper-VERSION' というディレクトリを作ります。
  2. 展開したディレクトリに入ります:
    shell> cd Data-Dumper-VERSION
    
  3. コンパイル、インストール:
    shell> perl Makefile.PL
    shell> make
    shell> make test
    shell> make install
    

モジュールが動作するかを確かめるので make test コマンドは重要です。 インターフェースコードのテストのために Msql-Mysql-modules の インストール中にこれらのコマンドを実行する際には、 MySQL サーバーが稼働していなければなりません。 でなければ、テストは失敗します。

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

もし Perl module を正しくシステムディレクトリーやローカルのPerlディレクトリ にインストールできない場合、以下の文献が役立ちます:

http://www.iserver.com/support/contrib/perl5/modules.html

このページの以下を参照してください: Installing New Modules that Require Locally Installed Modules.

4.11.2 Windows への ActiveState Perl のインストール

Windows 上に、 ActiveState Perl に MySQL DBD モジュールを インストールするには、以下のようにしなくてはなりません:

上記は少なくとも ActiveState Perl Version 5.6 で動作します。

もし上記のように出来なければ、代わりに MyODBC ドライバーを入れ、 MySQL サーバーに ODBC 経由で接続しなくてはなりません。

use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") || 
  die "Got error $DBI::errstr when connecting to $dsn\n";

4.11.3 Windows への MySQL Perl 配布物のインストール

MySQL Perl 配布は DBI, DBD:MySQL , DBD:ODBC を含みます。

4.11.4 Perl DBI/DBD 使用時の問題

もし Perl が ../mysql/mysql.so モジュールが見つからないとメッセージを出した場合、 シェアードライブラリ `libmysqlclient.so' を取りこめなかったと考えられます。

以下のような方法で解決方法があります:

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

テスト実行時に、Msql-Mysql-modules から次のようなエラーが出る場合:

t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: uncompress at /usr/lib/perl5/5.00503/i586-linux/DynaLoader.pm line 169.

圧縮ライブラリ -lz をリンク行に含める必要があることを意味します。これは Msql-Mysql-modules ディレクトリ内の `lib/DBD/mysql/Install.pm' ファイルの 行を変更することで可能です:

$sysliblist .= " -lm";
  ↓
$sysliblist .= " -lm -lz";

この後、'make realclean' を実行して、最初からインストールを続ける必要が あります。

ダイナミックリンクをサポートしていないシステム(like SCO)でPerlモジュールを使用したい場合、 DBIDBD-mysql を含むスタティックのPerlを作る事もできます。 これは、まず、 DBI コードがリンクされているPerlを作って現在のPerlの上にインストールします。 そして、 DBD コードをさらにリンクさせるPerlを作り、それをインストールします。

SCOでは、環境変数を以下のようにしなくてはなりません:

shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib
or
shell> LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
shell> LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib
shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:/usr/skunk/man:

最初、DBI をスタティックリンクしたPerlを作るために、 `perl/DBI' ディレクトリで以下のように実行します:

shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl

この後、あなたは新しいPerlをインストールしなければなりません。 make perl をすると、インストール操作に実行するに必要な make コマンドを 表示します。 SCOでは、make -f Makefile.aperl inst_perl MAP_TARGET=perl とします。

次に、DBD::mysql をスタティックリンクしたPerlを作るために、 `perl/Mysql-modules' ディレクトリで以下のように実行します:

shell> perl Makefile.PL -static -config
shell> make
shell> make install
shell> make perl

これも新しいPerlをインストールしなくてはなりません。 make perl の出力は使用するコマンドを示します。

4.12 System-specific Issues

以下のセクションは、ソース配布から MySQL をインストールする際に 特定のシステム上に起こると認められた問題のいくつかを示します.

4.12.1 Solaris Notes

Solaris では MySQL ソースを展開するときトラブルが出るでしょう! Solaris の tar は長い名前を扱えず、 MySQL を展開する場合、 以下のようなエラーになります:

x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks
tar: directory checksum error

この場合、GNU tar (gtar) を展開に使用してください。 コンパイルずみのものが以下にあります: http://www.mysql.com/Downloads/.

Sun ネイティブスレッドは Solaris 2.5 以上で動きます。 バージョン 2.4 以下の場合、MySQL は時動的に MIT-pthreads を使用します 「4.10 MIT-pthreads に関して」節参照.

もし、configure 時に、以下のエラーが出たなら:

checking for restartable system calls... configure: error can not run test
programs while cross compiling

これはコンパイラーのインストールでなにかを間違っています! この場合、あなたは、より新しいバージョンへコンパイラーをアップグレードすべきです。 以下の行を config.cache ファイルに追加することによって、 この問題を解決してもかまいません:

ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}

もしあなたが SPARC の Solaris を使用しているなら、 gcc 2.95.2 を推奨します。 これは ttp://gcc.gnu.org/. で見つけれます。 egs 1.1.1 と gcc 2.8.1 は SPARC 上では完全に動作しないことに注意!

gcc 2.95.2 を使用した、推奨する configure は:

CC=gcc CFLAGS="-O3" \
CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --with-low-memory --enable-assembler

Ultra SPARC を使用する場合、"-mcpu=v8 -Wa,-xarch=v8plusa" を CFLAGS と CXXFLAGS に追加することで、さらに 4% の性能を得られます。

もし Sun Workshop (SunPro) 4.2 (以上)のコンパイラを使用するなら、 configure を以下のようにします:

CC=cc CFLAGS="-Xa -fast -xO4 -native -xstrconst -mt" \
CXX=CC CXXFLAGS="-noex -xO4 -mt" \
./configure --prefix=/usr/local/mysql --enable-assembler

configure スクリプトの次の行を:

#if !defined(__STDC__) || __STDC__ != 1

以下に変えます:

#if !defined(__STDC__)

もし -Xc オプションで __STDC__ を有効にした場合、 Sun compiler は Solaris の `pthread.h' ヘッダーファイルを使用して コンパイルすることができません。 これはサンのバグです(インクルードファイルかコンパイラーのバグ)

もし mysqld を起動時に以下のエラーが出た場合、 マルチスレッドを外して(オプション -mt を指定) Sun compiler を使って MySQL をコンパイルし直してください:

libc internal error: _rmutex_unlock: rmutex not held

-mtCFLAGSCXXFLAGS に加えます。

gccMySQL をコンパイルするときに以下のエラーが出た場合、 これは gcc があなたの Solaris のバージョン用に調整されていません!

shell> gcc -O3 -g -O2 -DDBUG_OFF  -o thr_alarm ...
./thr_alarm.c: In function `signal_hand':
./thr_alarm.c:556: too many arguments to function `sigwait'

この場合、新しい gcc でコンパイルします! 少なくとも Solaris 2.5 では、ほとんどの gcc のバイナリのバージョンが古く、 スレッドを使用するプログラムにはこのインクルードファイルは使えません!

Solaris は スタテックリンクのシステムライブラリーを用意していません (libpthreads and libdl)。 そのため、--static オプションで MySQL をコンパイルできません。 もしこれを試みた場合、以下のエラーになります:

ld: fatal: library -ldl: not found

もし多くのプロセスが速く mysqld に接続を試みた場合、 MySQL ログに以下のようにエラーが出ます:

Error in accept: Protocol error

サーバーを --set-variable back_log=50 オプションで起動すれば、この問題に対処できるでしょう。 「4.16.4 mysqld コマンド行オプション」節参照.

もし自分の MySQL クライアントプログラムをリンクして 実行時に以下のようにエラーが出た場合:

ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory

これは以下のどれかで回避できます:

*
以下のフラグでクライアントをリンクします(-Lpath の代わりに): -Wl,r/full-path-to-libmysqlclient.so
*
libmysqclient.so`/usr/lib' にコピーします
*
LD_RUN_PATH 環境変数を `libmysqlclient.so' が存在するところに セットした後、クライアントを実行します。

--with-libwrap configure オプション使用時、libwrap.a が必 要とするライブラリも含める必要があります:

--with-libwrap="/opt/NUtcpwrapper-7.6/lib/libwrap.a -lnsl -lsocket

configure や MySQL-lz のリンクを試み、あなたがそれを インストールしていないという問題がある場合は、2つの選択肢があります:

gcc を使用していて、UDF 関数を MySQL にロードする際に問題 がある場合、-lgccUDF 関数のリンク行に追加してみてくだ さい。

MySQL を自動的に開始させたい場合、 `support-files/mysql.server'`/etc/init.d' にコピーし、 /etc/rc3.d/S99mysql.server という名前でシンボリックリンクを生成し てください。

4.12.2 Solaris 2.7/2.8 Notes

通常、Solaris 2.6 のバイナリは Solaris 7 , 8 で使用できます。 ほとんどの Solaris 2.6 の問題も Solaris 7 , 8 に適用できます。

注意: MySQL Version 3.23.4 以上では、新しいバージョンの Solaris を自動 検出し、以下の問題についての回避策を有効にします!

Solaris 7 , 8 は、インクルードファイルにいくつかバグがあります。 gcc で以下のようなエラーが出た場合:

/usr/include/widec.h:42: warning: `getwc' redefined
/usr/include/wchar.h:326: warning: this is the location of the previous
definition

以下のようにして回避します:

/usr/include/widec.h.../lib/gcc-lib/os/gcc-version/include にコピー 41 行目を変更:

変更前:

#if     !defined(lint) && !defined(__lint)

変更後:

#if     !defined(lint) && !defined(__lint) && !defined(getwc)

代わりに、`/usr/include/widec.h' を直接変更してもかまいません。 どちらの方法にしても、ファイルを修正後は、`config.cache' を 消して configure を再実行しなくてはなりません!

make 実行時に以下のようなエラーになった場合、configure`curses.h' ファイルを検出できていません (これは /usr/include/widec.h の エラーのためにおきます):

In file included from mysql.cc:50:
/usr/include/term.h:1060: syntax error before `,'
/usr/include/term.h:1081: syntax error before `;'

これを解決するには、以下のうち一つを行います:

クライアントプログラムのリンク時に、リンカが -lz を見つけられない という問題が発生した場合、問題はおそらく `libz.so' ファイルが `/usr/local/lib' にインストールされたことです。次の方法の一つでこれ を修正できます:

4.12.3 Solaris x86 Notes

gccegcs を Solaris x86 で使用した場合、load 時にコアダンプする場合、 以下のように configure します:

CC=gcc CFLAGS="-O3 -fomit-frame-pointer -DHAVE_CURSES_H" \
CXX=gcc \
CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -DHAVE_CURSES_H" \
./configure --prefix=/usr/local/mysql

これは libstdc++ ライブラリーと C++ の問題を回避します。

もしこれが該当しない場合、デバッグモードでコンパイルして デバッグのトレースファイルを書き出すようにして起動するか、 gdb を使用して起動してください。 「I.1 MySQL server のデバッグ」節参照.

4.12.4 SunOS 4 Notes

SunOS 4 では MIT-pthreads が必要です。 このために、 GNU makeMySQL のコンパイルに必要になります。

いくつかの SunOS 4 では dynamic libraries と libtool に問題があります。 これを避けるために、以下のようにして configure します:

shell> ./configure --disable-shared --with-mysqld-ldflags=-all-static

readline のコンパイル時、二重定義のワーニングが出ますが、 これは無視して構いません。

mysqld をコンパイルする時、 いくつか implicit declaration of function ワーニングがでますが、 無視して構いません。

4.12.5 Linux Notes (All Linux Versions)

以下の注意は、glibc に関して、MySQL をあなた自身で作成す るシチュエーションだけに適用されます。Linux を x86 マシンで実行する場合、 多くの場合は我々のバイナリを使用した方が良いです。我々は glibc の 最良パッチバージョンと我々のバイナリをリンクします。我々は最良のコンパイラ オプションでそれを作成し、高負荷サーバについて適切になるように試みています。 以下のテキストを読んで、何をあなたがやるべきかについて迷った時は、あなたの 必要にかなうかどうかをみるために、我々のバイナリをまず試してください。そし て、我々のバイナリが十分でないとわかった後にだけ、あなた自身の作成について 考えてください。この場合、それについての評価します。そのため、次回にはより 良いバイナリを作成できます。典型的なユーザについて、そして、多くの同時接続 と 2GB 制限を超えるテーブルを設定する場合でも、多くの場合、我々のバイナリ は最良の選択です。

Linux では MySQL は LinuxThreads を使用します。 もし glibc2 を持たない古い Linux を使用している場合、 MySQL のコンパイルの前に、 LinuxThreads をインストールしなければなりません。 LinuxThreads は http://www.mysql.com/Downloads/Linux から得ることが できます。

注意: 2.1.1 以前の glibc バージョンは pthread_mutex_timedwait 処理中に致命的なバグがあります。これは INSERT DELAYED を行なう時に使用されます。glibc をアップグレードする 前に INSERT DELAYED は使用しないようにお奨めします。INSERT DELAYED を使用する場合、次のパッチを glibc ライブラリに追加しなけ ればなりません: http://www.mysql.com/Downloads/Patches/glibc-pthread_cond_timedwait.patch. MySQL 3.23.7 と MySQL 3.22.32 はこのバグの一時的な回避 を含んでいます。

1000以上の同時接続を使用する予定であれば、LinuxThreads にいくつかの変更 をして、再コンパイルし、MySQL を新しい `libpthread.a' を使用するように再リ ンクする必要があります。`sysdeps/unix/sysv/linux/bits/local_lim.h' 内の PTHREAD_THREADS_MAX を 4096 に増加し、 `linuxthreads/internals.h' 中の STACK_SIZE を 256 KB に減少させてください。注意: STACK_SIZE がデフォルトの 2MB である 場合、MySQL は 600-1000 程度の接続で安定でなくなります。

The STACK_SIZE constant in LinuxThreads controls the spacing of thread stacks in the address space. It needs to be large enough so that there will be plenty of room for the stack of each individual thread, but small enough to keep the stack of some thread from running into the global mysqld data. Unfortunately, the Linux implementation of mmap(), as we have experimentally discovered, will successfully unmap an already mapped region if you ask it to map out an address already in use, zeroing out the data on the entire page, instead of returning an error. So, the safety of mysqld or any other threaded application depends on the "gentleman" behaviour of the code that creates threads. The user must take measures to make sure the number of running threads at any time is sufficiently low for thread stacks to stay away from the global heap. With mysqld, you should enforce this "gentleman" behaviour by setting a reasonable value for the max_connections variable.

If you build MySQL yourself and do not what to mess with patching LinuxThreads, you should set max_connections to a value no higher than 500. It should be even less if you have a large key buffer, large heap tables, or some other things that make mysqld allocate a lot of memory or if you are running a 2.2 kernel with a 2GB patch. If you are using our binary or RPM version 3.23.25 or later, you can safely set max_connections at 1500, assuming no large key buffer or heap tables with lots of data. The more you reduce STACK_SIZE in LinuxThreads the more threads you can safely create. We recommend the values between 128K and 256K.

多くの同時接続を使用したい場合は、fork 爆弾攻撃を避けようとして、子供の fork や複製について、プロセスにペナルティを課すという、バージョン 2.2 カー ネルの "機能" に悩まされるでしょう。これにより、あなたが並行クライアントの 数を増加するようには、MySQL がスケールしません。シングル CPU システムでは、 とても遅いスレッド生成で明らかにこれが見られます。これは、MySQL への接続に 長い時間(1分程度)が掛かり、それを切断するのにも長い時間掛かるということを 意味します。複数 CPU システムでは、クライアント数の増加に従って、クエリ速 度が徐々に落ちていくのが観測されました。問題の解決を見つけようとする処理の 中で、我々のユーザからカーネルパッチを受け取りました。我々はいくつかの限定 されたテストで、このパッチが MySQL のスケーラビリティを非常に改善した結果 を得ました。このパッチはここにあります (http://www.mysql.com/Downloads/Patches/linux-fork.patch). We have now done rather extensive testing of this patch on both development and production systems. It has significantly improved MySQL performance without causing any problems and we now recommend it to our users who are still running high-load servers on 2.2 kernels. This issue has been fixed in the 2.4 kernel, so if you are not satisfied with the current performance of your system, rather than patching your 2.2 kernel, it might be easier to just upgrade to 2.4, which will also give you a nice SMP boost in addition to fixing this fairness bug.

我々は 2 CPU マシン上の Linux カーネルバージョン 2.4 で MySQL をテストし ました。そしてこの上では MySQL はとても良くスケールします! - there was virtually no slowdown on query throughput all the way up to 1000 clients, and MySQL scaling factor ( computed as the ratio of maximum throughput to the throughput with one client) was 180%. We have observed similar results on a 4-CPU system - virtually no slowdown as the number of clients was increased up to 1000, and 300% scaling factor. So for a high-load SMP server we would definitely recommend the 2.4 kernel at this point. We have discovered that it is essential to run mysqld process with the highest possible priority on the 2.4 kernel to achieve maximum performance. This can be done by adding renice -20 $$ command to safe_mysqld. In our testing on a 4-CPU machine, increasing the priority gave 60% increase in throughput with 400 clients.

We are currently also trying to collect more info on how well MySQL performs on 2.4 kernel on 4-way and 8-way systems. If you have access such a system and have done some benchmarks, please send a mail to docs@mysql.com with the results - we will include them in the manual.

There is another issue that greatly hurts MySQL performance, especially on SMP systems. The implementation of mutex in LinuxThreads in glibc-2.1 is very bad for programs with many threads that only hold the mutex for a short time. On an SMP system, ironic as it is, if you link MySQL against unmodified LinuxThreads, removing processors from the machine improves MySQL performance in many cases. We have made a patch available for glibc 2.1.3, linuxthreads-2.1-patch to correct this behaviour.

With glibc-2.2.2 MySQL version 3.23.36 will use the adaptive mutex, which is much better than even the patched one in glibc-2.1.3. Be warned, however, that under some conditions, the current mutex code in glibc-2.2.2 overspins, which hurts MySQL performance. The chance of this condition can be reduced by renicing mysqld process to the highest priority. We have also been able to correct the overspin behaviour with a patch, available here. It combines the correction of overspin, maximum number of threads, and stack spacing all in one. You will need to apply it in the linuxthreads directory with patch -p0 </tmp/linuxthreads-2.2.2.patch. We hope it will be included in some form in to the future releases of glibc-2.2. In any case, if you link against glibc-2.2.2 you still need to correct STACK_SIZE and PTHREAD_THREADS_MAX. We hope that the defaults will be corrected to some more acceptable values for high-load MySQL setup in the future, so that your own build can be reduced to ./configure; make; make install.

We recommend that you use the above patches to build a special static version of libpthread.a and use it only for statically linking against MySQL. We know that the patches are safe for MySQL and significantly improve its performance, but we cannot say anything about other applications. If you link other applications against the patched version of the library, or build a patched shared version and install it on your system, you are doing it at your own risk with regard to other applications that depend on LinuxThreads.

If you experience any strange problems during the installation of MySQL, or with some common utilties hanging, it is very likely that they are either library or compiler related. If this is the case, using our binary will resolve them. 一つ知られている問題として、バイナリ配布を libc5 の古い Linux システム (RedHat 4.x , Slackware 3.6 以下, Debian 1.3 bo 以下など) で使用すると、ホスト名解決の致命的なエラーが出ます. 「4.6.3.1 Linux Notes for Binary Distributions」節参照.

myisamchklibc.so.5.3.12 で使用するとハングります. 最新の libc にアップグレードしてください。

LinuxThreads を使用している場合、最低3つのプロセスが走ります。 これらは実スレッドで、一つは LinuxThreads マネージャーのために、 一つは接続のハンドルに、もうひとつはアラームとシグナルのハンドルです。

注意: linux カーネルと linuxthread ライブラリはデフォルトでは 1024 スレッ ドだけ持つことができます。これはパッチを適用していないシステム上では MySQL への接続は最大 1021 だけであるということを意味します。ページ http://www.volano.com/linuxnotes.html はこの制限をどのように回避 するかの情報が含まれています。

もし mysqld デーモンプロセスが ps などでみると死んでいるようであれば, 通常これは MySQL バグか、壊れたテーブルを持っています。 「21.1.1 MySQL がクラッシュする場合に行うこと」節参照.

Linux 上で、mysqld が SIGSEGV シグナルで死んだ時にコアダンプを得たい場合、 --core-file オプションを付けて mysqld を起動できます。注意: ulimit -c 1000000safe_mysqld に追加するか --core-file-sizes=1000000 をつけて safe_mysqld を起動して、 core file size を増加する必要があります。 「15.3 safe_mysqld, the wrapper around mysqld」節参照。

もし MySQL クライアントをリンクしようとして以下のエラーになった場合:

ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory

以下の方法で解決できます:

富士通コンパイラ (fcc / FCC) を使用している場合、MySQL のコンパイルにいくつかの問題があります。Linux ヘッダファイルはとても gcc 指向であるためです。

次の configure 行は fcc/FCC で動作します:

CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=const -DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib  -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO '-D_EXTERN_INLINE=static __inline'" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-low-memory

4.12.5.1 Linux-x86 Notes

MySQLlibc 5.4.12 以上が必要です。libc 5.4.46 で動作します。 glibc 2.0.6 以上でも動作します。 glibc の RPM にはいくつか問題があり、アップデートをチェックしてください。 glibc 2.0.7-19 と 2.0.7-29 RPM で動作します。

古い Linux 配布物では、configure 時に以下のようなエラーが出るかもしれません:

Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file.
See the Installation chapter in the Reference Manual.

これは _P マクロが一つのアンダースコアしか持っていないためで、 このエラーメッセージに示されたように対処してください。

以下のようなワーニングは無視して構いません:

mysqld.cc -o objs-thread/mysqld.o
mysqld.cc: In function `void init_signals()':
mysqld.cc:315: warning: assignment of negative value `-1' to `long unsigned int'
mysqld.cc: In function `void * signal_hand(void *)':
mysqld.cc:346: warning: assignment of negative value `-1' to `long unsigned int'

Debian GNU/Linux では、MySQL をマシンの起動時に立ちあげるためには、 以下のようにします:

shell> cp support-files/mysql.server /etc/init.d/mysql
shell> /usr/sbin/update-rc.d mysql defaults 99

mysql.server スクリプトは MySQL をインストールした先の `share/mysql' directory にあります。 あるいは、 MySQL のソースの中の `support-files' ディレクトリにあります。

mysqld がつねにスタート時にコアをはく場合、 古い `/lib/libc.a' を使用しているかもしれません。 `sql/mysqld' を消去して、新しく make install してみてください。 これはいくつかの Slackware で報告された現象です。 RedHat 5.0 は glibc のバージョンによって問題が発生します。 「4.12.5.2 RedHat Version 5.0 Notes」節参照.

もし mysqld をリンクする場合に以下のようなエラーが出た場合、 `libg++.a' が正しくインストールされていません:

/usr/lib/libc.a(putc.o): In function `_IO_putc':
putc.o(.text+0x0): multiple definition of `_IO_putc'

`libg++.a' の使用を避けるには、 configure を以下のようにします:

shell> CXX=gcc ./configure

4.12.5.2 RedHat Version 5.0 Notes

もし RedHat で MySQL に問題がある場合、まず glibc のバージョンを新しいものにあげてください!

RedHat のオフィシャルパッチ(including glibc-2.0.7-19 and glibc-devel-2.0.7-19) をインストールしているなら、 MySQL は問題なく動くはずです!

glibc 2.0.5 には pthread_key_create 変数を解放する部分にバグがあり、 アップデートが必要です。glibc 2.0.5 を使用する場合、 スタティックリンクされて作成された MySQL バイナリ配布物を使用すべきです。 ソースからコンパイルしたい場合、 http://www.mysql.com/Downloads/Linux にある LinuxThreads の修正版をインストールするか、 あるいは glibc をバージョンアップしなくてはなりません。

もし glibc または LinuxThreads のバージョンが問題のあるものだと、 mysqld はコネクションの度にクラッシュします。 例えば、mysqladmin versionmysqld を完全にクラッシュします!

また、問題のあるライブラリーを使用していると、 mysqld は起動時にクラッシュします。 いくつかの Linux systems では、以下のようにして configure でこれを避けることができます:

shell> ./configure --with-mysqld-ldflags=-all-static

RedHat Version 5.0 では、glibc 2.0.7-19 RPM を簡単にインストールできますので、 インストール後、--with-mysqld-ldflags=-all-static なしで configure できます。

glibc 2.0.7 のソースに対するパッチは

http://www.mysql.com/Downloads/Linux/glibc-2.0.7-total-patch.tar.gz

にあります。 このパッチは MySQL がテストされたパッチで、簡単に適用できます。

もし MySQL 構築時にクラッシュする場合、新しい MySQL の バイナリをダウンロードしてみてください。これはスタティックリンクで作成されており、 ライブラリーの衝突を避けることができ、全ての Linux で動くはずです!

MySQL はデバッグのためトレースファイルに情報を書き出すことができます。 これは問題を解決するためにヒントになる情報を多く出力します。 「I.1 MySQL server のデバッグ」節参照.

4.12.5.3 RedHat Version 5.1 notes

RedHat 5.1 の glibc (glibc 2.0.7-13) はメモリーリークします。 glibc を 2.0.7-19 にアップグレードしなくてはなりません。 あるいは、バイナリ配布の mysqld を使用するかです。 もしこれを行わなかった場合、メモリー関連の問題が発生します(out of memory, etc.,etc.)。 多くの場合以下のように:

Can't create a new thread (errno 11). If you are not out of available
memory, you can consult the manual for any possible OS dependent bug

glibc 2.0.7-19 にアップグレード後は、MySQL を ダイナミックリンク指定(デフォルト)で configure できます。 が、glibc 2.0.7-19 をソースからインストールしない限り、 --with-mysqld-ldflags=-all-static オプションは configure使用できません

glibc のバージョンは rpm -q glibc で確認できます。

上記エラーの他の原因は、Linux カーネルをコンフィグしたのよりも多くのスレッ ドを使用しようとした場合です。この場合、`include/linux/tasks.h' 内 の制限を上げて、カーネルを再コンパイルすべきです!

4.12.5.4 Linux-SPARC Notes

いくつかの埋め込み関数, readdir_r() が壊れます。 この顕れとして、SHOW DATABASES が常に空を返します。 これは configure 後、コンパイルする前に、 `config.h' から HAVE_READDIR_R を取り除くことで解決します。

その他いくつかの問題は、あなたの Linux にパッチを当てる必要があります。 パッチは http://www.mysql.com/Downloads/patches/Linux-sparc-2.0.30.diff. にあります。 このパッチは、vger.rutgers.edu にある `sparclinux-2.0.30.tar.gz' 用です。 (これは正式の 2.0.30 とは違います。パッチを正式2.0.30に当てないように) そして LinuxThreads Version 0.6 かそれ以上にしなくてはなりません。

これは jacques@solucorp.qc.ca から寄せられました。

4.12.5.5 Linux-Alpha notes

MySQL Version 3.23.12 が、Linux-Alpha 上で最初にテストされたバージョンです。 もし MySQL を Linux-Alpha 上で使用したいと考えたなら、 このバージョンより新しいものを使用します。

Linux-Alpha での一番大きな問題は、このプラットフォームの glibc に まだいくつか問題があることです。 最新の glibc を得ることから はじめてください。

We have tested MySQL on Alpha with our benchmarks and test suite, and it appears to work nicely. The main thing we haven't yet had time to test is how things works with many concurrent users.

When we compiled the standard MySQL binary we are using SuSE 6.4, kernel 2.2.13-SMP, Compaq C compiler (V6.2-504) and Compaq C++ compiler (V6.3-005) on a Comaq DS20 machine with an Alpha EV6 processor.

You can find the above compilers at http://www.support.compaq.com/alpha-tools). By using these compilers, instead of gcc, we get about 9-14 % better performance with MySQL.

Note that the configure line optimized the binary for the current CPU; This means you can only use our binary if you have an Alpha EV6 processor. We also compile statically to avoid library problems.

CC=ccc CFLAGS="-fast" CXX=cxx CXXFLAGS="-fast -noexceptions -nortti" ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex --enable-thread-safe-client --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared

If you want to use egcs the following configure line worked for us:

CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --disable-shared

Some known problems when running MySQL on Linux-Alpha:

4.12.5.6 MkLinux Notes

MySQL は最新の glibc を使用した MkLinux で動作します。 (glibc 2.0.7 でテストしました).

4.12.5.7 Qube2 Linux Notes

Qube2 (Linux Mips) 上で MySQL を動作させるには、 最新の glibc ライブラリでなくてはなりません (glibc-2.0.7-29C2 は動作することが分かっています)。 そして、 egcs C++ compiler (egcs-1.0.2-9, gcc 2.95.2 以上) を 使用しなくてはなりません。

4.12.5.8 Linux IA64 Notes

To get MySQL to compile on Linux Ia64, we had to do the following (we assume that this will be easier when next gcc version for ia64 is released).

Using gcc-2.9-final:

CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex

After make you will get an error that sql/opt_range.cc will not compile (internal compiler error). To fix this, go to the sql directory and type make again. Copy the compile line, but change -O2 to -O0. The file should now compile.

Now you can do:

cd ..
make
make_install

and mysqld should be ready to run.

4.12.6 Alpha-DEC-UNIX Notes (Tru64)

If you are using egcs 1.1.2 on Digital UNIX, you should upgrade to gcc 2.95.2, as egcs on DEC has some serious bugs!

When compiling threaded programs under Digital UNIX, the documentation recommends the -pthread option for cc and cxx and the libraries -lmach -lexc (in addition to -lpthread). You should run configure something like this:

CC="cc -pthread" CXX="cxx -pthread -O" \
./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"

When compiling mysqld, you may see a couple of warnings like this:

mysqld.cc: In function void handle_connections()':
mysqld.cc:626: passing long unsigned int *' as argument 3 of
accept(int,sockadddr *, int *)'

You can safely ignore these warnings. They occur because configure can't detect warnings, only errors.

If you start the server directly from the command line, you may have problems with it dying when you log out. (When you log out, your outstanding processes receive a SIGHUP signal.) If so, try starting the server like this:

shell> nohup mysqld [options] &

nohup causes the command following it to ignore any SIGHUP signal sent from the terminal. Alternatively, start the server by running safe_mysqld, which invokes mysqld using nohup for you. 「15.3 safe_mysqld, the wrapper around mysqld」節参照.

If you get a problem when compiling mysys/get_opt.c, just remove the line #define _NO_PROTO from the start of that file!

If you are using Compac's CC compiler, the following configure line should work:

CC="cc -pthread"
CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host"
CXX="cxx -pthread"
CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host"
export CC CFLAGS CXX CXXFLAGS
./configure \
--prefix=/usr/local/mysql \
--with-low-memory \
--enable-large-files \
--enable-shared=yes \
--with-named-thread-libs="-lpthread -lmach -lexc -lc"
gnumake

If you get a problem with libtool, when compiling with shared libraries as above, when linking mysql, you should be able to get around this by issuing:

cd mysql
/bin/sh ../libtool --mode=link cxx -pthread  -O3 -DDBUG_OFF \
-O4 -ansi_alias -ansi_args -fast -inline speed \
-speculate all \ -arch host  -DUNDEF_HAVE_GETHOSTBYNAME_R \
-o mysql  mysql.o readline.o sql_string.o completion_hash.o \
../readline/libreadline.a -lcurses \
../libmysql/.libs/libmysqlclient.so  -lm
cd ..
gnumake
gnumake install
scripts/mysql_install_db

4.12.7 Alpha-DEC-OSF1 Notes

If you have problems compiling and have DEC CC and gcc installed, try running configure like this:

CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql

If you get problems with the `c_asm.h' file, you can create and use a 'dummy' `c_asm.h' file with:

touch include/c_asm.h
CC=gcc CFLAGS=-I./include \
CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql

Note that the following problems with the ld program can be fixed by downloading the latest DEC (Compaq) patch kit from: http://ftp.support.compaq.com/public/unix/.

On OSF1 V4.0D and compiler "DEC C V5.6-071 on Digital Unix V4.0 (Rev. 878)" the compiler had some strange behavior (undefined asm symbols). /bin/ld also appears to be broken (problems with _exit undefined errors occuring while linking mysqld). On this system, we have managed to compile MySQL with the following configure line, after replacing /bin/ld with the version from OSF 4.0C:

CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql

With the Digital compiler "C++ V6.1-029", the following should work:

CC=cc -pthread
CFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host
CXX=cxx -pthread
CXXFLAGS=-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all -arch host -noexceptions -nortti
export CC CFLAGS CXX CXXFLAGS
./configure --prefix=/usr/mysql/mysql --with-mysqld-ldflags=-all-static --disable-shared --with-named-thread-libs="-lmach -lexc -lc"

In some versions of OSF1, the alloca() function is broken. Fix this by removing the line in `config.h' that defines 'HAVE_ALLOCA'.

The alloca() function also may have an incorrect prototype in /usr/include/alloca.h. This warning resulting from this can be ignored.

configure will use the following thread libraries automatically: --with-named-thread-libs="-lpthread -lmach -lexc -lc".

When using gcc, you can also try running configure like this:

shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ....

If you have problems with signals (MySQL dies unexpectedly under high load), you may have found an OS bug with threads and signals. In this case you can tell MySQL not to use signals by configuring with:

shell> CFLAGS=-DDONT_USE_THR_ALARM \
       CXXFLAGS=-DDONT_USE_THR_ALARM \
       ./configure ...

This doesn't affect the performance of MySQL, but has the side effect that you can't kill clients that are ``sleeping'' on a connection with mysqladmin kill or mysqladmin shutdown. Instead, the client will die when it issues its next command.

With gcc 2.95.2, you will probably run into the following compile error:

sql_acl.cc:1456: Internal compiler error in `scan_region', at except.c:2566
Please submit a full bug report.

To fix this you should change to the sql directory and do a ``cut and paste'' of the last gcc line, but change -O3 to -O0 (or add -O0 immediately after gcc if you don't have any -O option on your compile line.) After this is done you can just change back to the top-level directly and run make again.

4.12.8 SGI-IRIX notes

If you are using Irix Version 6.5.3 or newer mysqld will only be able to create threads if you run it as a user with CAP_SCHED_MGT privileges (like root) or give the mysqld server this privilege with the following shell command:

shell> chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld

You may have to undefine some things in `config.h' after running configure and before compiling.

In some Irix implementations, the alloca() function is broken. If the mysqld server dies on some SELECT statements, remove the lines from `config.h' that define HAVE_ALLOC and HAVE_ALLOCA_H. If mysqladmin create doesn't work, remove the line from `config.h' that defines HAVE_READDIR_R. You may have to remove the HAVE_TERM_H line as well.

SGI recommends that you install all of the patches on this page as a set: http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html

At the very minimum, you should install the latest kernel rollup, the latest rld rollup, and the latest libc rollup.

You definitely need all the POSIX patches on this page, for pthreads support:

http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html

If you get the something like the following error when compiling `mysql.cc':

"/usr/include/curses.h", line 82: error(1084): invalid combination of type

Type the following in the top-level directory of your MySQL source tree:

shell> extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h
shell> make

There have also been reports of scheduling problems. If only one thread is running, things go slow. Avoid this by starting another client. This may lead to a 2-to-10-fold increase in execution speed thereafter for the other thread. This is a poorly understood problem with Irix threads; you may have to improvise to find solutions until this can be fixed.

If you are compiling with gcc, you can use the following configure command:

CC=gcc CXX=gcc CXXFLAGS=-O3 \
./configure --prefix=/usr/local/mysql --with-thread-safe-client --with-named-thread-libs=-lpthread

4.12.9 FreeBSD Notes

FreeBSD 3.x is recommended for running MySQL since the thread package is much more integrated.

最も簡単にインストールする方法は、http://www.freebsd.org の mysql-server と mysql-client の ports を利用することです。 http://www.freebsd.org.

これは以下のような利点をもたらします:

FreeBSD 2.x 上では MIT-pthreads を、そして Versions 3 以上では、 ネイティブのスレッドを使用してください。 最近のいくつかの 2.2.x ではネイティブのスレッド で動作が可能ですが、 mysqld を 落とすときに問題が起こります。

The MYSQL Makefiles require GNU make (gmake) to work. If you want to compile MYSQL you need to install GNU make first.

名前解決の設定を確実にしておいてください。 でないと、mysqld に接続する際、 名前解決にとても時間がかかり、接続に失敗するでしょう。

確実に `/etc/hosts' ファイルに localhost が登録されているように してください。 (でないと、データベースへの接続で問題が出ます)。 `/etc/hosts' ファイルは、以下の行から始まるべきです:

127.0.0.1       localhost localhost.your.domain

もし configure が MIT-pthread を使用すると分かった場合、 MIT-pthreads notes を読むべきです。 「4.10 MIT-pthreads に関して」節参照.

If you get an error from make install that it can't find `/usr/include/pthreads', configure didn't detect that you need MIT-pthreads. This is fixed by executing these commands:

shell> rm config.cache
shell> ./configure --with-mit-threads

FreeBSD の make の振る舞いは GNU の make と少し違います。 もし make にかかわる問題が出たなら、 GNU make を インストールすべきです。

FreeBSD では、デフォルトのファイルハンドルの上限値がとても少ない 値であることも知られています。 「21.11 File not found」節参照. safe_mysqld 中の ulimit -n のコメントを外すか、/etc/login.conf ファイルで mysqld ユーザーの制限値を増加させます。 (/etc/login.conf の変更の際は cap_mkdb /etc/login.conf で再構築が必要です)。 もしデフォルトを使用したくなければ、このユーザーに password ファイル中で 適切な Class を与えることでも、変更可能になります。(use: chpass mysqld-user-name). 「15.3 safe_mysqld, the wrapper around mysqld」節参照.

もし MySQL が現在時で問題があるなら、 TZ 環境変数を設定しなくてはなりません。 「A Environment Variables」節参照.

安全で安定したシステムを入れるなら、 -STABLE のカーネルだけを 使用してください。

4.12.10 NetBSD notes

To compile on NetBSD you need GNU make. Otherwise the compile will crash when make tries to run lint on C++ files.

4.12.11 OpenBSD Notes

4.12.11.1 OpenBSD 2.5 Notes

On OpenBSD Version 2.5, you can compile MySQL with native threads with the following options:

CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no

4.12.11.2 OpenBSD 2.8 Notes

Our users have reported that OpenBSD 2.8 has a threading bug which causes problems with MySQL. The OpenBSD Developers have fixed the problem, but as of January 25th, 2001, it's only available in the ``-current'' branch. The symptoms of this threading bug are: slow response, high load, high CPU usage, and crashes.

4.12.12 BSD/OS Notes

4.12.12.1 BSD/OS Version 2.x Notes

If you get the following error when compiling MySQL, your ulimit value for virtual memory is too low:

item_func.h: In method `Item_func_ge::Item_func_ge(const Item_func_ge &)':
item_func.h:28: virtual memory exhausted
make[2]: *** [item_func.o] Error 1

Try using ulimit -v 80000 and run make again. If this doesn't work and you are using bash, try switching to csh or sh; some BSDI users have reported problems with bash and ulimit.

If you are using gcc, you may also use have to use the --with-low-memory flag for configure to be able to compile `sql_yacc.cc'.

もし MySQL が現在時で問題があるなら、 TZ 環境変数を設定しなくてはなりません。 「A Environment Variables」節参照.

4.12.12.2 BSD/OS Version 3.x Notes

Upgrade to BSD/OS Version 3.1. If that is not possible, install BSDIpatch M300-038.

Use the following command when configuring MySQL:

shell> env CXX=shlicc++ CC=shlicc2 \
       ./configure \
           --prefix=/usr/local/mysql \
           --localstatedir=/var/mysql \
           --without-perl \
           --with-unix-socket-path=/var/mysql/mysql.sock

The following is also known to work:

shell> env CC=gcc CXX=gcc CXXFLAGS=-O3 \
       ./configure \
           --prefix=/usr/local/mysql \
           --with-unix-socket-path=/var/mysql/mysql.sock

You can change the directory locations if you wish, or just use the defaults by not specifying any locations.

If you have problems with performance under heavy load, try using the --skip-thread-priority option to mysqld! This will run all threads with the same priority; on BSDI Version 3.1, this gives better performance (at least until BSDI fixes their thread scheduler).

If you get the error virtual memory exhausted while compiling, you should try using ulimit -v 80000 and run make again. If this doesn't work and you are using bash, try switching to csh or sh; some BSDI users have reported problems with bash and ulimit.

4.12.12.3 BSD/OS Version 4.x Notes

BSDI Version 4.x has some thread-related bugs. If you want to use MySQL on this, you should install all thread-related patches. At least M400-023 should be installed.

On some BSDI Version 4.x systems, you may get problems with shared libraries. The symptom is that you can't execute any client programs, for example, mysqladmin. In this case you need to reconfigure not to use shared libraries with the --disable-shared option to configure.

Some customers have had problems on BSDI 4.0.1 that the mysqld binary after a while can't open tables. This is because some library/system related bug causes mysqld to change current directory without asking for this!

The fix is to either upgrade to 3.23.34 or after running configure remove the line #define HAVE_REALPATH from config.h before running make.

Note that the above means that you can't symbolic link a database directories to another database directory or symbolic link a table to another database on BSDI! (Making a symbolic link to another disk is ok).

4.12.13 SCO Notes

The current port is tested only on a ``sco3.2v5.0.4'' and ``sco3.2v5.0.5'' system. There has also been a lot of progress on a port to ``sco 3.2v4.2''.

For the moment the recommended compiler on OpenServer is gcc 2.95.2. With this you should be able to compile MySQL with just:

CC=gcc CXX=gcc ./configure ... (options)
  1. For OpenServer 5.0.X you need to use GDS in Skunkware 95 (95q4c). This is necessary because GNU gcc 2.7.2 in Skunkware 97 does not have GNU as. You can also use egcs 1.1.2 or newer http://www.egcs.com/. If you are using egcs 1.1.2 you have to execute the following command:
    shell> cp -p /usr/include/pthread/stdtypes.h /usr/local/lib/gcc-lib/i386-pc-sco3.2v5.0.5/egcs-2.91.66/include/pthread/
    
  2. You need the port of GCC 2.5.x for this product and the Development system. They are required on this version of SCO Unix. You cannot just use the GCC Dev system.
  3. You should get the FSU Pthreads package and install it first. This can be found at http://www.cs.wustl.edu/~schmidt/ACE_wrappers/FSU-threads.tar.gz. You can also get a precompiled package from http://www.mysql.com/Downloads/SCO/FSU-threads-3.5c.tar.gz.
  4. FSU Pthreads can be compiled with SCO Unix 4.2 with tcpip. Or OpenServer 3.0 or Open Desktop 3.0 (OS 3.0 ODT 3.0), with the SCO Development System installed using a good port of GCC 2.5.x ODT or OS 3.0 you will need a good port of GCC 2.5.x There are a lot of problems without a good port. The port for this product requires the SCO Unix Development system. Without it, you are missing the libraries and the linker that is needed.
  5. To build FSU Pthreads on your system, do the following:
    1. Run ./configure in the `threads/src' directory and select the SCO OpenServer option. This command copies `Makefile.SCO5' to `Makefile'.
    2. Run make.
    3. To install in the default `/usr/include' directory, login as root, then cd to the `thread/src' directory, and run make install.
  6. Remember to use GNU make when making MySQL.
  7. If you don't start safe_mysqld as root, you probably will get only the default 110 open files per process. mysqld will write a note about this in the log file.
  8. With SCO 3.2V5.0.5, you should use FSU Pthreads version 3.5c or newer. You should also use gcc 2.95.2 or newer! The following configure command should work:
    shell> ./configure --prefix=/usr/local/mysql --disable-shared
    
  9. With SCO 3.2V4.2, you should use FSU Pthreads version 3.5c or newer. The following configure command should work:
    shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \
           ./configure \
               --with-debug --prefix=/usr/local/mysql \
               --with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \
               --with-named-curses-libs="-lcurses"
    
    You may get some problems with some include files. In this case, you can find new SCO-specific include files at http://www.mysql.com/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz. You should unpack this file in the `include' directory of your MySQL source tree.

SCO development notes:

If you want to install DBI on SCO, you have to edit the `Makefile' in DBI-xxx and each subdirectory.

Note that the following assumes gcc 2.95.2 or newer:

OLD:                                  NEW:
CC = cc                               CC = gcc
CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic
CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =

LD = ld                               LD = gcc -G -fpic
LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib
LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib

LD = ld                               LD = gcc -G -fpic
OPTIMISE = -Od         		      OPTIMISE = -O1

OLD:
CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include

NEW:
CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include

This is because the Perl dynaloader will not load the DBI modules if they were compiled with icc or cc.

Perl works best when compiled with cc.

4.12.14 SCO Unixware Version 7.0 Notes

You must use a version of MySQL at least as recent as Version 3.22.13 because that version fixes some portability problems under Unixware.

We have been able to compile MySQL with the following configure command on Unixware Version 7.0.1:

CC=cc CXX=CC ./configure --prefix=/usr/local/mysql

If you want to use gcc, you must use gcc 2.95.2 or newer.

4.12.15 IBM-AIX notes

Automatic detection of xlC is missing from Autoconf, so a configure command something like this is needed when compiling MySQL (This example uses the IBM compiler):

export CC="xlc_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192 "
export CXX="xlC_r -ma -O3 -qstrict -qoptimize=3 -qmaxmem=8192"
export CFLAGS="-I /usr/local/include"
export LDLFAGS="-L /usr/local/lib"
export CPPFLAGS=$CFLAGS
export CXXFLAGS=$CFLAGS

./configure --prefix=/usr/local \
		--localstatedir=/var/mysql \
		--sysconfdir=/etc/mysql \
		--sbindir='/usr/local/bin' \
		--libexecdir='/usr/local/bin' \
		--enable-thread-safe-client \
		--enable-large-files

Above are the options used to compile the MySQL distribution that can be found at http://www-frec.bull.com/.

If you change the -O3 to -O2 in the above configure line, you must also remove the -qstrict option (this is a limitation in the IBM C compiler).

If you are using gcc or egcs to compile MySQL, you MUST use the -fno-exceptions flag, as the exception handling in gcc/egcs is not thread safe! (This is tested with egcs 1.1.). There are also some known problems with IBM's assembler, which may cause it to generate bad code when used with gcc.

We recommend the following configure line with egcs and gcc 2.95 on AIX:

CC="gcc -pipe -mcpu=power -Wa,-many" \
CXX="gcc -pipe -mcpu=power -Wa,-many" \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \
./configure --prefix=/usr/local/mysql --with-low-memory

The -Wa,-many is necessary for the compile to be successful. IBM is aware of this problem but is in to hurry to fix it because of the workaround available. We don't know if the -fno-exceptions is required with gcc 2.95, but as MySQL doesn't use exceptions and the above option generates faster code, we recommend that you should always use this option with egcs / gcc.

If you get a problem with assembler code try changing the -mcpu=xxx to match your cpu. Typically power2, power, or powerpc may need to be used, alternatively you might need to use 604 or 604e. I'm not positive but I would think using "power" would likely be safe most of the time, even on a power2 machine.

If you don't know what your cpu is then do a "uname -m", this will give you back a string that looks like "000514676700", with a format of xxyyyyyymmss where xx and ss are always 0's, yyyyyy is a unique system id and mm is the id of the CPU Planar. A chart of these values can be found at http://www.rs6000.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm. This will give you a machine type and a machine model you can use to determine what type of cpu you have.

If you have problems with signals (MySQL dies unexpectedly under high load) you may have found an OS bug with threads and signals. In this case you can tell MySQL not to use signals by configuring with:

shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
       CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -DDONT_USE_THR_ALARM" \
       ./configure --prefix=/home/monty --with-debug --with-low-memory

This doesn't affect the performance of MySQL, but has the side effect that you can't kill clients that are ``sleeping'' on a connection with mysqladmin kill or mysqladmin shutdown. Instead, the client will die when it issues its next command.

On some versions of AIX, linking with libbind.a makes getservbyname core dump. This is an AIX bug and should be reported to IBM.

For AIX 4.2.1 and gcc you have to do the following changes.

After configuring, edit `config.h' and `include/my_config.h' and change the line that says

#define HAVE_SNPRINTF 1

to

#undef HAVE_SNPRINTF

And finally, in `mysqld.cc' you need to add a prototype for initgoups.

#ifdef _AIX41
extern "C" int initgroups(const char *,int);
#endif

4.12.16 HP-UX Version 10.20 Notes

There are a couple of small problems when compiling MySQL on HP-UX. We recommend that you use gcc instead of the HP-UX native compiler, because gcc produces better code!

We recommend using gcc 2.95 on HP-UX. Don't use high optimization flags (like -O6) as this may not be safe on HP-UX.

Note that MIT-pthreads can't be compiled with the HP-UX compiler because it can't compile .S (assembler) files.

The following configure line should work:

CFLAGS="-DHPUX -I/opt/dce/include" CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors -fno-exceptions -fno-rtti" CXX=gcc ./configure --with-pthread --with-named-thread-libs='-ldce' --prefix=/usr/local/mysql --disable-shared

If you are compiling gcc 2.95 yourself, you should NOT link it with the DCE libraries (libdce.a or libcma.a) if you want to compile MySQL with MIT-pthreads. If you mix the DCE and MIT-pthreads packages you will get a mysqld to which you cannot connect. Remove the DCE libraries while you compile gcc 2.95!

4.12.17 HP-UX Version 11.x Notes

For HPUX Version 11.x we recommend MySQL Version 3.23.15 or later.

Because of some critical bugs in the standard HPUX libraries, one should install the following patches before trying to run MySQL on HPUX 11.0:

PHKL_22840 Streams cumulative
PHNE_22397 ARPA cumulative

This will solve a problem that one gets EWOULDBLOCK from recv() and EBADF from accept() in threaded applications.

If you are using gcc 2.95.1 on an unpatched HPUX 11.x system, you will get the error:

In file included from /usr/include/unistd.h:11,
                 from ../include/global.h:125,
                 from mysql_priv.h:15,
                 from item.cc:19:
/usr/include/sys/unistd.h:184: declaration of C function ...
/usr/include/sys/pthread.h:440: previous declaration ...
In file included from item.h:306,
                 from mysql_priv.h:158,
                 from item.cc:19:

The problem is that HP-UX doesn't define pthreads_atfork() consistently. It has conflicting prototypes in `/usr/include/sys/unistd.h':184 and `/usr/include/sys/pthread.h':440 (details below).

One solution is to copy `/usr/include/sys/unistd.h' into `mysql/include' and edit `unistd.h' and change it to match the definition in `pthread.h'. Here's the diff:

183,184c183,184
<      extern int pthread_atfork(void (*prepare)(), void (*parent)(),
<                                                                  void (*child)());
---
>      extern int pthread_atfork(void (*prepare)(void), void (*parent)(void),
>                                                                  void (*child)(void));

After this, the following configure line should work:

CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" ./configure --prefix=/usr/local/mysql --disable-shared

Here is some information that a HPUX Version 11.x user sent us about compiling MySQL with HPUX:x compiler:

 Environment:
      proper compilers.
         setenv CC cc
         setenv CXX aCC
      flags
         setenv CFLAGS -D_REENTRANT
         setenv CXXFLAGS -D_REENTRANT
         setenv CPPFLAGS -D_REENTRANT
     % aCC -V
     aCC: HP ANSI C++ B3910B X.03.14.06
     % cc -V /tmp/empty.c
     cpp.ansi: HP92453-01 A.11.02.00 HP C Preprocessor (ANSI)
     ccom: HP92453-01 A.11.01.00 HP C Compiler
     cc: "/tmp/empty.c", line 1: warning 501: Empty source file.
  configuration:
     ./configure  --with-pthread        \
     --prefix=/source-control/mysql     \
     --with-named-thread-libs=-lpthread \
     --with-low-memory

    added '#define _CTYPE_INCLUDED' to include/m_ctype.h. This
    symbol is the one defined in HP's /usr/include/ctype.h:

     /* Don't include std ctype.h when this is included */
     #define _CTYPE_H
     #define __CTYPE_INCLUDED
     #define _CTYPE_INCLUDED
     #define _CTYPE_USING   /* Don't put names in global namespace. */

If you get the following error from configure

checking for cc option to accept ANSI C... no
configure: error: MySQL requires a ANSI C compiler (and a C++ compiler). Try gcc. See the Installation chapter in the Reference Manual.

Check that you don't have the path to the K&R compiler before the path to the HP-UX C and C++ compiler.

4.12.18 Mac OS X Notes

4.12.18.1 Mac OS X Public beta

MySQL should work without any problems on Mac OS X Public Beta (Darwin). You don't need the pthread patches for this OS!

4.12.18.2 Mac OS X Server

Before trying to configure MySQL on Mac OS X server you must first install the pthread package from http://www.prnet.de/RegEx/mysql.html.

Our binary for Mac OS X is compiled on Rhapsody 5.5 with the following configure line:

CC=gcc CFLAGS="-O2 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O2 -fomit-frame-pointer" ./configure --prefix=/usr/local/mysql "--with-comment=Official MySQL binary" --with-extra-charsets=complex  --disable-shared
alias mysql '/usr/local/mysql/bin/mysql'
alias mysqladmin '/usr/local/mysql/bin/mysqladmin'

4.12.19 BeOS Notes

We are really interested in getting MySQL to work on BeOS, but unfortunately we don't have any person who knows BeOS or has time to do a port.

We are interested in finding someone to do a port, and we will help them with any technical questions they may have while doing the port.

We have previously talked with some BeOS developers that have said that MySQL is 80% ported to BeOS, but we haven't heard from these in a while.

4.13 Windows Notes

この節では Windows 上での MySQL の使用とインストールについて述べます。 これは MySQL Windows 配布物の `README' ファイルにも述べられています。

4.13.1 Windows への MySQL のインストール

もし MySQL の配布物を持っていないなら、最初に以下からダウンロードすべきです: http://www.mysql.com/

もし他のプログラムから MySQL に接続しようと考えているなら、 多分 MyODBC ドライバーも必要でしょう。 これは MyODBC download page にあります。(http://www.mysql.com/downloads/api-myodbc.html)

日本語版の MyODBC ドライバー は: MyODBC 日本語版

それぞれの配布物のインストールをするには、ダウンロードした物を どこか からのディレクトリで unzip し、Setup.exe プログラムを 実行します。

標準では、MySQL-Windows は `C:\mysql' にインストールされるように なっています。 もし違う場所に MySQL をインストールしたいなら、 一度 `C:\mysql' にインストールした後に、そのフォルダを移動します。 MySQL`C:\mysql' から移動したならば、 mysqld に対して、移動先を必ず教えねばなりません。 もし MySQL`D:\programs\mysql' に移動したなら, mysqld を以下のようにして起動します: D:\programs\mysql\bin\mysqld --basedir D:\programs\mysql なお、 C:\mysql\bin\mysqld --help とすると、全てのオプションが表示されます!

正式版の MySQL では、`C:\my.cnf' ファイルを作成し、 そこに MySQL サーバーのオプションを記述することが可能です。 `\mysql\my-xxxxx.cnf'`C:\my.cnf' にコピーし、 ご自分の環境に合わせて編集して使用してください。 全てのパスには \ ではなくて / を使用しなくてはなりません。 もし \ を使用する場合には、これを2倍します。 MySQL では \ はエスケープ文字だからです。 「4.16.5 オプションファイル ( my.cnf )」節参照.

4.13.2 Starting MySQL on Windows 95 or Windows 98

MySQL は TCP/IP をクライアントからサーバーへの接続に使用します。 こうすればネットワーク上のどのマシンからでも MySQL サーバーに 接続できるようになります。 このため、MySQL を起動する前に、 あなたは TCP/IP をインストールしなくてはなりません。 これは Windows CD-ROM にあります。

もし古い Win95 (for example OSR2) を使用しているなら、 これは古い Winsock パッケージを使用しているかもしれません! MySQL は Winsock 2 を要求します! 最新の Winsock は http://www.microsoft.com/ にあります。 Win98 はデフォルトで新しい Winsock 2 ライブラリですので、 これは Win98 には当てはまりません。

2つの違う MySQL サーバーがあります:

mysqld フルデバッグを有効にして、自動 memory allocation をチェックするようにコンパイル
mysqld-opt Pentium プロセッサー用に最適化した物

上に示されている両方とも i386 以上の Intel プロセッサ上で動作します。

mysqld サーバーを起動するには, MS-DOS を起動し、以下のように入力します:

C:\mysql\bin\mysqld

これは mysqld をバックグラウンドで動かします。

MySQL サーバーの kill には:

C:\mysql\bin\mysqladmin -u root shutdown

注意: Win95/Win98 は名前付パイプをサポートしていません。Win95/Win98 では、 NT サーバ上で動いているリモートの MySQL への接続だけに、名前付 パイプを使用できます。

mysqld が起動しない場合、`\mysql\mysql.err' ファイルがその理 由を何か含んでいないかどうかチェックしてください。mysqld --standalone で起動を試みることもできます; この場合、これの解決の助けに なるであろう、いくつかの有用な情報が画面上で得られます。

最後の選択肢は mysqld--debug 付きで起動することです。 この場合、mysqld はログをファイル `\mysqld.trace' に書き出し ます。これには、mysqld が何故起動しないかの理由が含まれます。 これについてのバグレポートを作る場合は、間違っていると思われる部分の行だけ をメーリングリストに送ってください。

4.13.3 Starting MySQL on NT or Windows 2000

Win95/Win98 セクションは NT/Win2000 上の MySQL にもあてはまり ますが、次の違いがあります:

NT 上で TCP/IP を用いて MySQL を動作させるには、service pack 3(以上) が必須です!

注意: 次の NT にあてはまる全ては、Win2000 にもあてはまります!

NT/Win2000 では、サーバ名は mysqld-nt です。通常 MySQL は NT/Win2000 のサービスとしてインストールすべきです:

C:\mysql\bin\mysqld-nt --install

(mysqldmysqld-opt を NT 上で動作させることも出来ます。 しかしこれらは、サービスとしてスタートさせることが出来ず、また、 名前付パイプ の使用も出来ません。)

MySQL サービスの起動と停止は:

NET START mysql
NET STOP mysql

この場合、mysqld に、いかなるオプションも使用できないことに注意!

もし mysqld-nt をオプション無しで起動する必要があるならば、 mysqld-nt をスタンドアローンのプログラムとして NT 上で走らせることも 出来ます! もし mysqld-nt をオプション無しで NT 上で起動すると、 mysqld-nt は自分自身をサービスとして立ち上げようとします。 デフォルトのサービスオプションを使用して。 もし既に mysqld-nt を止めていたなら、 NET START mysql で 起動しなくてはなりません。

サービスは MySQL という名前で登録されます。 一度インストールしたら、 これは Services Control Manager (SCM) Utility (コントロールパネルにある) を使用するか、NET START MySQL コマンドを使用するかして、 起動されなくてはなりません。 もし、オプションがなにも指定されていないなら、MySQL サービス開始前に、 SCM Utility の "Startup parameters" に記述しなくてはなりません。 一度走れば、 mysqld-ntmysqladmin や SCM utility 、 NET STOP MySQL コマンドで停止できます。 もし SCM を使用して mysqld-nt 停止するなら、 mysqld shutdown normally についての変なメッセージがでます。 サービスとして実行すると、mysql-nt はコンソールへのアクセスを持た ないので、メッセージは何も見られません。

NT では以下のエラーメッセージが出るかもしれません:

Permission Denied mysqld-nt.exe が見つからないことを意味します。
Cannot Register path が正しくないことを意味します。
Failed to install service. サービスがすでにインストールされているか、Service Control Manager が間違った状態にあります。

もし mysqld-nt をサービスとしてインストールする場合に 問題が発生した場合、フルパスで実行してみてください:

C:\mysql\bin\mysqld-nt --install

もしこれで動作しないようなら、レジストリ内のパスを修正すれば mysqld-nt を 起動できるでしょう。

サービスとして mysqld-nt を起動したくないなら以下のようにします:

C:\mysql\bin\mysqld-nt --standalone

or

C:\mysql\bin\mysqld --standalone --debug

最新のバージョンでは、デバッグのトレースを `C:\mysqld.trace' に出します。

4.13.4 Windows 上で MySQL を実行

MySQLは全ての Windows プラットフォーム上で TCP/IP をサポートし、 NT 上で 名前つきパイプ(named pipe) をサポートします。 デフォルトは、NT 上でローカルに接続するときに名前つきパイプが使用され、 そのほかの全ての場合で TCP/IP が使用されます。 ホスト名はどのプロトコルを使用するかを決めます:

Host name Protocol
NULL (none) NT では最初に名前つきパイプ(named pipe)を試み、動かなければ TCP/IP を使用します。 Win95/Win98 では TCP/IP を使用します。
. 名前つきパイプ(named pipe)
localhost 現在のホストへ TCP/IP で接続
hostname TCP/IP

MySQL クライアントに named pipes を強制的に使用させるには、 --pipe オプションか、ホストに . を指定します。 そして、--socket オプションでパイプの名前を指定します。

MySQL が動いているかどうかは、以下のようにして確認できます:

C:\mysql\bin\mysqlshow
C:\mysql\bin\mysqlshow -u root mysql
C:\mysql\bin\mysqladmin version status proc
C:\mysql\bin\mysql test

もし Win95/Win98 上で mysqld への接続が遅いようなら、DNS の問題かもしれません。 この場合、 mysqld--skip-name-resolve オプションで 起動し、MySQL 許可テーブルには、localhost と IP アドレスだけ 使用します。 NT上で走る mysqld-nt MySQL サーバーに対しての接続時に DNS を避けるために、 --pipe 引数を指定して名前つきパイプ(named pipe)を 使用できます。 これはほとんどの MySQL クライアントで動きます。

2つの MySQL コマンドラインツールがあります:
mysql ネイティブな Windows 用にコンパイルされている。非常に限られたコマンドライン編集機能しか持たない
mysqlc Cygnus GNU コンパイラとライブラリを用いてコンパイルされている。GNU readline によるコマンドライン編集機能を持つ。

もし mysqlc.exe を使用したいなら, `C:\mysql\lib\cygwinb19.dll'`\windows\system' (もしくは同様のパス) にコピーしなくてはなりません。

Windows の MySQL の初期の権限は、ローカルの全てのユーザーに 対して、全てのデータベースで全ての権限が与えられています。 MySQL を安全にするために、全てのユーザーにパスワードを 設定すべきです。また、mysql.user テーブルから Host='localhost'User='' となっているレコードを 削除すべきです。

root ユーザーにもパスワードを設定すべきです: (次の例は、匿名ユーザを削除してから開始します。'test' データベースへのアク セスは全員に許可されます)

C:\mysql\bin\mysql mysql
mysql> DELETE FROM user WHERE Host='localhost' AND User='';
mysql> QUIT
C:\mysql\bin\mysqladmin reload
C:\mysql\bin\mysqladmin -u root password your_password

パスワードを設定した後、もし mysqld サーバーを停止させるなら、 以下のようにします:

mysqladmin --user=root --password=your_password shutdown

もしあなたが Windows 下で、古い MySQL バージョン 3.21 のシェアウェ アバージョンを使用しているなら、上記のコマンドは次のエラーで失敗します: parse error near 'SET OPTION password'。これは、MySQL バー ジョン 3.21 に基づく古いシェアウェアバージョンは、SET PASSWORD コマ ンドを持っていないためです。この場合の回避策は、バージョン 3.22 シェアウェ アにアップグレードすることです。

より新しい MySQL バージョンでは、GRANTREVOKE コ マンドで、簡単に新しいユーザを追加でき、権限を変更することができます。 「7.35 GRANTREVOKE 構文」節参照。

4.13.5 SSH を利用してリモートの MySQL に Windows から接続

以下は SSH を用いてリモートの MySQL サーバに安全に接続するための 方法について述べたものです。 (by David Carlson dcarlson@mplcomm.com).

You should now have your ODBC connection to MySQL encrypted using SSH.

4.13.6 Windows において、異なるディスクをまたがるようにデータを分割する

Windows 上では、3.23.16 以上のバージョンの MySQL では -DUSE_SYMDIR オプションを有効にしてコンパイルされています。これはデータベースに 対するシンボリックリンクを追加することで異なるディスクにデータベースを 置くことを可能にします(Unix におけるシンボリック・リンクと同様の 方法で)。

Windows 上では、宛先ディレクトリへのパスを持つファイルを作成し、 そのファイルを database.sym というファイル名で mysql_data ディレクトリ の中に保存することで、データベースへのシンボリックリンクを作成します。 Note that the symbolic link will only be used if the directory mysql_data_dir\database doesn't exist.

例えば、もしデータベース foo`D:\data\foo' に置きたいなら、 D:\data\foo という文字列を含む `C:\mysql\data\foo.sym' という ファイルを作成するべきです。その後、データベース foo に作成される すべてのテーブルは `D:\data\foo' に作成されるでしょう。

4.13.7 Windows 上で MySQL クライアントをコンパイルする

ソースファイル中で mysql.h をインクルードする前に `windows.h' を インクルードするべきです:

#if defined(_WIN32) || defined(_WIN64)
#include <windows.h>
#endif
#include <mysql.h>

あなたのコードを、必要に応じて `libmysql.dll' 中でロードするための ラッパーである `libmysql.lib' ライブラリに動的にリンクすることも できますし、また `mysqlclient.lib' ライブラリを静的にリンクすることも できます。

mysqlclient ライブラリはスレッド対応ライブラリとしてコンパイル されていますので、あなたのコードもマルチスレッド対応になるように コンパイルするべきことに注意してください。

4.13.8 Windows と BDB テーブル

Windows 上の新しい BDB インターフェースの完全なテストを 手短に済ませるつもりです。これが済んだら、BDB テーブルのサポートを 含んだ MySQL のバイナリ配布 (Windows と Unix 用) のリリースを 開始するつもりです。

4.13.9 Windows 用 MySQL と UNIX 用 MySQL の比較

MySQL-Windows バージョンは現在それ自体とても安定した(stableな)状態で供給されています。 MySQL-win32 バージョンは すべての機能が UNIX バージョンの MySQL と対応しています。 ただし、下記のような例外があります。

Win95 とスレッド
Win95は、各々のスレッドの作成のためにメインメモリのおよそ200バイトをメモリリーク します。これのために、もしあなたが多くの接続をすれば、MySQL の各々の接続が新しい スレッドを作成するので、あなたはWin95では長時間、mysqld を実行させるべきではあり ません! WindowsNT と Windows98 はこのバグを持ちません。
並行読み出し
MySQLINSERTSELECT を混ぜることを可能にするために pread() 及び pwrite() 関数コールに依存します。現時点では pread()/pwrite() をエミュレートするために Mutex を用いています。長期的な計画では、 ファイルレベルのインターフェースを仮想インターフェースで置き換えて いくつもりなので、さらに速度を上げるために WindowsNT 上で readfile()/writefile() インターフェースを使うことができます。 現在の実装は、しかし MySQL が利用可能なファイル数の上限が 1024 に なっています。これは Unix では可能な数の並行スレッドを NT 上では 動作させることができないことを意味しています。
ブロック読み込み
MySQL はそれぞれの接続のためにブロック読み込みを使います。 これは以下の事柄を意味しています: 私たちは、近い将来にこれを修正することを計画しています。
UDF 関数
現時点では、MySQL-Windows はユーザの定義関数をサポートしません。
DROP DATABASE
複数のスレッドで使われているデータベースはDROPをすることができません。
タスクマネージャーからの MySQL の終了
Windows95では「Windowsの終了」やタスクマネージャから MySQL を終了することはできません。 mysqladmin shutdown で終了しなければなりません。
大文字小文字を区別しない名前
Windowsではファイルネームは大文字小文字が区別されません。 そのため、Windows用の MySQL では、テーブル名は大文字小文字が区別されません。 唯一の制限は、ステートメント(SQL文)中においては、データベースとテーブルの名前は 同じケース(大文字小文字)で与えなければならないという点です。 「7.1.5.1 名前のケース依存性」節参照.
The `\' (ディレクトリ名)
Win95のパス名コンポーネントは、 `\' によって離されますが、その文字は同じく MySQL のエ スケープ文字でもあります。もしあなたは LOAD DATA INFILE または SELECT ... INTO OUTFILE を使う場合には、UNIX でのファイルネーム形式 `/' で書くか、あるいは、 「\\」と `\' をダブルで使わなくてはなりません。
LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr;
SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;
Can't open named pipe エラー
もしあなたが NT 上で最新の mysql-clients と MySQL 3.22 バージョン を使えば、あなたは、次のエラーを得ることになるはずです:
error 2017: can't open named pipe to host: . pipe...
これは、 MySQL のリリースバージョンがデフォルトで NT の 名前つきパイプを 使っているために起こっています。 新しい MySQL クライアントで --host=localhost オプションを用いるか、 以下の情報を含む `C:\my.cnf' ファイルを作成することで、このエラーを 回避することができます。
[client]
host = localhost
Access denied for user error
もしあなたが同じマシン上の MySQL サーバーにアクセスした時 Access denied for user: 'some-user@unknown' to database 'mysql' エラーを得るなら、これはあなたの MySQL があなた のマシンのホスト名を正しく解決できてないことを意味します。 これを修正するには、 以下の情報を持つファイル `\windows\hosts' を作成するべきです。 (注:Windows95,98には\Windowsフォルダ上にサンプルとして「lmhosts.sam」ファイルが 既にあるはずです)
127.0.0.1       localhost
ALTER TABLE
ALTER TABLE を行う間、テーブルは他のスレッドが使用できないようロック されます。これは Windows が他のスレッドによって使用中のファイルを削除 できないという事実のためにしなければならないことです(私たちはこの 問題を回避するための方法を将来見出すかもしれません)。
MERGE テーブルで使用中のテーブルに対する DROP TABLE は機能しません。
MERGE ハンドラは MySQL からテーブルの対応関係を隠すことを行います。 Windows ではオープン中のファイルを削除することを許さないために、 すべての MERGE テーブルを (FLUSH TABLES を用いて) 最初にフラッシュ するか、テーブルをドロップする前に MERGE テーブルをドロップする 必要があります。この問題は VIEW を導入するのと同時に解消するつもりです。 Windowsリリースを手伝いたいと思っている人のために、いくつかオープンになっている 未解決の問題を以下に示します:

他の Windows 特有の事柄は MySQL-Windows ディストリビューションに同梱されている `README' ファイルで説明されています。

4.14 OS/2 Notes

MySQL uses quite a few open files. Because of this, you should add something like the following to your `CONFIG.SYS' file:

SET EMXOPT=-c -n -h1024

If you don't do this, you will probably run into the following error:

File 'xxxx' not found (Errcode: 24)

When using MySQL with OS/2 Warp 3, FixPack 29 or above is required. With OS/2 Warp 4, FixPack 4 or above is required. This is a requirement of the Pthreads library. MySQL must be installed in a partition that supports long filenames such as HPFS, FAT32, etc.

The `INSTALL.CMD' script must be run from OS/2's own `CMD.EXE' and may not work with replacement shells such as `4OS2.EXE'.

The `scripts/mysql-install-db' script has been renamed. It is now called `install.cmd' and is a REXX script, which will set up the default MySQL security settings and create the WorkPlace Shell icons for MySQL.

Dynamic module support is compiled in but not fully tested. Dynamic modules should be compiled using the Pthreads run-time library.

gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \
    -o example udf_example.cc -L../lib -lmysqlclient udf_example.def
mv example.dll example.udf

Note: Due to limitations in OS/2, UDF module name stems must not exceed 8 characters. Modules are stored in the `/mysql2/udf' directory; the safe-mysqld.cmd script will put this directory in the BEGINLIBPATH environment variable. When using UDF modules, specified extensions are ignored -- it is assumed to be `.udf'. For example, in Unix, the shared module might be named `example.so' and you would load a function from it like this:

CREATE FUNCTION metaphon RETURNS STRING SONAME "example.so";

Is OS/2, the module would be named `example.udf', but you would not specify the module extension:

CREATE FUNCTION metaphon RETURNS STRING SONAME "example";

4.15 MySQL Binaries

サービスとして、MySQL AB は MySQL のバイナリ配布を提供しています。 これらのコンパイルは TcX 内部でおこなったり、我々にマシンの アクセスを提供してもらっている顧客のマシン上で行っています。

これらの配布物は scripts/make_binary_distribution で作成され、 以下のコンパイルオプションで調整されています。

SunOS 4.1.4 2 sun4c with gcc 2.7.2.1
CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex --enable-assembler
SunOS 5.5.1 sun4u with egcs 1.0.3a
CC=gcc CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex
SunOS 5.6 sun4u with egcs 2.90.27
CC=gcc CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex
SunOS 5.6 i86pc with gcc 2.8.1
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex
Linux 2.0.33 i386 with pgcc 2.90.29 (egcs 1.0.3a)
CFLAGS="-O3 -mpentium -mstack-align-double -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -mpentium -mstack-align-double -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --with-extra-charsets=complex
Linux 2.2.x with x686 with gcc 2.95.2
CFLAGS="-O3 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charset=complex
SCO 3.2v5.0.4 i386 with gcc 2.7-95q4
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
AIX 2 4 with gcc 2.7.2.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
OSF1 V4.0 564 alpha with gcc 2.8.1
CC=gcc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex
Irix 6.3 IP32 with gcc 2.8.0
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
BSDI BSD/OS 3.1 i386 with gcc 2.7.2.1
CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
BSDI BSD/OS 2.1 i386 with gcc 2.7.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex

上で示したオプション以外で最適化を施した方はだれでも、開発者向けの メーリングリストにポストできます。 internals@lists.mysql.com.

RPM 配布では MySQL 3.22 を user-contributed としています。 3.22 をはじめ、いくつかの RPM パッケージは MySQL AB 製です。

MySQL のデバッグバージョンをコンパイルしたい場合は、 --with-debug または --with-debug=full を上記の configure 行 に追加して、すべての -fomit-frame-pointer オプションを取り除いてく ださい。

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

初めて MySQLをインストールしたら(バイナリからでもソースからでもですが)、 サーバーを動作させるために、許可テーブルを初期化しなくてはなりません。 またマシンの起動時、停止時に、サーバーを自動で開始、停止することもできます。

通常、許可テーブルのインストールとサーバーの開始は、 ソースディストリビューションなら以下のようにします:

shell> ./scripts/mysql_install_db
shell> cd mysql_installation_directory
shell> ./bin/safe_mysqld --user=mysql &

バイナリディストリビューションでは次を行ないます:

shell> cd mysql_installation_directory
shell> ./bin/mysql_install_db
shell> ./bin/safe_mysqld --user=mysql &

これは、いくつかのデータベースを生成します。mysql データベースは全 てのデータベース権限を保持します。test データベースは MySQL をテストするために使用できます。そして、 mysql_install_db を実行したユーザの権限エントリと root ユー ザも生成します(パスワードはありません)。これは mysqld サーバの起動 も行ないます。

mysql_install_db は古い権限テーブルを上書きしません。そのため、どの ような環境でも安全に実行できます。test データベースを持ちたくないな ら、mysqladmin -u root drop test で削除できます。

テストは、MySQL のトップディレクトリーから簡単に実行できます。 バイナリ配布を使用する場合、これ(トップディレクトリ)は インストール先のディレクトリーになるでしょう(`/usr/local/mysql')。 ソース配布の場合、これは MySQL のソースディレクトリです。

コマンドは本節といかに続く節で説明しますが、BINDIRmysqladminsafe_mysqld がインストールされたディレクトリを示します。 バイナリ配布を使用している場合、BINDIR はバイナリ配布の `bin' ディレクトリになります。 ソースからインストールした場合、BINDIR は、configure で特別指定しない限り、 `/usr/local/bin' です。 EXECDIRmysqld サーバーのインストール先です。 バイナリ配布を使用している場合、これは BINDIR ディレクトリと同一になります。 ソースからインストールした場合、`/usr/local/libexec' です。

テストについて以下に詳細に説明します:

  1. 必要ならば、mysqld サーバーを起動し MySQL の許可テーブルを初期化します。 (許可テーブルはユーザーがどのような権限をもってサーバーに接続を許すかを決定するものです。) これは通常、mysql_install_db スクリプトで初期化されます。
    shell> scripts/mysql_install_db
    
    通常、mysql_install_db の実行は初めて MySQL をインストール したあと一度だけ必要です。 すでにインストールされているものを アップグレードする際にはこの手順は飛ばせます。 (しかし、mysql_install_db は実に安全で、すでにテーブルが 存在している場合はいかなるテーブルも更新しません。したがって、 実行すべきかどうかわからない場合は、mysql_install_db を常に 走らせることができます) mysql_install_db は 6個のテーブルを作ります (user, db, host, tables_priv, columns_priv, func) mysql データベースに。 初期の権限状態についての説明は 「6.12 MySQL 権限許可の初期設定」節. これらの権限は MySQL root ユーザーに なんでもできるように許可し、そして、だれもが 'test' という名前か 'test_' ではじまる名前をもつ データベースを作成、使用できるように許可されています。 もし許可テーブルを設定していない場合、サーバーを起動時に以下のエラーが出ます:
    mysqld: Can't find file: 'host.frm'
    
    バイナリ配布の MySQL では、もし MySQL./bin/safe_mysqld を実行しないで起動した場合に、このエラーがおきます。! 「15.3 safe_mysqld, the wrapper around mysqld」節参照. rootmysql_install_db を実行する必要があるとあなたは思うかもしれません。 しかし、 MySQLroot 以外のユーザーで起動できます。 データベースディレクトリがサーバーを起動したユーザに対して読み書きが許可されていれば良いのです。 MySQL を一般ユーザーで走らせる方法は 「21.8 一般ユーザで MySQL を動かす方法」節. もし mysql_install_db で問題が出たら、 「4.16.1 mysql_install_db 実行時の問題」節参照. を参照のこと。 mysql_install_db スクリプトを走らせるにはいくつか選択があります: これらの選択については 「6.12 MySQL 権限許可の初期設定」節 からさらに情報が得られます。
  2. MySQL サーバーを以下のようにして起動します:
    shell> cd mysql_installation_directory
    shell> bin/safe_mysqld &
    
    サーバの起動に問題があれば、 「4.16.2 MySQL サーバー起動時の問題」節 を見てください。
  3. mysqladmin でサーバーが走っているか確認します。 サーバーが立ち上がり接続を受け付けるか確認する簡単な方法を以下に示します:
    shell> BINDIR/mysqladmin version
    shell> BINDIR/mysqladmin variables
    
    例えば、mysqladmin version の出力はあなたのプラットフォームと MySQL のバージョンを出力します。 出力は以下の様にでます:
    shell> BINDIR/mysqladmin version
    mysqladmin  Ver 8.14 Distrib 3.23.32, for linux on i586
    Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL license
    
    Server version          3.23.32-debug
    Protocol version        10
    Connection              Localhost via Unix socket
    TCP port                3306
    UNIX socket             /tmp/mysql.sock
    Uptime:                 16 sec
    
    Threads: 1  Questions: 9  Slow queries: 0  Opens: 7  Flush tables: 2  Open tables: 0 Queries per second avg: 0.000  Memory in use: 132K  Max memory used: 16773K
    
    BINDIR/mysqladmin の使用方法は、--help オプションで起動することにより得られます。
  4. サーバーをシャットダウンするには:
    shell> BINDIR/mysqladmin -u root shutdown
    
  5. サーバーをリスタートするには、safe_mysqldmysqld を直接実行します。 例えば:
    shell> BINDIR/safe_mysqld --log &
    
    safe_mysqld が失敗するなら、 MySQL のインストールディレクトリーから実行してみてください。 もしそれでも起動しないなら、 「4.16.2 MySQL サーバー起動時の問題」節 を参照のこと。
  6. いくつかの簡単なテストでサーバーが動いているか確認できます。 以下のようになります:
    shell> BINDIR/mysqlshow
    +-----------+
    | Databases |
    +-----------+
    | mysql     |
    +-----------+
    
    shell> BINDIR/mysqlshow mysql
    Database: mysql
    +--------------+
    |    Tables    |
    +--------------+
    | columns_priv |
    | db           |
    | func         |
    | host         |
    | tables_priv  |
    | user         |
    +--------------+
    
    shell> BINDIR/mysql -e "select host,db,user from db" mysql
    +------+--------+------+
    | host | db     | user |
    +------+--------+------+
    | %    | test   |      |
    | %    | test_% |      |
    +------+--------+------+
    
    他のプラットフォームで MySQL のパフォーマンスを比較するために `sql-bench' にベンチマークがあります。 `sql-bench/Results' ディレクトリには、他のデータベースやプラットフォームで ベンチを実行した結果があります。 全てのテストを実行するには、以下のようにします:
    shell> cd sql-bench
    shell> run-all-tests
    
    RPM バイナリ配布には `sql-bench' ディレクトリがありません。 (RPM のソース配布には含まれます) この場合、ベンチマークをインストールしなくてはなりません。 MySQL バージョン 3.22 のバイナリ配布から、 `mysql-bench-VERSION-i386.rpm' という名前で RPM パッケージを作っており、 これにはベンチマークのデータとコードが含まれます。 `tests' サブディレクトリでテストすることも可能です。 例えば、`auto_increment.tst' の実行は以下のようにします:
    shell> BINDIR/mysql -vvf test < ./tests/auto_increment.tst
    
    これの結果は `./tests/auto_increment.res' ファイルに書き出されます。

4.16.1 mysql_install_db 実行時の問題

mysql_install_db スクリプトの目的は、新しい MySQL 権限テー ブルを生成することです。他のデータには何も影響しません! 既に MySQL 権限テー ブルをインストールしている場合は、何も行ないません!

権限テーブルを再生成したい場合は、mysqld サーバが動作していれば、それを落 としてから、次のように行なってください:

mv mysql-data-directory/mysql mysql-data-directory/mysql-old
mysql_install_db

この節では mysql_install_db を実行した際にでくわすかもしれない問題について述べます:

mysql_install_db doesn't install the privilege tables
これは mysql_install_db が権限テーブルをインストールできなかった事のメッセージですが、 続いて以下のようにメッセージが出た場合:
starting mysqld daemon with databases from XXXXXX
mysql daemon ended
この場合、注意深く log ファイルを調べてください! エラーメッセージに出ている `XXXXXX' ディレクトリにログファイルがあり、 これに mysqld がなぜスタートしなかったか記されているはずです。 もし何が起こったかわからない場合、このログファイルを含んで mysqlbug を使用して バグレポートを投稿してください! 「2.3 バグや問題を報告する方法」節参照.
There is already a mysqld daemon running
この場合、 mysql_install_db を実行する必要はありません。 mysql_install_db を実行するのは MySQL を初めてインストールした後、 たった一回だけです。
Installing a second mysqld daemon doesn't work when one daemon is running
これはすでに MySQL がインストールされており、 しかし新しいインストールを違うところに行おうとした場合に発生します。 (例えば、一度に二つのインストールを実行した場合など) 一般にこの問題は二つ目のサーバーを動いているサーバーと同じポート、ソケットを使用して起動しようとした場合に発生します。 この場合、Can't start server: Bind on TCP/IP port: Address already in use エラーメッセージか Can't start server : Bind on unix socket... エラーメッセージが出ます。 「4.17 同じマシンに多くのサーバをインストールする」節参照.
`/tmp' に書き込み許可をあなたが持っていないなら
もしソケットファイルを標準の場所(`/tmp')に作成するための書き込み許可がないなら、 あるいは、一時ファイルを `/tmp' に作成できないなら、 mysql_install_db の実行時、あるいは mysqld の起動/使用時に エラーとなるでしょう。 違うディレクトリーにソケットファイルや一時ファイルを指定するには:
shell> TMPDIR=/some_tmp_dir/
shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysqld.sock
shell> export TMPDIR MYSQL_UNIX_PORT
`some_tmp_dir' は書き込みが可能なディレクトリーを指定しなくてはなりません。 「A Environment Variables」節参照. この後、mysql_install_db を走らせ、サーバーを起動する事ができます:
shell> scripts/mysql_install_db
shell> BINDIR/safe_mysqld &
mysqld crashes at once
もし RedHat バージョン 5.0 上で 2.0.7-5 より古い glibc を使用している場合、 全ての glibc パッチを当てなくてはなりません! これに関しては MySQL メールのアーカイブに情報が多くあります。 メーリングリストのアーカイブのリンクは http://www.mysql.com/documentation/. see 「4.12.5 Linux Notes (All Linux Versions)」節. mysqld--skip-grant-tables 指定で起動することもできます。 そして以下のように mysql を使用して自分自身の手により許可を加えます:
shell> BINDIR/safe_mysqld --skip-grant-tables &
shell> BINDIR/mysql -u root mysql
mysql から手動で mysql_install_db に書かれている SQL コマンドを実行します。 許可テーブルをサーバーに読み込ますためには、 mysqladmin flush-privilegesmysqladmin reload を実行します。

4.16.2 MySQL サーバー起動時の問題

通常 mysqld サーバーの起動は、以下の三つの方法のうち一つで行います:

mysqld デーモンの起動時に、デーモンはデータディレクトリにディレクトリを変えます。 ログファイルと pid (process ID) ファイルがこのディレクトリに書ける事、 そしてデータベースがこのディレクトリにある事を、デーモンは要求します。

データディレクトリの場所は配布物のコンパイル時に指定されています。 mysqld があなたのシステム上にデータベースディレクトリを見つけれなかった場合、 サーバーは動きません。 mysqld--help オプションで起動すれば mysqld の デフォルトのパスを知ることができますので、 サーバーが起動しない理由が違うパスを使用しているために起こっているかどうかがわかります。 パスが違う場合、mysqld のコマンドラインの引数に正しいパスを指定して、デフォルト値を 上書きすることが可能です。(これらオプションは safe_mysqld にも同様に使用できます)

通常、MySQL がインストールされたディレクトリのベースディレクトリだけを mysqld に教えればいいはずです。 これは --basedir オプションを指定します。 --help オプションを使用すればパスの変更が確認できます。 (--help必ず 最後に指定のこと)  例えば:

shell> EXECDIR/mysqld --basedir=/usr/local --help

パスの設定が思い通りに言ったことを確認したら、 --help オプションを外してサーバーを起動します。

どの方法でサーバーを起動しても、もし起動に失敗すれば、ログファイルを確認してください。 なぜ失敗したか記録されています。ログファイルはデータベースディレクトリにあります。 (バイナリ配布の場合 `/usr/local/mysql/data' 、ソース配布の場合 `/usr/local/var'、 Windows では `\mysql\mysql.err' ) データベースディレクトリに `host_name.err'`host_name.log' という ファイル (host_name はあなたのサーバー名) を探してください。 以下のようにしてそのファイルの最後の数行を確認します:

shell> tail host_name.err
shell> tail host_name.log

ログファイル中に次のような何かを見つけた場合:

000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed
000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory
000729 14:50:10  Can't init databases

これは --bdb-recover 付きで mysqld が起動され、Berkeley DB がデータ ベースを復元しようとした時にログファイルに悪い何かを見つけたということを意 味します。継続を可能にするためには、古い Berkeley DB ログファイルをデータ ベースディレクトリから、あとで検査できる他の場所に移すべきです。ログファイ ルは `log.0000000001' (番号は時間の経つと増加します)と名付けられてい ます。

BDB テーブルサポートで mysqld を実行していて、mysqld が起動時にコア ダンプする場合、BDB recover log にいくつかの問題の原因があり得ます。この場 合、mysqld--bdb-no-recover で起動を試みることができます。 これで救える場合は、データディレクトリから全ての `log.*' ファイルを削 除し、そして mysqld を再び起動してみてください。

以下のエラーの場合、他のプログラム(か他の mysqld サーバー)が mysqld が使用しようとしている TCP/IP ソケットを使っています:

Can't start server: Bind on TCP/IP port: Address already in use
  or
Can't start server : Bind on unix socket...

他の mysqld サーバーが走っていないかを ps で確認します。 もし他のサーバーが起動していないなら、 telnet your-host-name tcp-ip-port-number コマンドを実行し、何回か RETURN キーをたたいてみてください。 もし、 telnet: Unable to connect to remote host: Connection refused のような エラーが出た場合、なにかが mysqld が使用しようとしているポートを既に使っています。 See 「4.16.1 mysql_install_db 実行時の問題」節 and 「22.3 同一マシン上に複数の MySQL サーバーを走らせる」節.

もし safe_mysqldMySQL インストールディレクトリから起動しても失敗するなら、 safe_mysqld をあなたのシステム用に mysqld のパスやパス名のオプションを 書き換えてもかまいません。 この場合、 MySQL をアップグレードした場合、あなたが変更した safe_mysqld は上書きされるので、変更したものはインストール前にコピーしておき、 再び戻さなくてはなりません。

もし mysqld がすでに走っている場合、以下のコマンドにてパスの設定を知ることができます:

shell> mysqladmin variables

or

shell> mysqladmin -h 'your-host-name' variables

もし safe_mysqld がサーバーを起動しても接続できないようなら、 `/etc/hosts' ファイルに以下のような記述を持たせてください:

127.0.0.1       localhost

この問題はスレッドライブラリーがなくて MySQL を MIT-pthreads を 使用するようにして作ったシステムにだけ起こります。

Windows では、次のようにして mysqld の起動を試みることができます:

C:\mysql\bin\mysqld --standalone --debug

これは、バックグランドで動作せず、`\mysqld.traec' にトレースを書き 出します。これは問題の原因を解決する手助けになります。 「4.13 Windows Notes」節参照。

BDB (Berkeley DB) テーブルを使用する場合は、BDB 固有の起動オプションに精通 すべきです。 「8.5.3 BDB startup options」節参照.

If you are using Gemini tables, refer to the Gemini-specific startup options. 「8.6.2 GEMINI startup options」節参照.

If you are using InnoDB tables, refer to the InnoDB-specific startup options. 「8.7.2 InnoDB startup options」節参照.

4.16.3 MySQL の自動起動と自動停止

mysql.server スクリプトは start, stop 引数を指定することにより サーバーを起動、停止できます:

shell> mysql.server start
shell> mysql.server stop

mysql.serverMySQL インストールディレクトリの `share/mysql' ディレクトリ、 または MySQL ソースツリーの `support-files' ディレクトリにあります。

mysql.server はサーバーを起動時する前に MySQL がインストールされた ディレクトリにディレクトリを変え、safe_mysqld を起動します。 もし標準以外にインストールしているバイナリ配布を使用しているなら、 mysql.server を編集する必要があるかもしれません。 safe_mysqld を起動する前に正しいディレクトリに cd するように変更します。 safe_mysqld に他のオプションを与えるように mysql.server を変えても構いません。 他のユーザーで実行したい場合、mysql_daemon_user=root を変更しても構いません。 safe_mysqld に他のオプションを与えるために、 mysql.server を変更しても構いません。

mysql.server stop はサーバーにシグナルを送ってサーバーを停止します。 mysqladmin shutdown で手動でサーバーを落とすこともできます。

MySQL を使用している製品のために、これらスタート、ストップを `/etc/rc*' に書きたいと思われるかもしれません。 ここでの注意点は、変更した mysql.server は、 MySQL をアップグレードしたときに上書きされるということです。 よって、変更したものはインストール前にコピーを取っておくべきです。

もしあなたのシステムが `/etc/rc.local' を起動スクリプトとして使用しているなら、 以下のようにその中に記述します:

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

グローバル設定ファイルである `/etc/my.cnf' に、 mysql.server の オプションを記述することも可能です。`/etc/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.

次の表は、各起動スクリプトが使用するオプションセクションを示しています:

mysqld mysqldserver
mysql.server mysql.server, mysqld, server
safe_mysqld mysql.server, mysqld, server

4.16.5 オプションファイル ( my.cnf )」節参照.

4.16.4 mysqld コマンド行オプション

mysqld は次のコマンド行オプションを受け付けます:

--ansi
MySQL 構文の代わりに ANSI SQL 構文を使用します。 「5.2 ANSI モードでの MySQL の実行」節参照。
-b, --basedir=path
インストール先ディレクトリのパス。すべてのパスは通常ここからの相対パスで決 定されます。
--big-tables
ファイルにすべての一時セットを保存することにより、大きな結果セットを許しま す。これは、多くの 'table full' エラーを解決します。しかし、メモリ内テーブ ルでも十分なクエリは遅くなります。バージョン 3.23.2 からは、 MySQL は自動的にメモリを使用し、必要なときにディスクテーブルにス イッチすることによって、これを解決します。
--bind-address=IP
bind する IP アドレス。
--character-sets-dir=path
文字セットがあるディレクトリ。 「10.1.1 データとソートに使用されるキャラクターセット」節参照。
--chroot=path
起動中に mysqld デーモンを chroot します。推奨されるセキュリティ手法です。 これは LOAD DATA INFILESELECT ... INTO OUTFILE を制限し ます。
--core-file
mysqld が死んだ場合 core ファイルを書き出します。いくつかのシステム では、--core-file-sizesafe_mysqld に記述する必要がありま す。 「15.3 safe_mysqld, the wrapper around mysqld」節参照。
-h, --datadir=path
データベースルートのパス。
--default-character-set=charset
デフォルト文字セットの設定。 「10.1.1 データとソートに使用されるキャラクターセット」節参照。
--default-table-type=type
テーブルのデフォルトテーブル型を設定する。 「8 MySQL Table types」節参照。
--debug[...]=
MySQL--with-debug つきで configure された場合、このオ プション使用して、mysqld が何を行なっているかのトレースファイルを得 ることができます。 「I.3 The DBUG package.」節参照。
--delay-key-write-for-all-tables
任意の MyISAM テーブルについて書き込み間でキーバッファをフラッシュ しません。 「13.2.3 サーバーパラメーターのチューニング」節参照。
--enable-locking
システムロックを有効にします。注意: lockd() が完全に働かない(Linux のよう な)システムでこのオプションを使用した場合、mysqld が簡単にデッドロックしま す。
-T, --exit-info
mysqld サーバをデバッグするために使用できる、様々なフラグのビットマスクで す; 何が行なわれるのか正確に知らない場合は、このオプションを使用すべきでは ありません!
--flush
各 SQL コマンド後にすべての変更をディスクにフラッシュします。通常 MySQL は各 SQL コマンドにすべての変更をディスクに書き出すだけで、 OS がディスクへの sync を処理します。 「21.1.1 MySQL がクラッシュする場合に行うこと」節参照。
-?, --help
短いへルプを表示して終了します。
--init-file=file
起動時にファイルから SQL コマンドを読み込みます。
-L, --language=...
与えられた言語のクライアントエラーメッセージ。フルパスで与えることもできます。 「10.1 MySQL がサポートしている言語は?」節参照。
-l, --log[=file]
接続とクエリをファイルに記録します。 「23.2 The Query Log」節参照。
--log-isam[=file]
すべての ISAM/MyISAM 変更をファイルに記録します(ISAM/MyISAM のデバッグ時に のみ使用できます)。
--log-slow-queries[=file]
実行に long_query_time 秒以上掛かるすべてのクエリをファイルに記録し ます。 「23.5 The Slow Query Log」節参照。
--log-update[=file]
更新を file.# に記録します。# は与えられなければ一意な番号で す。 「23.3 更新ログ」節参照。
--log-long-format
更新ログに拡張情報を記録します。--log-slow-queries を使用すると、イ ンデックスを使用しないクエリが slow query ログに記録されます。
--low-priority-updates
テーブル変更操作 (INSERT/DELETE/UPDATE) は SELECT よ りも低い優先度になります。あるクエリだけ優先度を低くするには、 {INSERT | REPLACE | UPDATE | DELETE} LOW_PRIORITY ... によって行 なわれます。また、ひとつのスレッドの優先度を変更するには、SET OPTION SQL_LOW_PRIORITY_UPDATES=1 で行なわれます。 「13.2.9 テーブル・ロッキングの問題」節参照。
--memlock
メモリに mysqld プロセスをロックします。これはシステムが mlockall() システムコールをサポートしている時にだけ動作します。これ は、OS が mysqld をディスク上にスワップさせる問題がある場合の助けに なります。
--myisam-recover [=option[,option...]]] where option is one of DEFAULT, BACKUP, FORCE or QUICK.
このオプションを使用すると、mysqld はオープン時にテーブルがクラッシュ したとマークされているかどうか、テーブルが適切にクローズされていないかどう かチェックします。(最後のオプションは --skip-locking で起動している 場合にだけ働きます)。If this is the case mysqld will run check on the table. テーブルが壊れている場合、mysqld はその修復を試みます。 次のオプションは修復の動作に影響します。
DEFAULT --myisam-recover にオプションを与えないのと同じです。
BACKUP データテーブルが修復中に変更された場合、 `table_name.MYD' データファイルのバックアップを `table_name-datetime.BAK' に保存します。
FORCE .MYD ファイルからひとつより多くのレコードが失われている 場合でも修復を実行します。
QUICK 削除ブロックがない場合にテーブル内のレコードをチェック しません。
テーブルが自動的に修復される前に、MySQL はエラーログにこれについ てのメモを追加します。ユーザの介入なしで多くのことを修復したい場合は、オプ ション BACKUP,FORCE を使用すべきです。いくつかのレコードが削除され る場合でも、テーブルを強制的に修復しますが、古いデータファイルをバックアッ プとして保存するため、あとで何が起こったか検証できます。
--pid-file=path
safe_mysqld によって使用される pid ファイルのパス。
-P, --port=...
TCP/IP 接続で listen するポート番号。
-o, --old-protocol
とても古いクライアントとの互換のために、3.20 プロトコルを使用します。 「4.18.3 バージョン 3.20 から バージョン 3.21 へのアップグレード」節参照。
--one-thread
一つのスレッドだけを使用します(Linux 下でデバックするため)。 「I.1 MySQL server のデバッグ」節参照。
-O, --set-variable var=option
変数に値を与えます。--help は変数をリストします。すべての変数の完全 な詳細はこのマニュアルの SHOW VARIABLES 節で見られます。 「7.28.4 SHOW VARIABLES」節参照。サーバパラメータの調整についての節はこれらの最適化 方法の情報を含んでいます。 「13.2.3 サーバーパラメーターのチューニング」節参照。
--safe-mode
いくつかの最適化ステージをスキップします。--skip-delay-key-write を 含みます。
--safe-show-database
ユーザが権限を何も持っていないデータベースを表示しません。
--secure
gethostbyname() システムコールによって返される IP 番号が、オリジナ ルのホスト名に逆引き解決できるかどうかをチェックします。これは、外部の誰か が他のホストに成りすますことにより、アクセスを得ようとすることを難しくしま す。このオプションはいくつかのホスト名正当性チェックも追加します。このオプ ションは MySQL バージョン 3.21 ではデフォルトでオフになっています。 逆引き解決の実行に時々長い掛かることがあるためです。MySQL バージョ ン 3.22 はホスト名をキャッシュし(--skip-host-cache が使用されない場 合)、そしてこのオプションはデフォルトで有効になっています。
--skip-concurrent-insert
同時に MyISAM テーブルに select と insert を行なう機能をオフにしま す。(この機能にバグを見つけたと考える場合にだけ使用します)。
--skip-delay-key-write
すべてのテーブルに対し delay_key_write オプションを無視します。 「13.2.3 サーバーパラメーターのチューニング」節参照。
-Sg, --skip-grant-tables
このオプションは、サーバをすべての権限システム使用しないようにします。これ は全員にすべてのデータベースへの完全アクセスを与えます! (mysqladmin flush-privilegesmysqladmin reload を実行する ことで、権限テーブルを使用して起動するように実行中のサーバに伝えることがで きます。)
--skip-host-cache
より速いホスト名-IP解決のためのホスト名キャッシュを使用しません。代わりに すべての接続で DNS サーバへクエリします。 「13.2.10 How MySQL uses DNS」節参照。
--skip-locking
システムロックを使用しません。isamchk または myisamchk を使 用するためには、サーバをシャットダウンする必要があります。 「1.7 MySQL はどれくらい安定か?」節参照。注意: MySQL バージョン 3.23 では、 REPAIRCHECKMyISAM テーブルの修復/チェックに 使用できます。
--skip-name-resolve
ホスト名を解決しません。権限テーブルのすべての Host フィールド値は IP 番号か localhost でなければなりません。 「13.2.10 How MySQL uses DNS」節参照。
--skip-networking
TCP/IP 接続の listen をまったく行ないません。mysqld との接続には UNIX ソケット経由で行なう必要があります。このオプションはローカル要求だけ を許可するシステムでは、高く推奨されます。 「13.2.10 How MySQL uses DNS」節参照。
--skip-new
Don't use new, possible wrong routines. Implies --skip-delay-key-write. This will also set default table type to ISAM. 「8.3 ISAM Tables」節参照.
--skip-stack-trace
スタックトレースを書き出しません。このオプションは、mysqld をデバッ ガ下で実行している時に有用です。 「I.1 MySQL server のデバッグ」節参照。
--skip-safemalloc
MySQL--with-debug=full で configure されている場合、す べてのプログラムがすべてのメモリ割り当てとメモリ解放をオーバーラン用にチェッ クします。このチェックはとても遅いので、メモリチェックが不要な場合、このオ プションを使用することでこれを無効にできます。
--skip-show-database
process 権限を持っていないユーザに 'SHOW DATABASE' コマンドを許し ません。
--skip-thread-priority
より速いレスポンスタイム用のスレッド優先度の使用を無効にします。
--socket=path
デフォルト /tmp/mysql.sock の代わりに、ローカル接続用に使用されるソ ケットファイル。
transaction-isolation= { READ-UNCOMMITTED | READ-COMMITTED | REPEATABLE-READ | SERIALIZABLE }
デフォルトのトランザクション isolation レベルを設定します。 「7.34 SET TRANSACTION Syntax」節参照。
-t, --tmpdir=path
一時ファイル用のパス。デフォルトの /tmp ディレクトリが一時テーブル を保持するのに小さすぎるパーティション上にある場合に有用です。
-u, --user=user_name
ユーザ user_namemysqld デーモンを実行します。このオプショ ンは、mysqld を root で起動した時に 強制されます。
-V, --version
バージョン情報を出力して終了します。

4.16.5 オプションファイル ( my.cnf )

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

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

ファイル名 意味
/etc/my.cnf 全体のオプション
DATADIR/my.cnf サーバ固有オプション
defaults-extra-file --defaults-extra-file=# で指定されたファイル
~/.my.cnf ユーザ固有オプション

DATADIRMySQL データディレクトリです (普通 バイナリ配布では `/usr/local/mysql/data' 、ソース配布では `/usr/local/var'). このディレクトリはconfigure時に決定されており、 --datadirmysqld 起動時に指定しても変更されません。 (サーバーはコマンドラインの引数を処理する前にオプションファイルを探します。 よって、--datadir 引数を指定してもオプションファイルを探す場所を指定することにはなりません。)

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

ファイル名 意味
windows-system-directory\my.ini Global options
C:\my.cnf 全体のオプション
C:\mysql\data\my.cnf サーバ固有オプション

注意: Windows では \ の代わりに / で全てのパスを記述すべきで す。\ を使用する場合、\MySQL のエスケープ文字 なので、これを二重に記述する必要があります。

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

以下のプログラムはオプションファイルをサポートします:mysql, mysqladmin, mysqld, mysqldump, mysqlimport, myisamchk and myisampack.

オプションファイルには、プログラムがサポートしているコマンドラインの 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', `\\', `\s' のエスケープシーケンスが使用できます。 (`\s' == blank).

オプションファイル例:

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

[mysqld]
port=3306
socket=/tmp/mysql.sock
set-variable = key_buffer_size=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
set-variable = connect_timeout=2

[mysql-hot-copy]
interactive-timeout

もしソース配布を持っているなら、 `my-xxxx.cnf' という名前のサンプルファイルを `support-files' ディレクトリに見ることができます。 もしバイナリ配布を使用しているなら、 `DIR/share/mysql' ディレクトリを探してください (ここで DIRMySQL がインストールされたディレクトリのパス名で、普通は `/usr/local/mysql')。 この `my-xxxx.cnf' ファイルを自分のディレクトリに `.my.cnf' という名前でコピーして使用できます。

オプションファイルをサポートするすべての MySQL クライアントは次 のオプションをサポートします:

--no-defaults オプションファイルを読み込まない。
--print-defaults プログラム名と得られる全てのオプションを出力する。
--defaults-file=full-path-to-default-file 与えられたコンフィグレーションファイルだけを使用する。
--defaults-extra-file=full-path-to-default-file グローバルコンフィグレーションファイルの後、ユーザコンフィグレーションファイルの前にこのコンフィグレーションファイルを読み込む。

注意: 上記のオプションはコマンドラインの先頭になければ働きません! ただ し、--print-defualts--defaults-xxx-file コマンドの直後 にも置けます。

開発者向け情報: オプションファイルの操作は全てのオプションをコマンドラインの引数より先に処理するように簡単に埋め込まれています。 これはオプションを最後に処理するプログラムを複数立ちあげる場合に都合よく動きます。 もしオプションファイルを読み込む機能のない古いプログラムを使用しているなら、 たった二行だけ注意して書けばいいだけです。 この動作については MySQL クライアントプログラムのコードを参考にしてください。

シェルスクリプト内では、`my_print_defaults' コマンドを使用して、コ ンフィグファイルを解析することができます:

shell> my_print_defaults client mysql
--port=3306
--socket=/tmp/mysql.sock
--no-auto-rehash

上記は、'client' と 'mysql' グループ用の全オプションを出力します。

4.17 同じマシンに多くのサーバをインストールする

同じマシン上で多くの異なる mysqld デーモン(サーバ)を動作させたい場 合があります。例えば、テスト用に MySQL の新しいバージョンを使用中の 古いバージョンと共に実行したい場合や、異なる mysqld サーバにそれを管理する 異なるユーザアクセスを与えたい場合などです。

一つの方法は、新しいサーバを次のように異なるソケットとポートで起動すること です:

shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock
shell> MYSQL_TCP_PORT=3307
shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT
shell> scripts/mysql_install_db
shell> bin/safe_mysqld &

The environment variables 付録は mysqld に影響する他の環境変数の 一覧を含んでいます。 「A Environment Variables」節参照。

この後、二つのデーモンを違うポート、ソケットで実行するように、起動スクリプトを変更します。 例えば、safe_mysqld を二つ書きますが、--socket, --port--basedir オプションをそれぞれの safe_mysqld に指定します。

safe_mysqld --default-file=path-to-option-file

少なくとも、次のオプションはサーバごとに異なるようにすべきです:

port=#
socket=path
pid-file=path

次のオプションが使用される場合、異なるようにすべきです:

log=path
log-bin=path
log-update=path
log-isam=path
bdb-logdir=path

さらに性能を求める場合、次も異なるように記述できます:

tmpdir=path
bdb-tmpdir=path

4.16.4 mysqld コマンド行オプション」節参照.

バイナリの MySQL バージョン (.tar ファイル) をインストールして、 ./bin/safe_mysqld で起動する場合、多くの場合では、追加/変更する必要 のあるオプションは safe_mysqld への socketport 引 数だけです。

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

MySQL 形式とデータファイルは、MySQL が同じベースバージョ ンである限り、同じアーキテクチャ上の異なるバージョン間でいつでも移動でき ます。現在のベースバージョンは 3 です。MySQL の実行時に 文字セットが変更された場合(これはソート順も変更します)、全てのテーブル に myisamchk -r -q を行なう必要があります。そうしなければ、インデッ クスが正しい順になりません。

もしあなたが神経質だったり新しいバージョンを恐れている場合、いつでもあな たの古い mysqldmysqld-'old-version-number' のような何 かにリネームできます。もし新しい mysqld が予期せぬ何かを行った場 合、単純にそれをシャットダウンし、古い mysqld を再起動することが できます!

アップグレード時には、もちろん、古いデータベースをバックアップもしておく べきです。

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

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

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

4.18.1 バージョン 3.22 から バージョン 3.23 へのアップグレード

MySQL バージョン 3.23 は新しい MyISAM 型のテーブルと、 古い ISAM 型のテーブルをサポートします。 バージョン 3.23 を使用する際、古いテーブル(ISAM) を変換する必要はありません。 デフォルトでは、新しく作られるテーブルが MyISAM 型になります。 (これは mysqld--default-table-type=isam オプションで 起動することにより、変更できます)。 ISAM テーブルを MyISAM に変更するには、 ALTER TABLE を使用するか、mysql_convert_table_format perl スクリプトを使用します。

バージョン 3.22 と バージョン 3.21 のクライアントは問題なく バージョン 3.23 サーバーで動作します。

以下に、バージョン 3.23 にアップグレードするときに、注目する必要があるものを列挙します:

4.18.2 バージョン 3.21 から バージョン 3.22 へのアップグレード

バージョン 3.21 と バージョン 3.22 の間には互換性に影響する変更はありません。DATE 型を 伴って生成された新しいテーブルは、日付の格納に新しい方法を使用することだ けが pitfall です。これらの新しいフィールドに古いバージョンの mysqld からアクセスすることはできません。

MySQL バージョン 3.22 インストール後、新しいサーバを開始して、 mysql_fix_privilege_tables スクリプトを実行すべきです。これは GRANT コマンドを使用するために必要な権限を追加します。これを忘れ ると、ALTER TABLECREATE/DROP INDEX を使用しようとした 時に Access denied になります。MySQL root ユーザがパスワー ドを要求する場合、mysql_fix_privilege_tables への引数としてそれを 与えてください。

C API インタフェース mysql_real_connect() は変更されました。この 関数を呼び出す古いクライアントプログラムを持っている場合は、新しい db 引数に 0 を置く(またはより速い接続のために db 要 素を送るようにクライアントをコーディングしなおす)必要があります。 mysql_real_connect() を呼び出す前に mysql_init() を呼ばなくてはなりません! この変更は、MYSQL の構造体にオプションを保存するための 新しい mysql_options() 関数を有効にします。

mysqld 変数 key_bufferkey_buffer_size に名前が 変わりました。しかし、まだ前の名前もスターとアップファイル中で使用できま す。

4.18.3 バージョン 3.20 から バージョン 3.21 へのアップグレード

既に バージョン 3.20.28 より前のバージョンが稼働していて、バージョン 3.21.x に変更したい場合は、 次を行なう必要があります:

safe_mysqld --old-protocolmysqld 3.21 サーバを起動すれ ば、バージョン 3.20 配布からのクライアントでそれを使用できます。この場合、新しいク ライアント関数 mysql_errno() はサーバのエラーは何も返さず、 CR_UNKNOWN_ERROR だけを返します (ただしクライアントのエラーについ ては働きます)。そして サーバは古い password() チェックを新しいものの代わ りに使用します。

mysqld--old-protocol オプションを使わない場合、 次の変更をする必要があります:

MySQL バージョン 3.20.28 とそれ以降は、クライアントに影響を及ぼさずに、新 しい user テーブル形式を処理することができます。バージョン 3.20.28 より前の MySQL バージョンを持っている場合は、user テーブルを変換 すると、パスワードはその上ではもう働きません。安全のため、最初に少なくと も バージョン 3.20.28 にアップグレードし、それから バージョン 3.21.x に アップグレードすべきです。

新しいクライアントコードは バージョン 3.20.x mysqld サーバで動作するので、 もし バージョン 3.21.x で問題があった場合は、クライアントをもう一度再コンパイルする必 要はなく、古い バージョン 3.20.x サーバを使用することができます。

mysqld--old-protocol オプションを使用しない場合、古い クライアントはエラーメッセージを発します:

ERROR: Protocol mismatch. Server Version = 10 Client Version = 9

新しい Perl インタフェース DBI/DBD は古い mysqlperl インタフェースもサポートします。mysqlperl を使用する場合に行う必 要のある変更は、connect() 関数の引数の変更だけです。新しい引数は: host, database, user, password (userpassword 引数の順番が変更されました)。 「24.2.1.1 The DBI Interface」節参照.

次の変更は古いアプリケーションでのクエリに影響します:

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

もし、MySQL バージョン 3.23 を使用しているならば、 違うアーキテクチャのマシンに、.frm, .MYI,.MYD ファイルを コピーすることが出来ます。 ただし、両者間で、同じ浮動小数点のフォーマットをサポートしている場合に限ります。 (MySQL takes care of any byte swapping issues).

現在 MySQL ISAM データファイルとインデックスファイル ( `*.ISD'`*.ISM' ファイル) はアーキテクチャ依存で、 いくつかのケースでは OS 依存です。 アプリケーションを、現在のマシンとは異なるアーキテクチャ/OS を 持つ他のマシンに移したい場合は、単純にファイルを他のマシンにコピーするこ とでデータベースを移行しようとすべきではありません。mysqldump を 使用すべきです。

デフォルトでは mysqldump は、完全な SQL ステートメントファイルを 生成します。それからそのファイルを他のマシンへ転送し、mysql クラ イアントへの入力として与えることができます。

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

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

shell> mysqladmin -h 'other hostname' create db_name
shell> mysqldump --opt db_name \
        | mysql -h 'other hostname' db_name

遅いネットワーク上でリモートマシンからデータベースをコピーしたい場合は、 次を使用できます:

shell> mysqladmin create db_name
shell> mysqldump -h 'other hostname' --opt --compress db_name \
        | mysql db_name

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

shell> mysqldump --quick db_name | gzip > db_name.contents.gz

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

shell> mysqladmin create db_name
shell> gunzip < db_name.contents.gz | mysql db_name

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

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

shell> mkdir DUMPDIR
shell> mysqldump --tab=DUMPDIR db_name

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

shell> mysqladmin create db_name           # create database
shell> cat DUMPDIR/*.sql | mysql db_name   # create tables in database
shell> mysqlimport db_name DUMPDIR/*.txt   # load data into tables

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

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


Go to the first, previous, next, last section, table of contents.