この章では、MySQL の入手方法とインストール方法について説明します。
この章では、それぞれのプラットフォームのネイティブパッケージ化形式を使用してパッケージが提供されているプラットフォームへの MySQL のインストールについて説明します。ただし、その他のさまざまなプラットフォーム用の MySQL バイナリディストリビューションも用意されています。すべてのプラットフォームに適用されるパッケージの一般インストール手順については、section 2.2.12 MySQL バイナリディストリビューションのインストール を参照してください。
入手できるその他のバイナリディストリビューションとその入手方法の詳細については、section 2.2 インストール関連の一般的な問題 を参照してください。
Windows での MySQL のインストールは、以下のステップになります。
Windows 用 MySQL は、以下の2種類の形式で提供されます。
一般的には、バイナリディストリビューションを使用することをお勧めします。このディストリビューションの方が単純で、MySQL のセットアップと実行に追加のツールを必要としないからです。
Windows で MySQL を実行する場合の要件は以下のとおりです。
ZIP プログラム。
MyODBC ドライバも必要である。 See section 11.2 MySQL の ODBC サポート。
MAX_ROWS と AVG_ROW_LENGTH を必ず使用する。
See section 6.5.3 CREATE TABLE 構文。
バイナリディストリビューションを使用して Windows に MySQL をインストールするには、以下の手順に従って行います。
C:\> NET STOP MySQLアップグレード後に別のサーバを使用する予定の場合(
mysqld ではなく mysqld-max を実行する場合など)は、以下のように入力して既存のサービスを削除する。
C:\mysql\bin> mysqld --removeアップグレード後にサービスを再インストールして適切なサーバを使用することができる。 MySQL サーバをサービスとして実行していない場合は、以下のように入力してサーバを停止する。
C:\mysql\bin> mysqladmin -u root shutdown
WinMySQLAdmin プログラムを実行している場合は、このプログラムを終了する。
setup.exe プログラムを実行して、インストールプロセスを開始する。
デフォルトのディレクトリ(`C:\mysql')以外の場所に MySQL をインストールする場合は、Browse ボタンを使用して、目的のディレクトリを指定する。MySQL をデフォルト以外の場所にインストールすると、サーバを起動するたびにその場所を指定しなければならなくなる。これを行う最も簡単な方法は、section 2.1.1.3 Windows MySQL 環境の準備 で説明するように、オプション設定ファイルを使用することである。
サーバを実行するときに起動オプションを指定する必要がある場合は、コマンドラインで起動オプションを指定するか、オプション設定ファイルに起動オプションを配置します。サーバを起動するたびに使用されるオプションの場合、オプション設定ファイルを使用して MySQL のオプションを指定する方が便利です。この方法は、以下のような場合に特に便利です。
InnoDB トランザクションテーブルを使用するには、InnoDB のデータファイルとログファイルを格納するための 2 つのディレクトリ(`C:\ibdata' と `C:\iblogs' など)を手動で作成しなければならない。
また、section 7.5.3 InnoDB 起動オプションで説明するように、オプション設定ファイルに行を追加する必要もある
(MySQL 4.0 以降では、InnoDB はデフォルトでデータディレクトリにデータファイルとログファイルを作成する。したがって、InnoDB の設定は必須ではない。
ただし、必要に応じて明示的に設定することもできるが、その場合もオプション設定ファイルを使用すると便利である)。
Windows では、MySQL インストーラは、MySQL のインストール先のディレクトリの直下にデータディレクトリを格納します。別の場所のデータディレクトリを使用する場合は、`data' ディレクトリの内容全体をその新しい場所にコピーしてください。たとえば、デフォルトでは、インストーラは、MySQL を `C:\mysql' に、データディレクトリを `C:\mysql\data' にそれぞれ格納します。`E:\mydata' のデータディレクトリを使用する場合は、以下の 2 つの処理を行う必要があります。
--datadir オプションを使用して新しいデータディレクトリの場所を指定する。
MySQL サーバは、Windows 上で起動すると、Windows ディレクトリにある `my.ini' ファイル内と `C:\my.cnf' ファイル内でオプションを探します。通常、Windows ディレクトリには、`C:\WINDOWS' や `C:\WinNT' のような名前が付いています。以下のコマンドを使用して、%WINDIR% 環境変数の値から正確な場所を判別できます。
C:\> echo %WINDIR%
MySQL は、最初に `my.ini' ファイル内でオプションを探し、次に `my.cnf' ファイル内でオプションを探します。しかし、混乱を避けるために、1 つのファイルだけを使用することをお勧めします。C: ドライブがブートドライブではないときに PC がブートローダを使用する場合は、`my.ini' ファイルしか使用できません。どちらのファイルを使用する場合でも、ファイルはプレーンテキストファイルでなければなりません。
オプション設定ファイルの作成や修正は、Notepad プログラムなどのテキストエディタを使用して行うことができます。たとえば、MySQL が `D:\mysql' にインストールされていて、データディレクトリが `D:\mydata\data' として配置されている場合は、オプション設定ファイルを作成して、以下のように [mysqld] セクションを設定して、basedir パラメータと datadir パラメータの値を指定できます。
[mysqld] # set basedir to your installation path basedir=D:/mysql # set datadir to the location of your data directory datadir=D:/mydata/data
注意: Windows のパス名は、オプション設定ファイル内でバックスラッシュではなくスラッシュを使用して指定します。バックスラッシュを使用する場合は、スラッシュを二重にする必要があります。
オプション設定ファイルを管理するもう 1 つの方法は、WinMySQLAdmin ツールを使用する方法です。MySQL インストールの `bin' ディレクトリに、WinMySQLAdminとその使用説明が含まれたヘルプファイルがあります。WinMySQLAdmin にはオプション設定ファイルを編集する機能がありますが、以下の点に注意してください。
WinMySQLAdmin は、`%WINDIR%\my.ini' ファイルだけを使用する。
WinMySQLAdmin は、`C:\my.cnf' ファイルを検出すると、このファイルの名前を `C:\my_cnf.bak' に変更して事実上無効にする。
これで、サーバの起動をテストする準備ができました。
MySQL 3.23.38 以降、Windows ディストリビューションに標準の MySQL と MySQL-Max の両方のサーババイナリが含まれるようになりました。 以下に各種の MySQL サーバの一覧を示します。この中からサーバを選択できます。
| バイナリ | 説明 |
mysqld | デバッグコードおよび自動メモリ割り当てのチェック、シンボリックリンクの機能、InnoDB テーブルおよび BDB テーブルを組み込んでコンパイルされている。
|
mysqld-opt | 最適化されたバイナリ。バージョン 4.0 以降、InnoDB が有効になっている。4.0 より前のバージョンでは、このサーバにトランザクションテーブルの機能は含まれていない。
|
mysqld-nt | 名前付きパイプの機能を組み込んで NT/2000/XP 向けに最適化されたバイナリ。 |
mysqld-max | シンボリックリンクと、InnoDB テーブルおよび BDB テーブルを組み込んで最適化されたバイナリ。
|
mysqld-max-nt | mysqld-max と似ているが、名前付きパイプの機能を組み込んでコンパイルされている。
|
上記のバイナリはすべて、最新の Intel プロセッサ向けに最適化されていますが、Intel i386 クラス以上のすべてのプロセッサで動作します。
mysqld-nt サーバまたは mysqld-max-nt サーバは、名前付きパイプ接続をサポートします。これらのサーバのどちらかを使用する場合、名前付きパイプの使用には以下の制約があることに留意してください。
--enable-named-pipe オプションを使用してサーバを起動した場合にのみ、名前付きパイプが有効になる。
Windows 95、98、または Me では、MySQL クライアントは常に TCP/IP を使用してサーバに接続します。Windows NT、2000、XP などの NT ベースのシステムでは、クライアントには 2 つの選択肢があります。つまり、TCP/IP を使用するか、サーバが名前付きパイプ接続をサポートしている場合は名前付きパイプを使用します。
サーババイナリの実行の詳細については、section 2.1.1.3 Windows MySQL 環境の準備 を参照してください。
このセクションでは、MySQL サーバの起動方法の一般的な概要を説明します。 特定のバージョンの Windows に固有の詳細については、後続の各セクションで説明します。
これらの各セクションで示される例では、MySQL がデフォルトの場所である `C:\mysql' にインストールされていることが前提となっています。MySQL を別の場所にインストールしている場合は、例に示されているパス名を調整してください。
テストは、コンソールウィンドウ(``DOS 窓'')のコマンドプロンプトから行うことをお勧めします。この方法をとると、サーバからのステータスメッセージを見やすいウィンドウで表示することができます。設定に問題がある場合に、これらのメッセージによって問題の特定と修正が容易になります。
サーバが格納されているディレクトリにいることを確認してから、以下のコマンドを入力します。
shell> mysqld --console
InnoDB が含まれているサーバの場合は、サーバの起動時に以下のメッセージが表示されます。
InnoDB: The first specified datafile c:\ibdata\ibdata1 did not exist: InnoDB: a new database to be created! InnoDB: Setting file c:\ibdata\ibdata1 size to 209715200 InnoDB: Database physically writes the file full: wait... InnoDB: Log file c:\iblogs\ib_logfile0 did not exist: new to be created InnoDB: Setting log file c:\iblogs\ib_logfile0 size to 31457280 InnoDB: Log file c:\iblogs\ib_logfile1 did not exist: new to be created InnoDB: Setting log file c:\iblogs\ib_logfile1 size to 31457280 InnoDB: Log file c:\iblogs\ib_logfile2 did not exist: new to be created InnoDB: Setting log file c:\iblogs\ib_logfile2 size to 31457280 InnoDB: Doublewrite buffer not found: creating new InnoDB: Doublewrite buffer created InnoDB: creating foreign key constraint system tables InnoDB: foreign key constraint system tables created 011024 10:58:25 InnoDB: Started
サーバが起動シーケンスを終了すると、クライアント接続をサービスする準備ができたことを示す以下のようなメッセージが表示されます。
mysqld: ready for connections Version: '4.0.14-log' socket: '' port: 3306
続いて、サーバが生成したその他の診断出力がコンソールに出力されます。新しいコンソールウィンドウを開いて、そのウィンドウでクライアントプログラムを実行することができます。
--console オプションを省略すると、診断出力はデータディレクトリ内のエラーログに書き込まれます。エラーログは、`.err' 拡張子を持つファイルです。
Windows 95、98、または Me では、MySQL は TCP/IP を使用してクライアントをサーバに接続します(これによって、ネットワーク上のすべてのマシンが MySQL サーバに接続できます)。そのため、MySQL を起動する前に、TCP/IP がインストールされていることを確認する必要があります。TCP/IP は、Windows の CD-ROM に収められています。
注意: 旧リリースの Windows 95(OSR2 など)を使用している場合は、旧バージョンの Winsock パッケージがインストールされている可能性があります。MySQL は Winsock 2 を必要とします。最新の Winsock は、http://www.microsoft.com/ から入手できます。Windows 98 は、Winsock 2 ライブラリを備えています。したがって、ライブラリを更新する必要はありません。
mysqld サーバを起動するには、コンソールウィンドウ(``DOS'' ウィンドウ)を起動して、以下のコマンドを入力します。
shell> C:\mysql\bin\mysqld
このコマンドによって、バックグラウンドで mysqld が起動されます。したがって、サーバが起動した後、別のコマンドプロンプトが表示されます。注意: Windows NT、2000、XP でこの方法でサーバを起動すると、サーバはフォアグラウンドで実行され、サーバの実行が終了するまでコマンドプロンプトは表示されません。
そのため、サーバの実行中は、別のコンソールウィンドウを開いてクライアントプログラムを実行する必要があります。
以下のコマンドを実行して、MySQL サーバを停止することができます。
shell> C:\mysql\bin\mysqladmin -u root shutdown
このコマンドは、MySQL 管理ユーティリティ mysqladmin を起動して、サーバに接続してシャットダウンするよう指示します。このコマンドは、MySQL 権限システムでのデフォルトの管理者アカウントである root として接続します。MySQL 権限システム内のユーザは、Windows のログインユーザとは完全に独立しています。
mysqld が起動しない場合は、エラーログをチェックして、問題の原因を示すメッセージが書き込まれていないかどうかを確認してください。
エラーログは、`C:\mysql\data' ディレクトリにあります。これは、`.err' というサフィックスが付いたファイルです。また、mysqld --console としてサーバを起動することもできます。その場合、問題を解決するのに役立つ有益な情報が画面に表示されます。
最後の選択肢は、--standalone --debug を指定して mysqld を起動する方法です。
この場合、mysqld は、mysqld が起動しない理由をログファイル `C:\mysqld.trace' に書き込みます。 See section E.1.2 トレースファイルの作成。
mysqld --help を使用すると、mysqld が認識できるすべてのオプションが表示されます。
NT ファミリ(Windows NT、2000、または XP)では、MySQL を Windows サービスとしてインストールして実行することをお勧めします。Windows の起動時または停止時に、MySQL サーバが自動的に起動または停止されます。サービスとしてインストールされたサーバは、NET コマンドを使用してコマンドラインから制御するか、Services ユーティリティを使用して制御することができます。
Services ユーティリティ(Windows Service Control Manager)は、Windows Control Panel(Windows 2000 のAdministrative Toolsの下)にあります。このコマンドラインからサーバのインストールや削除の操作を実行している間は、Services ユーティリティを終了することをお勧めします。これによって、ある種の予期しないエラーが防止されます。
Windows NT 4 で、MySQL を TCP/IP と連動させるには、Service Pack 3 以上をインストールする必要があります。
MySQL を Windows サービスとしてインストールする前に、まず、以下のコマンドを使用して現在のサーバを停止してください(サーバが稼動している場合)。
shell> C:\mysql\bin\mysqladmin -u root shutdown
このコマンドは、MySQL 管理ユーティリティ mysqladmin を起動して、サーバに接続してシャットダウンするよう指示します。このコマンドは、MySQL 権限システム内のデフォルトの管理者アカウントである root として接続します。MySQL 権限システム内のユーザは、Windows のログインユーザから完全に独立しています。
次に、以下のコマンドでサーバをサービスとしてインストールします。
shell> mysqld --install
サーバ名だけを使用して mysqld をサービスとしてインストールする際に問題が発生した場合は、完全パス名を使用してインストールしてみてください。
shell> C:\mysql\bin\mysqld --install
MySQL 4.0.2 以降では、--install オプションの後ろに特定のサービス名を指定できます。さらに、MySQL 4.0.3 以降では、サービス名の後ろに --defaults-file オプションを指定して、起動時のオプションを取得する場所をサーバに示すことができます。サーバが使用するサービス名とオプション設定ファイルは、以下のルールに従って決定されます。
MySQL を使用し、デフォルトのオプション設定ファイルの [mysqld] グループからオプションを読み取る。
--install オプションの後ろにサービス名を指定すると、サーバは [mysqld] オプショングループを無視し、そのサービスと同じ名前のグループからオプションを読み取る。サーバは、デフォルトのオプション設定ファイルからオプションを読み取る。
--defaults-file オプションを指定すると、サーバはデフォルトのオプション設定ファイルを無視し、指定ファイルの [mysqld] グループだけからオプションを読み取る。
注意: 4.0.17 より前の MySQL バージョンでは、Windows サービスとしてインストールされたサーバのパス名やサービス名にスペースが含まれていると、起動時に問題が発生します。したがって、`C:\Program Files' などのディレクトリに MySQL をインストールしたり、スペースを含んだサービス名を使用したりすることは避けてください。
通常どおりに --install を使用してサーバをインストールした場合は、サーバは MySQL のサービス名でインストールされます。
さらに複雑な例として、以下のコマンドを考察してみます。
shell> C:\mysql\bin\mysqld --install mysql --defaults-file=C:\my-opts.cnf
ここでは、--install オプションの後ろにサービスを指定しています。このコマンドで --defaults-file オプションを指定しないと、サーバは標準のオプション設定ファイルから [mysql] グループを読み取ります(このオプショングループは mysql クライアントプログラムが使用するものであるため、これは推奨できません)。ただし、--defaults-file オプションを指定しているため、サーバは、指定ファイルの [mysqld] オプショングループだけからオプションを読み取ります。
MySQL サービスを起動する前に、Windows サービス ユーティリティで ``Start parameters'' としてオプションを指定することもできます。
MySQL サーバをサービスとしてインストールすると、Windows が起動するたびに MySQL サービスが自動的に起動されます。サービスは、サービス ユーティリティから直接起動するか、コマンド NET START MYSQL を使用して起動することもできます。NET コマンドは、ケース依存ではありません。
注意: mysqld は、サービスとして実行されるとコンソールウィンドウにアクセスできないので、コンソールウィンドウにメッセージは表示されません。mysqld が起動しない場合は、エラーログをチェックして、問題の原因を示すメッセージが書き込まれていないかどうかを確認してください。
エラーログは、`C:\mysql\data' ディレクトリにあります。これは、`.err' というサフィックスが付いたファイルです。
サービスとして稼動している mysqld は、サービス ユーティリティ、NET STOP MYSQL コマンド、または mysqladmin shutdown コマンドを使用して停止することができます。Windows がシャットダウンするときにサービスが稼動している場合は、Windows によってサーバが自動的に停止されます。
MySQL バージョン 3.23.44 からは、ブートプロセス中にサービスを自動的に起動させたくない場合、Manual サービスとしてサーバをインストールすることができます。その場合は、以下のように、--install オプションではなく、--install-manual オプションを使用します。
shell> C:\mysql\bin\mysqld --install-manual
サービスとしてインストールされたサーバを削除するには、サーバが稼動している場合は、まずサーバを停止します。次に、--remove オプションを使用して、サーバを削除します。
shell> mysqld --remove
MySQL サービス自動シャットダウンの 1 つの問題は、3.23.49 より前のバージョンの MySQL の場合、Windows がシャットダウンの完了まで数秒間しか待機せず、この制限時間を超過するとデータベースサーバプロセスが強制終了されるという点です。これによって、問題が発生することがありました(たとえば、InnoDB ストレージエンジンは次回の起動時にクラッシュリカバリを実行する必要があるなど)。MySQL バージョン 3.23.49 以降は、MySQL サーバのシャットダウンの完了までの Windows の待機時間が延長されています。この待機時間でもインストールに十分でないと思われる場合、最も安全なのは、MySQL サーバをサービスとして実行しないことです。代わりに、MySQL サーバの起動はコマンドラインプロンプトから行い、停止は mysqladmin shutdown を使用して行ってください。
MySQL サーバの停止時に待機時間を延長するよう Windows に指示するための変更は、Windows 2000 および XP には有効ですが、Windows NT には有効ではありません。Windows NT の場合、サービスのシャットダウンのための待機時間は 20 秒だけで、この時間が経過すると、サービスプロセスは強制終了されます。レジストリエディタ `\winnt\system32\regedt32.exe' をたち上げ、レジストリツリー内の HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control の WaitToKillServiceTimeout の値を編集して、このデフォルト値を増やすことができます。デフォルト値より大きい新しい値をミリ秒単位で指定します(たとえば、値 120000 を指定すると、Windows NT は最大で 120 秒間待機します)。
mysqld をサービスとして起動しない場合は、NT ベース以外の Windows のバージョンの場合と同様にコマンドラインから起動することができます。手順については、section 2.1.1.6 Windows 95、98、または Me での MySQL の起動 を参照してください。
MySQL は、すべての Windows プラットフォームで TCP/IP をサポートします。mysqld-nt サーバと mysql-max-nt サーバは、NT、2000、および XP で名前付きパイプをサポートします。
ただし、デフォルトでは、プラットフォームに関係なく TCP/IP が使用されます。
3.23.50 以降のバージョンの mysqld-nt および mysql-max-nt の場合、--enable-named-pipe オプションを使用してこれらのサーバを起動したときにのみ名前付きパイプが有効になります。
--pipe オプションを指定するか、ホスト名として .(ピリオド)を指定して、MySQL クライアントに強制的に名前付きパイプを使用させることができます。パイプの名前は、--socket オプションを使用して指定します。MySQL 4.1 では、--protocol=PIPE オプションを使用してください。
以下のいずれかのコマンドを実行して、MySQL サーバが動作しているかどうかをテストすることができます。
C:\> C:\mysql\bin\mysqlshow C:\> C:\mysql\bin\mysqlshow -u root mysql C:\> C:\mysql\bin\mysqladmin version status proc C:\> C:\mysql\bin\mysql test
Windows 9x/Me 上で、接続に対する mysqld の応答が遅い場合は、使用している DNS に問題がある可能性があります。その場合は、--skip-name-resolve オプションを使用して mysqld を起動し、MySQL 権限テーブルの Host カラムの localhost と IP 番号だけを使用します。
MySQL コマンドラインツールには以下の 2 つのバージョンがあります。
| バイナリ | 説明 |
mysql | ネイティブ Windows 上にコンパイルされ、限られたテキスト編集機能を提供する。 |
mysqlc | Cygnus GNU コンパイラとライブラリを組み込んでコンパイルされ、readline の編集機能を提供する。
|
mysqlc を使用する場合は、mysqlc が検出できる場所に `cygwinb19.dll' ライブラリのコピーをインストールする必要があります。MySQL の最新のディストリビューションでは、mysqlc と同じディレクトリにこのライブラリが含まれています(ご使用の MySQL インストールの基本ディレクトリの下の `bin' ディレクトリ)。ご使用のディストリビューションの `bin' ディレクトリに cygwinb19.dll ライブラリがない場合は、lib ディレクトリ内でこのライブラリを探し、Windows システムディレクトリ(`\Windows\system' か、これに類似した場所)にコピーします。
Windows のデフォルトの権限の設定では、ローカルユーザーは、パスワードなしで全データベースに対して全ての操作が行えるようになっています。MySQL をより安全にするために、すべてのユーザにパスワードを設定し、Host='localhost' と User='' が記述された mysql.user テーブルのレコードを削除してください。
また、root ユーザのパスワードも追加してください。以下の例では、まず全権限を持つ匿名ユーザを削除し、次に root ユーザパスワードを設定します。
C:\> C:\mysql\bin\mysql mysql mysql> DELETE FROM user WHERE Host='localhost' AND User=''; mysql> FLUSH PRIVILEGES; mysql> QUIT C:\> C:\mysql\bin\mysqladmin -u root password your_password
パスワードを設定した後で mysqld サーバをシャットダウンする場合は、このコマンドを使用してシャットダウンすることができます。
C:\> mysqladmin --user=root --password=your_password shutdown
MySQL バージョン 3.21 の古い Windows シェアウェアディストリビューションのサーバを使用している場合、パスワードを設定するための mysqladmin コマンドはparse error near 'SET password' というエラーによって失敗します。この問題は、このバージョンより新しい MySQL にアップグレードすることで解決されます。
最新バージョンの MySQL では、GRANT コマンドと REVOKE コマンドを使用して、新しいユーザの追加と特権の変更を簡単に行うことができます。
See section 4.4.1 GRANT および REVOKE の構文。
Linux に MySQL をインストールする場合は、RPM パッケージを使用することをお勧めします。MySQL RPM は、現在、SuSE Linux 7.3 システム上でビルドされていますが、rpm をサポートし glibc を使用するほとんどのバージョンの Linux 上で動作します。
RPM ファイルに関する問題が発生した場合(たとえば、``Sorry, the host 'xxxx' could not be looked up'' というエラーが表示された場合)は、section 2.6.2.1 Linux の注意事項 (バイナリディストリビューション) を参照してください。
ほとんどの場合、MySQL-server パッケージと MySQL-client パッケージをインストールするだけで済みます。最小インストールの場合は、その他のパッケージは必要ありません。
追加機能を備えた MySQL Max サーバを実行したい場合は、MySQL-server RPM をインストールした後に MySQL-Max RPM をインストールしてください。
See section 4.8.5 mysqld-max(拡張 mysqld サーバ)。
MySQL 4.0 パッケージのインストール中に依存関係エラーが発生した場合(たとえば、``error: removing these packages would break dependencies: libmysqlclient.so.10 is needed by ...'')、MySQL-shared-compat パッケージもインストールする必要があります。このパッケージには、下位互換性のために両方の共有ライブラリ(MySQL 4.0 の libmysqlclient.so.12 と MySQL 3.23 の libmysqlclient.so.10)が含まれています。
多くの Linux ディストリビューションにはまだ MySQL 3.23 が同梱されており、アプリケーションを動的にリンクしてディスク領域を節約しています。これらの共有ライブラリが別個のパッケージ(MySQL-shared など)に含まれている場合は、このパッケージをインストールして、MySQL サーバおよびクライアントのパッケージをアップグレードするだけで十分です(これらのパッケージは静的にリンクされ共有ライブラリに依存しません)。MySQL サーバと同じパッケージに共有ライブラリが含まれているディストリビューションの場合(Red Hat Linux など)は、バージョン 3.23 の MySQL-shared RPM をインストールするか、MySQL-shared-compat パッケージを使用します。
以下の RPM パッケージが用意されています。
MySQL-server-VERSION.i386.rpm
MySQL サーバ。別のマシン上で稼動している MySQL サーバに接続するだけの場合を除いて、このパッケージが必要。注意: MySQL 4.0.10 より前のバージョンでは、このパッケージは MySQL-VERSION.i386.rpm と呼ばれていた。
MySQL-Max-VERSION.i386.rpm
MySQL Max サーバ。このサーバには、MySQL-server RPM のサーバには含まれていない追加機能がある。MySQL-Max RPM は MySQL-server RPM に依存するので、まず MySQL-server RPM をインストールしておく必要がある。
MySQL-client-VERSION.i386.rpm
標準 MySQL クライアントプログラム。ほとんどの場合、このパッケージをインストールする必要がある。
MySQL-bench-VERSION.i386.rpm
テストとベンチマーク。Perl と DBD-mysql モジュールを必要とする。
MySQL-devel-VERSION.i386.rpm
Perl モジュールなど、その他の MySQL クライアントをコンパイルする場合に必要なライブラリとインクルードファイル。
MySQL-shared-VERSION.i386.rpm
このパッケージには、特定の言語とアプリケーションが MySQL を動的にロードして使用するために必要な共有ライブラリ(libmysqlclient.so*)が含まれている。
MySQL-shared-compat-VERSION.i386.rpm
このパッケージには、MySQL 3.23 と MySQL 4.0 の両方の共有ライブラリが含まれている。MySQL 3.23 に動的にリンクされるアプリケーションをインストールしている場合に、ライブラリの依存関係を壊さずに MySQL 4.0 にアップグレードしたいときは、MySQL-shared の代わりにこのパッケージをインストールする。このパッケージは、MySQL 4.0.13 以降のバージョンで用意されている。
MySQL-embedded-VERSION.i386.rpm
組み込みの MySQL サーバライブラリ(MySQL 4.0 以降)
MySQL-VERSION.src.rpm
このパッケージには、これまでのすべてのパッケージのソースコードが含まれている。このパッケージを使用して、他のアーキテクチャ(Alpha や SPARC など)上で RPM を再構築することもできる。
RPM パッケージ(MySQL-server RPM など)内のすべてのファイルを確認するには、以下のコマンドを実行します。
shell> rpm -qpl MySQL-server-VERSION.i386.rpm
最小インストールを行うには、以下のコマンドを実行します。
shell> rpm -i MySQL-server-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm
クライアントパッケージだけをインストールするには、以下のコマンドを実行します。
shell> rpm -i MySQL-client-VERSION.i386.rpm
RPM には、パッケージをインストールする前にその完全性と信頼性を検証する機能が備えられています。この機能の詳細については、section 2.2.2 MD5 チェックサムまたは GnuPG によるパッケージ完全性の検証 を参照してください。
サーバ RPM は、`/var/lib/mysql' ディレクトリの下にデータを配置します。また、ブート時にサーバを自動的に起動するための適切なエントリを `/etc/init.d/' に作成します(したがって、旧バージョンのインストールを実行しており、起動スクリプトに変更を加えている場合、新しいバージョンの RPM のインストール時にそのスクリプトが失われないようにするためにはスクリプトのコピーを作成する必要があります)。システム起動時に MySQL が自動的に起動されるようにする方法については、section 2.4.3 MySQL を自動的に起動および停止する を参照してください。
`/etc/init.d' の初期化スクリプトをサポートしていない旧バージョンの Linux ディストリビューションに MySQL RPM をインストールする(直接または symlink を使用して)場合は、初期化スクリプトが実際にインストールされる場所を指すシンボリックリンクを作成してください。たとえば、その場所が `/etc/rc.d/init.d' である場合、RPM をインストールする前に以下のコマンドを使用して、その場所を指すシンボリックリンクとして `/etc/init.d' を作成します。
shell> cd /etc; ln -s rc.d/init.d .
ただし、`/etc/init.d' を使用するこの新しいディレクトリレイアウトは、LSB(Linux Standard Base)に準拠するために必要であるので、最新のすべての主要 Linux ディストリビューションではすでにサポートされています。
インストールする RPM ファイルに MySQL-server が含まれている場合は、インストール後に mysqld デーモンが起動します。
これで、MySQL の使用を開始できるようになりました。
See section 2.4 インストール後の設定とテスト。
何か問題があった場合は、バイナリインストールの章を参照してください。 See section 2.2.12 MySQL バイナリディストリビューションのインストール。
MySQL 4.0.11 からは、バイナリ tarball ディストリビューションではなく Mac OS X PKG バイナリパッケージを使用して、Mac OS X 10.2(``Jaguar'')に MySQL をインストールできるようになりました。注意: このパッケージは、これより古いバージョンの Mac OS X(10.1.x など)はサポートしていません。
パッケージは、ディスクイメージ(.dmg)ファイル内にあります。まず、ファインダ内でこのファイルのアイコンをダブルクリックしてマウントする必要があります。ディスクイメージファイルをマウントすると、イメージがマウントされその内容が表示されます。
注意: インストールを続行する前に、MySQL Manager Application(Mac OS X Server 上で)を使用するかコマンドラインで mysqladmin shutdown を使用して、稼動しているすべての MySQL サーバインスタンスを必ずシャットダウンしてください。
MySQL PKG を実際にインストールするには、パッケージのアイコンをダブルクリックします。これにより、Mac OS Package Installer が起動されます。このインストーラの指示に従って MySQL のインストールを行います。
MySQL の Mac OS X PKG は、自身を `/usr/local/mysql-<version>' にインストールします。また、新しい場所を指すシンボリックリンク `/usr/local/mysql' もインストールします。`/usr/local/mysql' という名前のディレクトリがすでに存在する場合は、まずそのディレクトリの名前を `/usr/local/mysql.bak' に変更します。さらに、インストール後に mysql_install_db を実行して、mysql データベースに権限テーブルをインストールします。
インストールレイアウトは、バイナリディストリビューションのインストールレイアウトと類似しています。つまり、すべての MySQL バイナリが `/usr/local/mysql/bin' ディレクトリに配置されます。 MySQL ソケットファイルは、デフォルトで `/tmp/mysql.sock' として作成されます。 See section 2.2.8 インストールレイアウト。
MySQL インストールには、mysql という名前の Mac OS X ユーザアカウントが必要です(Mac OS X 10.2 以降の場合、この名前を持つユーザアカウントがデフォルトで存在します)。
Mac OS X Server を実行している場合、MySQL はすでにインストールされています。
ここでは、公式の MySQL Mac OS X PKG のインストールについてのみ説明します。必ず、MySQL のインストールに関する Apple のヘルプを参照してください(``Help View'' アプリケーションを実行して、``Mac OS X Server'' ヘルプを選択し、``MySQL'' を検索して、``Installing MySQL'' という項目を参照してください)。
特に、Mac OS X Server 上のプリインストール版の MySQL は、mysqld_safe コマンドではなく safe_mysqld コマンドで起動することに注意してください。
http://www.entropy.ch から入手した Marc Liyanage の Mac OS X 用 MySQL パッケージを使用している場合は、同氏のページに示されているバイナリインストールレイアウトによるパッケージの更新手順説明に従うだけで済みます。
Marc の 3.23.xx バージョンまたは Mac OS X Server バージョンの MySQL から公式の MySQL PKG にアップグレードする場合は、いくつかの新しいセキュリティ特権が追加されているので、既存の MySQL 特権テーブルを現在の形式に変換する必要もあります。 See section 2.5.6 権限テーブルのアップグレード。
また、システムのブートアップ時に MySQL を自動的に起動する場合は、MySQL Startup Item をインストールする必要があります。MySQL 4.0.15 からは、MySQL Startup Item は Mac OS X インストールディスクイメージの一部として別個のインストールパッケージとなっています。MySQLStartupItem.pkg アイコンをダブルクリックし、指示に従ってインストールします。
注意: このインストールは 1 回だけ行います。MySQL パッケージをアップグレードするたびに Startup Item をインストールする必要はありません。
Mac OS X パッケージインストーラにバグがあるため、インストール先ディスク選択画面に You cannot install this software on this disk. (null) というエラーメッセージが表示されることがあります。このエラーが発生した場合は、Go Back ボタンをクリックして前の画面に戻ります。次に、Continue をクリックして、もう一度インストール先ディスク選択画面に進み、適切なインストール先ディスクを選択することができます。この問題は、Apple に報告済みで、現在同社で調査中です。
Startup Item は、`/Library/StartupItems/MySQL' にインストールされます。
これによって、システム設定ファイル `/etc/hostconfig' に変数 MYSQLCOM=-YES- が追加されます。MySQL の自動起動を無効にする場合は、この変数を MYSQLCOM=-NO- に変更します。
Mac OS X Server では、Startup Item インストールスクリプトが自動的に `/etc/hostconfig' の変数 MYSQL を MYSQL=-NO- に変更して、デフォルト MySQL インストールの起動を無効にします。これは、ブートアップ時のコンフリクトを回避するために行われます。ただし、すでに稼動している MySQL サーバがシャットダウンされることはありません。
インストール後は、ターミナルウィンドウで以下のコマンドを実行して MySQL を起動することができます。この作業を行うには管理者特権が必要であることに注意してください。
Startup Item をインストールした場合は、以下のコマンドを入力します。
shell> sudo /Library/StartupItems/MySQL/MySQL start (必要ならパスワードを入力) (Control-D か "exit" を入れてシェルから抜ける)
Startup Item を使用しない場合は、以下のコマンドシーケンスを入力します。
shell> cd /usr/local/mysql shell> sudo ./bin/mysqld_safe (必要ならパスワードを入力) (Control-Z) shell> bg (Control-D か "exit" を入れてシェルから抜ける)
これで、`/usr/local/mysql/bin/mysql' などを実行して MySQL サーバに接続することができるようになりました。
初めて MySQL をインストールした場合は、必ず、MySQL root ユーザのパスワードを設定してください。
パスワードの設定は、以下の 2 つのコマンドを使用して行います。
/usr/local/mysql/bin/mysqladmin -u root password <password> /usr/local/mysql/bin/mysqladmin -u root -h `hostname` password <password>
2 行目の hostname コマンドは、必ず、バッククォート(`)で囲んでください。そうすることで、シェルは、このコマンドをその出力(このシステムのホスト名)に置き換えることができます。
以下のようにシェルのリソースファイルにエイリアスを追加して、コマンドラインから mysql および mysqladmin にアクセスすることもできます。
alias mysql '/usr/local/mysql/bin/mysql' alias mysqladmin '/usr/local/mysql/bin/mysqladmin'
あるいは、たとえば以下の行を `$HOME/.tcshrc' に追加して、$PATH 環境変数に /usr/local/mysql/bin を追加することができます。
setenv PATH ${PATH}:/usr/local/mysql/bin
新しい MySQL PKG をインストールしても既存のインストールのディレクトリは削除されないことに注意してください。Mac OS X インストーラには、以前にインストールされたパッケージを適切にアップグレードするために必要な機能はまだ備わっていません。
旧バージョンの MySQL データベースファイルをコピーし、新しいバージョンを正常に起動した後、ディスク領域節約のために旧バージョンのインストールファイルを削除することをお勧めします。 さらに、`/Library/Receipts/mysql-<version>.pkg' にある旧バージョンの Package Receipt ディレクトリも削除してください。
バージョン 4.0.11 以降、Novell NetWare 向け MySQL サーバがバイナリパッケージ形式で提供されています。NetWare サーバは、MySQL をホストするために以下の要件を満たしていなければなりません。
NetWare 用バイナリパッケージは、http://www.mysql.com/downloads/ で入手できます。
NetWare 6.0 で MySQL を実行する場合は、コマンドラインで --skip-external-locking オプションを指定することを強くお勧めします。また、myisamchk は外部ロックを利用するので、myisamchk ではなく CHECK TABLE および REPAIR TABLE を使用する必要もあります。
NetWare 6.0 では、外部ロックに関する既知の問題があります。この問題は NetWare 6.5 では解決されています。
SERVER: mysqladmin -u root shutdown
SERVER: SEARCH ADD SYS:MYSQL\BIN
mysql_install_db を実行して初期データベースをインストールする。
mysqld_safe を使用して MySQL サーバを起動する。
autoexec.ncf に以下のコマンドも追加する必要がある。たとえば、MySQL インストールが `SYS:MYSQL' にあり、MySQL を自動的に起動する場合は、以下の行を追加する。
#Starts the MySQL 4.0.x database server SEARCH ADD SYS:MYSQL\BIN MYSQLD_SAFENetWare 6.0 を使用している場合は、
--skip-external-locking フラグを追加する。
#Starts the MySQL 4.0.x database server SEARCH ADD SYS:MYSQL\BIN MYSQLD_SAFE --skip-external-locking
サーバ上に既存の MySQL インストールがある場合は、必ず、autoexec.ncf に既存の MySQL 起動コマンドがないかチェックして、必要に応じてそれらの起動コマンドを編集または削除する。
最新のバージョンとダウンロード手順については、MySQL のホームページ(http://www.mysql.com/)を参照してください。
主要ミラーは、http://mirrors.sunsite.dk/mysql/ にあります。
MySQL Web/ダウンロードミラーの最新の完全な一覧については、http://www.mysql.com/downloads/mirrors.html を参照してください。 このサイトでは、MySQL ミラーサイトになる方法と不適切なミラーや無効なミラーの報告方法についての情報も提供しています。
MD5 チェックサムまたは GnuPG によるパッケージ完全性の検証目的に合った MySQL パッケージをダウンロードした後、インストールする前に、そのパッケージが破損していないこと、そして改ざんされていないことを確認する必要があります。
MySQL AB は、MD5 checksums と、GnuPG による暗号化署名である GNU Privacy Guard の 2 種類の完全性チェック手段を提供しています。
MD5 Checksum の検証パッケージをダウンロードした後、MD5 チェックサムが MySQL ダウンロードページに記載されているものと一致しているかどうかを確認してください。各パッケージには個別のチェックサムがあります。以下のコマンドを使用してチェックサムを検証することができます。
shell> md5sum <package>
注意: オペレーティングシステムによっては、md5sum コマンドがサポートされていないことがあります。一部のオペレーティングシステムでは、このコマンドを md5 という名前で呼んでいます。また、このコマンドをまったく提供していないオペレーティングシステムもあります。Linux では、このコマンドはさまざまなプラットフォームで使用できる GNU Text Utilities パッケージに組み込まれています。http://www.gnu.org/software/textutils/ からソースコードを入手することもできます。OpenSSL をインストールしている場合は、このコマンドの代わりに openssl md5 <package> コマンドを使用することもできます。md5 コマンドの DOS/Windows 実装は、http://www.fourmilab.ch/md5/ から入手できます。
例:
shell> md5sum mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz
155836a7ed8c93aee6728a827a6aa153
mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz
結果のチェックサムが、ダウンロードページで各パッケージの直下に記載されているものと一致しているかどうかを確認します。
GnuPG による署名チェック
パッケージの完全性を検証するためのより信頼性の高い方法は、暗号化署名を使用する方法です。MySQL AB は、GNU Privacy Guard(GnuPG)を使用します。これは、Phil Zimmermann が開発した非常に有名な Pretty Good Privacy(PGP)に代わる オープンソースのソフトウェアです。
OpenPGP/GnuPG の詳細と、GnuPG の入手方法およびご使用のシステムへのインストール方法については、http://www.gnupg.org/ および http://www.openpgp.org/ を参照してください。ほとんどの Linux ディストリビューションには、デフォルトで GnuPG がインストールされています。
MySQL 4.0.10(2003 年 2 月)以降、MySQL AB はダウンロード可能パッケージに GnuPG による署名を付けています。暗号化署名は、ファイルの完全性と信頼性を検証するためのより信頼性の高い方法です。
特定のパッケージの署名を検証するには、まず MySQL AB の 公開 GPG ビルドキー build@mysql.com のコピーを入手する必要があります。以下に記載したものを直接カットアンドペーストするか、http://www.keyserver.net/ から入手してください。
Key ID:
pub 1024D/5072E1F5 2003-02-03
MySQL Package signing key (www.mysql.com) <build@mysql.com>
Fingerprint: A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5
Public Key (ASCII-armored):
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org
mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3
RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ
fw2vOUgCmYv2hW0hyDHuvYlQA/BThQoADgj8AW6/0Lo7V1W9/8VuHP0gQwCgvzV3
BqOxRznNCRCRxAuAuVztHRcEAJooQK1+iSiunZMYD1WufeXfshc57S/+yeJkegNW
hxwR9pRWVArNYJdDRT+rf2RUe3vpquKNQU/hnEIUHJRQqYHo8gTxvxXNQc7fJYLV
K2HtkrPbP72vwsEKMYhhr0eKCbtLGfls9krjJ6sBgACyP/Vb7hiPwxh6rDZ7ITnE
kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI
QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep
rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q7TXlTUUwgUGFj
a2FnZSBzaWduaW5nIGtleSAod3d3Lm15c3FsLmNvbSkgPGJ1aWxkQG15c3FsLmNv
bT6IXQQTEQIAHQUCPj6jDAUJCWYBgAULBwoDBAMVAwIDFgIBAheAAAoJEIxxjTtQ
cuH1cY4AnilUwTXn8MatQOiG0a/bPxrvK/gCAJ4oinSNZRYTnblChwFaazt7PF3q
zIhMBBMRAgAMBQI+PqPRBYMJZgC7AAoJEElQ4SqycpHyJOEAn1mxHijft00bKXvu
cSo/pECUmppiAJ41M9MRVj5VcdH/KN/KjRtW6tHFPYhMBBMRAgAMBQI+QoIDBYMJ
YiKJAAoJELb1zU3GuiQ/lpEAoIhpp6BozKI8p6eaabzF5MlJH58pAKCu/ROofK8J
Eg2aLos+5zEYrB/LsrkCDQQ+PqMdEAgA7+GJfxbMdY4wslPnjH9rF4N2qfWsEN/l
xaZoJYc3a6M02WCnHl6ahT2/tBK2w1QI4YFteR47gCvtgb6O1JHffOo2HfLmRDRi
Rjd1DTCHqeyX7CHhcghj/dNRlW2Z0l5QFEcmV9U0Vhp3aFfWC4Ujfs3LU+hkAWzE
7zaD5cH9J7yv/6xuZVw411x0h4UqsTcWMu0iM1BzELqX1DY7LwoPEb/O9Rkbf4fm
Le11EzIaCa4PqARXQZc4dhSinMt6K3X4BrRsKTfozBu74F47D8Ilbf5vSYHbuE5p
/1oIDznkg/p8kW+3FxuWrycciqFTcNz215yyX39LXFnlLzKUb/F5GwADBQf+Lwqq
a8CGrRfsOAJxim63CHfty5mUc5rUSnTslGYEIOCR1BeQauyPZbPDsDD9MZ1ZaSaf
anFvwFG6Llx9xkU7tzq+vKLoWkm4u5xf3vn55VjnSd1aQ9eQnUcXiL4cnBGoTbOW
I39EcyzgslzBdC++MPjcQTcA7p6JUVsP6oAB3FQWg54tuUo0Ec8bsM8b3Ev42Lmu
QT5NdKHGwHsXTPtl0klk4bQk4OajHsiy1BMahpT27jWjJlMiJc+IWJ0mghkKHt92
6s/ymfdf5HkdQ1cyvsz5tryVI3Fx78XeSYfQvuuwqp2H139pXGEkg0n6KdUOetdZ
Whe70YGNPw1yjWJT1IhMBBgRAgAMBQI+PqMdBQkJZgGAAAoJEIxxjTtQcuH17p4A
n3r1QpVC9yhnW2cSAjq+kr72GX0eAJ4295kl6NxYEuFApmr1+0uUq/SlsQ==
=YJkx
-----END PGP PUBLIC KEY BLOCK-----
このキーは、gpg --import を使用して公開 GPG キーリングにインポートすることができます。公開キーの処理方法については、GPG のマニュアルを参照してください。
公開ビルドキーをダウンロードしてインポートしたら、必要な MySQL パッケージと、それに対応する署名(これもダウンロードページから入手できます)をダウンロードします。 署名には、`.asc' というファイル名拡張子が付いています。たとえば、`mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz' の署名は、`mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz.asc' です。 パッケージと署名の両方のファイルが同じディレクトリに格納されていることを確認してから、以下のコマンドを実行して、パッケージファイルの署名を検証します。
shell> gpg --verify <package>.asc
Example:
shell> gpg --verify mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz.asc
gpg: Warning: using insecure memory!
gpg: Signature made Mon 03 Feb 2003 08:50:39 PM MET using DSA key ID 5072E1F5
gpg: Good signature from
"MySQL Package signing key (www.mysql.com) <build@mysql.com>"
"Good signature" というメッセージが表示されたら、問題ありません。
RPM による署名チェック
RPM パッケージの場合、別個の署名はありません。RPM パッケージには GPG 署名と MD5 チェックサムが組み込まれています。この署名と MD5 チェックサムは、以下のコマンドを実行して検証できます。
shell> rpm --checksig <package>.rpm Example: shell> rpm --checksig MySQL-server-4.0.10-0.i386.rpm MySQL-server-4.0.10-0.i386.rpm: md5 gpg OK
注意: RPM 4.1 を使用している場合、GPG 公開キーリングにインポートしたにもかかわらず、(GPG) NOT OK (MISSING KEYS: GPG#5072e1f5) というメッセージが表示されたら、まず RPM キーリングにキーをインポートする必要があります。RPM 4.1 では GPG キーリング(および GPG 自体)の使用が中止され、自身のキーリングが維持されています(これは、RPM がシステムワイドなアプリケーションであり、GPG 公開キーリングはユーザ固有のファイルであるためです)。MySQL 公開キーを RPM キーリングにインポートする場合は、以下のコマンドを使用してください。
shell> rpm --import <pubkey> Example: shell> rpm --import mysql_pubkey.asc
MD5 チェックサムまたは GPG 署名が一致しない場合は、まず別のミラーサイトからパッケージをもう一度ダウンロードしてみてください。再度、パッケージの完全性を検証できなかった場合は、そのパッケージの完全名と利用したダウンロードサイトを記載して、電子メールで当社にお知らせください(アドレスは webmaster@mysql.com または build@mysql.com)。
当社では GNU Autoconf を使用しているので、正常に機能する Posix スレッドおよび C++ コンパイラによってすべての最新のシステムに MySQL を移植することができます(クライアントコードだけをコンパイルする場合は、C++ コンパイラは必要ですがスレッドは不要です)。当社では、主に Linux(SuSE および Red Hat)、FreeBSD、および Sun Solaris (バージョン 8 および 9)上で MySQL ソフトウェアを使用および開発しています
多くのオペレーティングシステムでは、ネイティブスレッドは最新バージョンのOSでのみ有効であることに注意してください。MySQL は、以下のオペレーティングシステムとスレッドパッケージの組み合わせで正常にコンパイルすることが報告されています。
glibc 2.0.7+。 See section 2.6.2 Linux の注意事項(すべての Linux バージョン)。
注意: すべてのシステムが、MySQL の実行に同じように適しているとは限りません。特定のプラットフォームが高負荷でミッションクリティカルな MySQL サーバにどのぐらい適しているかは、以下の要因によって決まります。
pthread_mutex_lock() の実装が CPU 時間を生み出すことに重点を置きすぎている場合、そのことで MySQL のパフォーマンスは大きく損なわれることになる。この問題に対処しないと、CPU をマシンに追加すると MySQL の処理速度が実質的に遅くなる。
以上の基準から、現時点で MySQL を実行するのに最適なプラットフォームは、SuSE Linux 8.2、2.4 カーネル、および ReiserFS (または類似の Linux ディストリビューション)を搭載した x86 と、Solaris(2.7 〜 9)を搭載した SPARC です。FreeBSD は第 3 位ですが、スレッドライブラリが改善されればベストグループに仲間入りするはずです。また、MySQL がコンパイルされ、正常に動作する(安定性とパフォーマンスのレベルがまったく同じではないにしても)他のすべてのプラットフォームをいつの日かベストグループに含めることができるようになることを当社は切に希望しています。そのためには、MySQL が依存する OS やライブラリの開発者と協力して当社が努力する必要があります。それらのコンポーネントのいずれかを改善することに興味があり、その開発に影響を与える立場にあり、MySQL の動作を改善するために必要な事柄についての詳細な説明が必要なユーザは、MySQL の社内メーリングリストに電子メールをお送りください。 See section 1.7.1.1 MySQL メーリングリスト。
上記の比較は、各 OS の全般的な優劣をつけるためのものではありません。ここでは、特定用途(つまり MySQL の実行)のために特定の OS を選択することに焦点をあてており、その点に関してのみプラットフォームを比較しています。これを念頭に置けば、この比較にさらに多くの論点を含めた場合は、結果は異なったものになります。ある OS が別の OS よりも優れている理由が、単に当社がそのプラットフォームのテストと最適化に他のプラットフォームよりも多くの労力を費やしたためだけであるということもあります。 ここでは、ご使用のセットアップ内で MySQL を使用するプラットフォームを決定する際に参考にしていただけるように当社の所見を述べているにすぎません。
最初に、最新の開発版リリースと最新の製品版(安定版)リリースのどちらを使用するかを決めます。
次に、ソースディストリビューションとバイナリディストリビューションのどちらを使用するかを決めます。ご使用のプラットフォーム用のバイナリディストリビューションがある場合、バイナリディストリビューションを使用してください。これは、一般的にソースディストリビューションよりもインストールが簡単なためです。
以下の場合は、ソースインストールを使用した方がうまく行く可能性があります。
MySQL ネイティブクライアントは、両方の MySQL バージョンに接続できる。
拡張 MySQL バイナリディストリビューションには、-max というサフィックスが付いており、mysqld-max と同じオプションが指定されている。 See section 4.8.5 mysqld-max(拡張 mysqld サーバ)。
MySQL-Max RPM を使用する場合は、まず標準の MySQL-server RPM をインストールする必要がある。
mysqld に組み込む場合。以下に、最もよく使用される追加オプションの一覧を示す。
--with-innodb(MySQL 4.0 以降の場合はデフォルト)
--with-berkeley-db (使用できないプラットフォームもある)
--with-raid
--with-libwrap
--with-named-z-libs(一部のバイナリ用)
--with-debug[=full]
pgcc など)を使用するか、使用しているプロセッサ向けにより最適化されたコンパイラオプションを使用する。
MySQL の名前付けスキームでは、3 つの数字と 1 つのサフィックスで構成されるリリース番号が使用されます。たとえば、mysql-4.1.0-alpha のようなリリース名は、以下のように解釈されます。
4)は、メジャーバージョン番号であり、同時にファイル形式も表している。バージョン 4 の全リリースは同じファイル形式を持っている。
1)はリリースレベルである。
0)は、リリースレベル内のバージョン番号である。この数字は、新しいディストリビューションごとに増えていく。通常は、選択したリリースレベルの最新のバージョンが必要である。
alpha)は、リリースの安定性のレベルを示す。
以下のようなサフィックスがある。
alpha は、そのリリースに 100% はテストされていない新しいコードが含まれていることを示している。既知のバグ(通常はない)は、「News」のセクションに記載される。See section D MySQL Change History。 ほとんどの alpha リリースには新しいコマンドと拡張機能も含まれている。 alpha リリースでは、大きなコード変更がおきるような開発が行われる可能性があるが、リリースの前にすべてがテストされている。MySQL リリースには既知のバグはない。
beta は、すべての新しいコードがテストされていることを示している。古いコードを破壊するような大きな新しい機能は追加されていない。既知のバグはない。少なくとも 1 か月間、alpha バージョンで重大なバグが報告されず、古いコマンドの信頼性を下げるような機能を追加する計画がない場合は、バージョンはアルファからベータに変わる。
gamma は、一定期間出回っていて、正常に動作すると思われるベータバージョンである。小さな修正だけが追加される。これは、他の多くの企業でリリースと呼ばれているものである。
MySQL 開発プロセスでは、段階の異なるさまざまなバージョンが共存します。当然、旧バージョンのシリーズの関連バグ修正は新バージョンに伝播されます。
3.23 の場合、新バージョンは重大なバグの場合のみリリースされる。
4.0 は、安定版/製品版レベルの品質で、バグ修正のために新しいバージョンがリリースされている。コードの安定性に影響を及ぼすような新機能は追加されていない。
4.1 では、重要な新機能が追加されている。開発システムで使用およびテストするためのソースとバイナリが用意されている。
5.0 は、BitKeeper ツリーからのみ入手できる。
MySQL のすべてのバージョンは、標準テストとベンチマークテストが行われ、比較的安全であることが確認されています。標準テストは、過去に見つかったすべてのバグをチェックするために時間の経過とともに拡張されているので、テストスィートは常に改良されています。
注意: すべてのリリースは少なくとも以下のテストが実行されています。
crash-me テスト
もう 1 つのテストは、当社が社内の実稼動環境で少なくとも 1 台のマシン上で最新の MySQL バージョンを使用することです。当社には 100 ギガバイトを超える処理用データがあります。
ここでは、バイナリディストリビューションおよびソースディストリビューションのインストールによって作成されるディレクトリのデフォルトレイアウトについて説明します。
バイナリディストリビューションは、選択したインストール場所(通常は `/usr/local/mysql')でアンパックすることでインストールされ、その場所に以下のディレクトリを作成します。
| ディレクトリ | ディレクトリの内容 |
| `bin' | クライアントプログラムと mysqld サーバ
|
| `data' | ログファイル、データベース |
| `docs' | ドキュメント、変更ログ |
| `include' | インクルード(ヘッダ)ファイル |
| `lib' | ライブラリ |
| `scripts' | mysql_install_db
|
| `share/mysql' | エラーメッセージファイル |
| `sql-bench' | ベンチマーク |
ソースディストリビューションは、コンフィギャしてコンパイルした後にインストールされます。デフォルトでは、インストールステップによって、以下のサブディレクトリ内の `/usr/local' の下にファイルがインストールされます。
| ディレクトリ | ディレクトリの内容 |
| `bin' | クライアントプログラムとスクリプト |
| `include/mysql' | インクルード(ヘッダ)ファイル |
| `info' | Info 形式のマニュアル |
| `lib/mysql' | ライブラリ |
| `libexec' | mysqld サーバ
|
| `share/mysql' | エラーメッセージファイル |
| `sql-bench' | ベンチマークと crash-me テスト
|
| `var' | データベースとログファイル |
インストールディレクトリ内では、ソースインストールのレイアウトは、バイナリインストールのレイアウトとは以下のように異なります。
mysqld サーバは、`bin' ディレクトリではなく、`libexec' ディレクトリにインストールされる。
mysql_install_db は、`/usr/local/mysql/scripts' ディレクトリではなく、`/usr/local/bin' ディレクトリにインストールされる。
スクリプト `scripts/make_binary_distribution' を実行して、コンパイルされたソースディストリビューションから独自のバイナリインストールを作成できます。
MySQL AB 社内で MySQL は非常に急速に進化しており、当社は他の MySQL ユーザとこれを共有したいと考えています。他のユーザが必要としていると思われる非常に有用な機能がある場合は、リリースを作成します。
また、簡単に実装できる機能を求めているユーザの支援にも努めています。ライセンスユーザ、特に拡張電子メールサポート対象のユーザが何を要望しているかに注意し、これらのユーザを支援する努力を行っています。
ユーザは新しいリリースをダウンロードする必要はありません。本当に必要なものが新しいリリースに含まれている場合は、「News」のセクションで通知されます。 See section D MySQL Change History。
MySQL を更新する場合、当社は以下のポリシーを使用します。
現行の製品版リリースは、バージョン 4.0 です。アクティブな開発はすでにバージョン 4.1 および 5.0 に進んでいます。バージョン 4.0 のバグの修正と、3.23 シリーズの重大なバグの修正は今後も続けられます。 当社は、完全な開発凍結はよしとしません。これによって、バグ修正と "行うべき" ことが放置されることになるからです。"一部凍結" というのは、"すでに稼動しているものにほぼ間違いなく影響を与えない" 小さな変更が追加されることがあるということを意味します。
MySQL では、大部分の他製品とは少し異なる名前付けスキームが使用されます。 一般に、新しいバージョンに置き換えられることなく 2 週間公開されたバージョンは、使用しても比較的安全です。 See section 2.2.7 使用すべき MySQL のバージョン。
当社は、リリースにバグがないようにするために多くの時間と労力を費やしています。 当社の知る限り、既知の '重大な' 再現可能なバグがある MySQL バージョンは 1 つもリリースされていません。
重大なバグとは、通常の使用で MySQL をクラッシュさせる、一般的なクエリに対して誤った応答を返すバグ、またはセキュリティに問題があるバグです。
設計上の決定に依存する未解決の障害、バグ、問題はすべて文書化されています。 See section 1.8.6 MySQL の既知のエラーと設計上の問題。
当社の目標は、安定版の MySQL が不安定になるような危険を冒すことなく、修正可能なものはすべて修正することです。場合によって、これは、開発版の問題は修正できるが、安定版(製品版)の問題は修正できないということを意味します。当然、そのような問題は、ユーザに知らせるために文書化されます。
以下に、当社のビルドプロセスの仕組みを説明します。
mysql と announce のメーリングリストで告知メールを送信する。
See section 1.7.1.1 MySQL メーリングリスト。
告知メッセージには、リリースに対するすべての変更と、リリースに関する既知の問題の一覧が記載される
(リリースノートに「既知の問題」のセクションが必要であったのは、ほんの一握りのリリースだけである)。
'a' リリースをビルドする。当社の巨大なユーザ基盤のおかげで、問題は迅速に発見される。
MySQL AB は、サービスとして MySQL の一連のバイナリディストリビューションを提供します。これらのバイナリディストリビューションは、社内でコンパイルするか、ユーザが当社にマシンへのアクセスを提供してくれる場所でコンパイルされます。
プラットフォーム固有のパッケージ形式で提供するバイナリ(section 2.1 標準 MySQL のクイックインストール を参照)のほかに、tar 形式の圧縮アーカイブ(.tar.gz)によってさまざまなプラットフォーム用のバイナリディストリビューションも提供します。
これらのディストリビューションは、Build-tools/Do-compile スクリプトを使用して生成されます。このスクリプトは、ソースコードをコンパイルし、scripts/make_binary_distribution を使用してバイナリ tar.gz アーカイブを作成します。これらのバイナリは、以下のコンパイラとオプションによってコンフィギャおよびビルドされます。
MySQL AB の開発システムでビルドされるバイナリは以下のとおりです。
gcc 2.95.3
CFLAGS="-O2 -mcpu=pentiumpro" CXX=gcc CXXFLAGS="-O2 -mcpu=pentiumpro -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
ecc (Intel C++ Itanium Compiler 7.0)
CC=ecc CFLAGS="-O2 -tpp2 -ip -nolib_inline" CXX=ecc CXXFLAGS="-O2 -tpp2 -ip -nolib_inline" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile
ecc (Intel C++ Itanium Compiler 7.0)
CC=ecc CFLAGS=-tpp1 CXX=ecc CXXFLAGS=-tpp1 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile
ccc (Compaq C V6.2-505 / Compaq C++ V6.3-006)
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx CXXFLAGS="-fast -arch generic -noexceptions -nortti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared --disable-shared
gcc 2.95.3
CFLAGS="-O2" CXX=gcc CXXFLAGS="-O2 -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static
gcc 3.2.1
CXX=gcc ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
gcc 3.2.3
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb
gcc 3.2
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --with-named-curses-libs=-lcurses --disable-shared
gcc 3.2
CC=gcc CFLAGS="-O3 -m64 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -m64 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --with-named-curses-libs=-lcurses --disable-shared
gcc 2.95.3
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-curses-libs=-lcurses --disable-shared
cc-5.0 (Sun Forte 5.0)
CC=cc-5.0 CXX=CC ASFLAGS="-xarch=v9" CFLAGS="-Xa -xstrconst -mt -D_FORTEC_ -xarch=v9" CXXFLAGS="-noex -mt -D_FORTEC_ -xarch=v9" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=no --enable-thread-safe-client --disable-shared
gcc 3.2.3
CFLAGS="-O2 -mcpu=powerpc -Wa,-many " CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared
xlC_r (IBM Visual Age C/C++ 6.0)
CC=xlc_r CFLAGS="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" CXX=xlC_r CXXFLAGS ="-ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared --with-innodb
gcc 3.3
CFLAGS="-O2 -mcpu=powerpc -Wa,-many" CXX=gcc CXXFLAGS="-O2 -mcpu=powerpc -Wa,-many -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --with-server-suffix="-pro" --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --disable-shared
gcc 3.1
CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc CXXFLAGS="-DHPUX -I/opt/dce /include -felide-constructors -fno-exceptions -fno-rtti -O3 -fPIC" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-pthread --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared
aCC (HP ANSI C++ B3910B A.03.33)
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
aCC (HP ANSI C++ B3910B A.03.33)
CC=cc CXX=aCC CFLAGS="+DAportable" CXXFLAGS="+DAportable" ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb
gcc 3.1
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
gcc 2.95.4
CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --with-named-z-libs=not-used --disable-shared
gcc 2.95.3qnx-nto 20010315
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
以下のバイナリは、他のユーザによって MySQL AB に提供されたサードパーティのシステム上でビルドされています。これらのバイナリは、好意によって提供されています。MySQL AB は、これらのシステムを完全に管理しているわけではないので、これらのシステム上でビルドされたバイナリに対しては限られたサポートしか提供できません。
gcc 2.95.3
CFLAGS="-O3 -mpentium" LDFLAGS=-static CXX=gcc CXXFLAGS="-O3 -mpentium -felide-constructors" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client --disable-shared
CC 3.2
CC=cc CFLAGS="-O" CXX=CC ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-named-z-libs=no --enable-thread-safe-client --disable-shared
cc/cxx (Compaq C V6.3-029i / DIGITAL C++ V6.1-027)
CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed -speculate all" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias -fast -inline speed -speculate all -noexceptions -nortti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --with-prefix=/usr/local/mysql --with-named-thread-libs="-lpthread -lmach -lexc -lc" --disable-shared --with-mysqld-ldflags=-all-static
gcc 3.0.1
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared
gcc 3.2.1
CFLAGS=-DHAVE_BROKEN_REALPATH ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --disable-shared --with-innodb
以下のコンパイルオプションは、MySQL AB がかつて提供していたバイナリパッケージに使用されていたものです。これらのバイナリは現在では更新されていませんが、参考のためにここにコンパイルオプションを記載します。
egcs 1.1.2
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-local-infile --enable-assembler --disable-shared
gcc 2.95.2
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared --with-extra-charsets=complex
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
egcs 1.0.3a or 2.90.27 or gcc 2.95.2 and newer
CC=gcc CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex --enable-assembler
gcc 2.8.1
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory --with-extra-charsets=complex
gcc 2.7.2.1
CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
gcc 2.7.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
gcc 2.7.2.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex
上記のいずれかの設定に関してさらに最適なオプションをお持ちの方は、そのオプションを MySQL 社内メーリングリストに随時お送りください。 See section 1.7.1.1 MySQL メーリングリスト。
MySQL バージョン3.22 より前の RPM ディストリビューションは、ユーザによる寄贈です。バージョン 3.22 以降の RPM は、MySQL AB によって作成されています。
MySQL のデバッグバージョンをコンパイルする場合は、前述の configure 行に --with-debug オプションまたは --with-debug=full オプションを追加し、すべての -fomit-frame-pointer オプションを削除してください。
Windows ディストリビューションについては、section 2.1.1 Windows への MySQL のインストール を参照してください。
ここでは、さまざまなプラットフォーム用の MySQL バイナリディストリビューション(.tar.gz アーカイブ)について説明します(詳細な一覧については、section 2.2.11 MySQL AB がコンパイルした MySQL バイナリ を参照してください)。
これらの一般的なパッケージのほかに、選択したプラットフォームのプラットフォーム固有のパッケージ形式のバイナリも提供しています。 これらのパッケージのインストール方法の詳細については、section 2.1 標準 MySQL のクイックインストールを参照してください。
一般的な MySQL バイナリディストリビューションは、gzip 形式で圧縮された GNU tar アーカイブ(.tar.gz)としてパッケージ化されています。MySQL バイナリディストリビューションをインストールするためには以下のツールが必要です。
gunzip。
tar プログラム。GNU tar は、有効であることで知られている。オペレーティングシステムにプリインストールされている tar 実装の中には、長いファイル名などに関する問題が発生することが知られているものがある(Sun tar など)。その場合は、まず GNU tar をインストールする。
問題が発生した場合は、MySQL メーリングリストに質問を投稿するときに、必ず mysqlbug を使用してください。その問題がバグでない場合でも、mysqlbug は、他のユーザが同じ問題を解決する際に役立つシステム情報を収集します。mysqlbug を使用しないと、問題を解決できる可能性が小さくなります。ディストリビューションをアンパックすると、`bin' ディレクトリに mysqlbug が格納されます。 See section 1.7.1.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 full-path-to-mysql-VERSION-OS mysql shell> cd mysql shell> scripts/mysql_install_db shell> chown -R root . shell> chown -R mysql data shell> chgrp -R mysql . shell> bin/mysqld_safe --user=mysql &
4.0 より前のバージョンの MySQL を使用している場合は、最後のコマンドの bin/mysqld_safe を bin/safe_mysqld に置き換えてください。
DBI および DBD-mysql Perl モジュールをインストールしている場合は、bin/mysql_setpermission スクリプトを使用して新しいユーザを追加できます。
以下に詳細な説明を示します。
バイナリディストリビューションをインストールするには、以下のステップに従って処理を行った後、section 2.4 インストール後の設定とテスト に進み、インストール後の設定とテストを行います。
root としてインストールを実行する必要がある)。
tar アーカイブとして提供され、`mysql-VERSION-OS.tar.gz' などの名前が付いている。この場合、VERSION はバージョン番号(3.21.15 など)を表し、OS はそのディストリビューションが対象とするオペレーティングシステムを示す(pc-linux-gnu-i586 など)。
注意: すべてのバイナリは、同じ MySQL ソースディストリビューションからビルドされている
mysqld の実行時に使用するユーザとグループを追加する。
shell> groupadd mysql shell> useradd -g mysql mysql上記のコマンドで、
mysql グループと mysql ユーザが追加される。useradd と groupadd の構文は、Unix のバージョンの種類によって少し異なる。これらのコマンドは、それぞれ、adduser および addgroup と呼ばれることもある。
ユーザとグループを mysql 以外の名前にしてもかまわない。
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - shell> ln -s full-path-to-mysql-VERSION-OS mysqlGNU tar を使用して、最初の行を以下の代替コマンドに置き換えて、ディストリビューションの展開と抽出を一度に行うこともできる。
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz最初のコマンドで、`mysql-VERSION-OS' という名前のディレクトリが作成される。2 番目のコマンドで、そのディレクトリへのシンボリックリンクが作成される。これによって、インストールディレクトリを `/usr/local/mysql' としてより簡単に参照できるようになる。
shell> cd mysql
mysql ディレクトリ内には、いくつかのファイルとサブディレクトリがある。
インストールのために最も重要なのは、`bin' サブディレクトリと `scripts' サブディレクトリである。
PATH 環境変数にこのディレクトリの完全パス名を追加する必要がある。 See section F 環境変数。
mysql データベースの初期化に使用する mysql_install_db スクリプトが格納されている。
mysqlaccess を使用する場合、標準以外の場所に MySQL ディストリビューションがあるときは、mysqlaccess が mysql クライアントを検索する場所を変更する必要がある。18 行目ぐらいにある `bin/mysqlaccess' スクリプトを編集する。以下のような行を検索する。
$MYSQL = '/usr/local/bin/mysql'; # path to mysql executable
mysql が実際に格納されているシステム内の場所を反映するようにパスを変更する。この処理を行わないと、mysqlaccess を実行したときに Broken pipe というエラーが表示される。
shell> scripts/mysql_install_db注意: バージョン 3.22.10 より前の MySQL バージョンでは、
mysql_install_db を実行すると MySQL サーバが起動されていた。現バージョンでは、MySQL サーバは起動されない。
root に変更し、データディレクトリの所有者を mysqld の実行時に使用するユーザに変更する。
shell> chown -R root /usr/local/mysql/. shell> chown -R mysql /usr/local/mysql/data shell> chgrp -R mysql /usr/local/mysql/.最初のコマンドでファイルの
owner 属性が root ユーザに変更され、2 番目のコマンドで data ディレクトリの owner 属性が mysql ユーザに変更される。3 番目のコマンドで、group 属性が mysql グループに変更される。
DBI/DBD インタフェースのサポートをインストールする場合は、section 2.7 Perl インストールについてのコメント を参照。
support-files/mysql.server をコピーする。詳細については、support-files/mysql.server スクリプト自体と section 2.4.3 MySQL を自動的に起動および停止する を参照。
すべてのものをアンパックしてインストールしたら、ディストリビューションの初期化とテストを行ってください。
以下のコマンドで MySQL サーバを起動することができます。
shell> bin/mysqld_safe --user=mysql &
4.0 より前のバージョンの MySQL を使用している場合は、このコマンドの bin/mysqld_safe を bin/safe_mysqld に置き換えてください。
次に、section 4.8.2 mysqld_safe(mysqld のラッパ) に進み、See section 2.4 インストール後の設定とテスト を参照してください。
ソースのインストールに進む前に、使用しているプラットフォーム用のバイナリが入手可能かどうかと、それが自分のシステムでうまく機能するかどうかをまず確認します。当社は、バイナリを最適なオプションでビルドするよう尽力しています。
ソースから MySQL ビルドしてインストールするためには以下のツールが必要です。
gunzip。
tar プログラム。GNU tar は、有効であることで知られている。オペレーティングシステムにプリインストールされている tar 実装の中には、長いファイル名などに関する問題が発生することが知られているものがある(Sun tar など)。その場合は、まず GNU tar をインストールする。
gcc、1.0.2 以降の egcs、egcs 2.91.66、SGI C++、および SunPro C++ などがある。gcc を使用する場合は、libg++ は必要ない。gcc 2.7.x には、`sql/sql_base.cc' などのまったく問題のない C++ ファイルをコンパイルできなくなるというバグがある。gcc 2.7.x しかない場合、MySQL をコンパイルするためには、gcc をアップグレードする必要がある。 gcc
また、2.8.1 は、一部のプラットフォームで問題が発生することが知られている。したがって、使用しているプラットフォーム用の新しいコンパイラが存在する場合は、2.8.1 の使用は避ける必要がある。
MySQL バージョン 3.23.x をコンパイルする場合は、gcc 2.95.2 以降の使用を推奨する。
make プログラム。GNU make は、どの場合でも推奨されるものであり、必須のこともある。問題があった場合は、GNU make 3.75 以降の使用をお勧めする。
-fno-exceptions オプションを認識できる最新バージョンの gcc を使用している場合は、このオプションを使用することが非常に大切です。このオプションを使用しないと、無秩序にクラッシュするバイナリをコンパイルしてしまうことになりかねません。また、-fno-exceptions と共に、-felide-constructors および -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 メーリングリストに質問を投稿するときに、必ず mysqlbug を使用してください。その問題がバグでない場合でも、mysqlbug は、他のユーザが同じ問題を解決する際に役立つシステム情報を収集します。mysqlbug を使用しないと、問題を解決できる可能性が小さくなります。ディストリビューションをアンパックすると、`scripts' ディレクトリに mysqlbug が格納されます。
See section 1.7.1.3 バグまたは問題を報告する方法。
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> cp support-files/my-medium.cnf /etc/my.cnf shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &
バージョン 4.0 より前の MySQL を使用している場合は、最後のコマンドの bin/mysqld_safe を bin/safe_mysqld に置き換えてください。
InnoDB テーブルのサポートが必要な場合は、/etc/my.cnf ファイルを編集して、innodb_... で始まるパラメータの前にある # 文字を削除してください。
See section 4.1.2 `my.cnf' オプション設定ファイル と section 7.5.3 InnoDB 起動オプション を参照してください。
ソース RPM から開始する場合は、以下のコマンドを実行します。
shell> rpm --rebuild --clean MySQL-VERSION.src.rpm
これによって、インストールできるバイナリ RPM が作成されます。
DBI および DBD-mysql Perl モジュールをインストールしている場合は、bin/mysql_setpermission スクリプトを使用して新しいユーザを追加できます。
以下に詳細な説明を示します。
ソースディストリビューションをインストールするには、以下のステップに従って処理を行った後、section 2.4 インストール後の設定とテスト に進み、ポストインストール初期化とテストを行います。
BDB または BerkeleyDB テーブル。
MySQL ソースディストリビューションは、tar 形式の圧縮アーカイブとして提供され、`mysql-VERSION.tar.gz' などの名前が付いている。この場合、VERSION は、5.0.3-alpha などのバージョン番号である。
mysqld の実行時に使用するユーザとグループを追加する。
shell> groupadd mysql shell> useradd -g mysql mysql上記のコマンドで、
mysql グループと mysql ユーザが追加される。useradd と groupadd の構文は、Unix のバージョンの種類によって少し異なる。これらのコマンドは、それぞれ、adduser および addgroup と呼ばれることもある。
ユーザとグループを mysql 以外の名前にしてもかまわない。
shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -このコマンドによって、`mysql-VERSION' という名前のディレクトリが作成される。
shell> cd mysql-VERSION注意: 現時点では、最上位ディレクトリから MySQL をコンフィギャしてビルドする。他のディレクトリで MySQL をビルドすることはできない。
shell> ./configure --prefix=/usr/local/mysql shell> make
configure を実行するときに、いくつかのオプションを指定することができる。
オプションの一覧が必要な場合は、./configure --help を実行する。
section 2.3.3 一般的な configure オプション では、さらに便利ないくつかのオプションについて説明する。
configure が失敗し、MySQL メーリングリストにメールを送信して支援を求める場合は、`config.log' の中の、問題の解決に役立つと思われる行をメールに含める。configure が中断した場合は、configure からの出力の最後の 2、3 行も含める。mysqlbug スクリプトを使用して、バグレポートを投稿する。 See section 1.7.1.3 バグまたは問題を報告する方法。
コンパイルが失敗した場合は、section 2.3.5 MySQL のコンパイルに関する問題への対処 で、数多くの一般的な問題に関するヘルプを参照。
shell> make installこのコマンドは、
root として実行する必要がある場合がある。
shell> scripts/mysql_install_db注意: バージョン 3.22.10 より前の MySQL バージョンでは、
mysql_install_db を実行すると MySQL サーバが起動されていた。現バージョンでは、MySQL サーバは起動されない。
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 番目のコマンドでデータディレクトリの owner 属性が mysql ユーザに変更される。3 番目のコマンドで、group 属性が mysql グループに変更される。
DBI/DBD インタフェースのサポートをインストールする場合は、section 2.7 Perl インストールについてのコメント を参照。
support-files/mysql.server をコピーする。詳細については、support-files/mysql.server スクリプト自体と section 2.4.3 MySQL を自動的に起動および停止する を参照。
すべてのものをインストールしたら、以下のコマンドを使用してディストリビューションの初期化とテストを行ってください。
shell> /usr/local/mysql/bin/mysqld_safe --user=mysql &
バージョン 4.0 より前の MySQL を使用している場合は、このコマンドの mysqld_safe を safe_mysqld に置き換えてください。
そのコマンドが、mysqld daemon ended というエラーですぐに失敗した場合は、ファイル `mysql-data-directory/'hostname'.err' に何らかの情報が記述されています。
原因としては、すでに別の mysqld サーバを実行していることが考えられます。 See section 4.2 同じマシン上で複数の MySQL サーバを実行する。
次に、section 2.4 インストール後の設定とテスト に進みます。
パッチは、メーリングリストまたは MySQL の Web サイト(http://www.mysql.com/downloads/patches.html)の「patches」エリアにときどき公開されます。
メーリングリストにあるパッチを適用するには、パッチが含まれたメッセージをファイルに保存し、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 を使用します)。一部のシステムでは、新しいバージョンのプログラムが現在実行されているバージョンを置き換える場合は、新しいバージョンのインストールが許可されないことがあります。
configure オプション
configure スクリプトを使用すると、MySQL ディストリビューションの設定を自由に調整できます。設定方法の調整は、通常は configure コマンドラインでオプションを使用して行います。また、環境変数を使用して configure を調整することもできます。See section F 環境変数。 configure がサポートするオプションの一覧が必要な場合は、以下のコマンドを実行します。
shell> ./configure --help
ここでは、広く使用されている configure オプションの一部を説明します。
--without-server オプションを使用する。
shell> ./configure --without-serverC++ コンパイラがない場合は、
mysql はコンパイルを実行しない(mysql は C++ を必要とする唯一のクライアントプログラム)。その場合は、configure の、C++ コンパイラをテストするコードを削除し、--without-server オプションを指定して ./configure を実行する。compile ステップは依然として mysql のビルドを試行するが、`mysql.cc' に関する警告は無視してもかまわない(make が停止したら、make -k を実行して、エラーが発生しても残りのビルドを続行するよう指示する)。
libmysqld.a)が必要な場合は、--with-embedded-server オプションを使用する。
configure コマンドを使用する。
shell> ./configure --prefix=/usr/local/mysql
shell> ./configure --prefix=/usr/local \
--localstatedir=/usr/local/mysql/data
最初のコマンドでは、デフォルトの `/usr/local' ではなく `/usr/local/mysql' にすべてのものがインストールされるようにインストールプリフィックスが変更される。2 番目のコマンドでは、デフォルトのインストールプリフィックスは維持されるが、データベースディレクトリのデフォルトの場所(通常は `/usr/local/var')が無効にされ、/usr/local/mysql/data に変更される。これらのオプションは、MySQL をコンパイルした後に、オプション設定ファイルで変更できる。 See section 4.1.2 `my.cnf' オプション設定ファイル。
configure コマンドを使用する。
shell> ./configure --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock注意: 指定するファイルは絶対パス名でなければならない。 また、後で MySQL オプション設定ファイルを使用して、場所 `mysql.sock' を変更することもできる。 See section A.4.5 MySQL ソケットファイル `/tmp/mysql.sock' の保護または変更方法。
configure コマンドを実行します。
shell> ./configure --with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static
gcc を使用しており、libg++ または libstdc++ がインストールされていない場合、C++ コンパイラとして gcc を使用するように configure を設定することができる。
shell> CC=gcc CXX=gcc ./configureC++ コンパイラとして
gcc を使用すると、libg++ または libstdc++ へのリンクは試行されない。上記のライブラリがインストールされている場合でも、これらのライブラリの一部のバージョンは過去に MySQL ユーザにとって未知の問題を引き起こしたことがあるので、このように処理することをお勧めする。
以下に、使用しているコンパイラに応じて設定する一般的な環境変数をいくつか示す。
| コンパイラ | 推奨オプション |
| gcc 2.7.2.1 | CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors" |
| egcs 1.0.3a | CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti" |
| gcc 2.95.2 | CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti" |
| pgcc 2.90.29 以降 | CFLAGS="-O3 -mpentiumpro -mstack-align-double" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti" |
--prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-staticつまり、最新のすべての gcc バージョン向けの完全な configure 行は、以下のようなものになる。
CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro \ -felide-constructors -fno-exceptions -fno-rtti" ./configure \ --prefix=/usr/local/mysql --enable-assembler \ --with-mysqld-ldflags=-all-static当社が MySQL Web サイト(http://www.mysql.com/)で提供するバイナリはすべて、完全に最適化されてコンパイルされており、ほとんどのユーザにとって最適である。See section 2.2.11 MySQL AB がコンパイルした MySQL バイナリ。 さらに高速なバイナリを作成するためにユーザが微調整できる設定がいくつかあるが、これは上級ユーザ向けである。 See section 5.5.3 MySQL の速度に対するコンパイルとリンクの影響。 ビルドが失敗し、コンパイラまたはリンカが共有ライブラリ `libmysqlclient.so.#'(`#' はバージョン番号です)を作成できないというエラーが生成された場合は、
configure に --disable-shared オプションを指定してこの問題に対処できる。この場合、configure は共有ライブラリ `libmysqlclient.so.#' をビルドしない。
NULL 属性のカラム(つまり、NULL にすることが許されないカラム)に DEFAULT の値を使用しないように MySQL をコンフィギャすることができる。 See section 1.8.5.2 NOT NULL および DEFAULT 値制約。
shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure
--with-charset オプションを使用する。
shell> ./configure --with-charset=CHARSET
CHARSET は、big5、cp1251、cp1257、czech、danish、dec8、dos、euc_kr、gb2312、gbk、german1、hebrew、hp8、hungarian、koi8_ru、koi8_ukr、latin1、latin2、sjis、swe7、tis620、ujis、usa7、または win1251ukr のいずれかである。
See section 4.7.1 データおよびソート用キャラクタセット。
サーバとクライアントの間で文字を変換する場合は、SET CHARACTER SET コマンドに注目する。
See section 5.5.6 SET 構文。
警告: テーブルを作成した後にキャラクタセットを変更する場合は、すべてのテーブルで myisamchk -r -q --set-character-set=charset を実行する必要がある。これを行わないと、インデックスが正しくソートされないことがある(MySQL をインストールし、いくつかのテーブルを作成し、別のキャラクタセットを使用するように MySQL をコンフィギャし直して、その MySQL を再インストールした場合に、この問題が起きる可能性がある)。
--with-extra-charsets=LIST オプションを使用して、サーバにコンパイルする追加のキャラクタセットを定義できる。
この場合、LIST は、カンマで区切ったキャラクタセットのリスト、動的にロードできないすべての文字を含めるための complex、またはすべてのキャラクタセットをバイナリに含めるための all のいずれかである。
--with-debug オプションを使用する。
shell> ./configure --with-debugこれによって、エラーを検出し、エラーの内容に関する出力を提供する安全なメモリアロケータが組み込まれる。 See section E.1 MySQL サーバのデバッグ。
--enable-thread-safe-client configure オプションを使用して、MySQL クライアントライブラリのスレッドセーフバージョンをコンパイルする必要もある。これによって、スレッドアプリケーションとリンクさせる libmysqlclient_r ライブラリが作成される。 See section 11.1.14 スレッドクライアントの作成方法。
注意:このセクションは、当社の新しいコードのテストに協力することに関心のある場合にのみお読みください。MySQL をビルドしてシステム上で稼動させるだけの場合は、標準のリリースディストリビューション(ソースディストリビューションまたはバイナリディストリビューション)を使用してください。
最新の開発ソースツリーを入手するには、以下の説明に従ってください。
BitKeeper をダウンロードする。当社のリポジトリにアクセスするには、Bitkeeper 3.0 以降が必要である。
BitKeeper をインストールしたら、まず、作業するディレクトリに移動する。次に、以下のいずれかのコマンドを使用して、必要な MySQL バージョンブランチをコピーする。
3.23(旧バージョン)ブランチをコピーするには、以下のコマンドを使用する。
shell> bk clone bk://mysql.bkbits.net/mysql-3.23 mysql-3.234.0(安定版/製品版)ブランチをコピーするには、以下のコマンドを使用する。
shell> bk clone bk://mysql.bkbits.net/mysql-4.0 mysql-4.04.1 alpha ブランチをコピーするには、以下のコマンドを使用する。
shell> bk clone bk://mysql.bkbits.net/mysql-4.1 mysql-4.15.0 開発ブランチをコピーするには、以下のコマンドを使用する。
shell> bk clone bk://mysql.bkbits.net/mysql-5.0 mysql-5.0上記の例では、カレントディレクトリの、`mysql-3.23/'、`mysql-4.0/'、`mysql-4.1/'、`mysql-5.0/' のいずれかのサブディレクトリにソースツリーがセットアップされる。 ファイアウォールの背後にいて、HTTP 接続しか開始できない場合は、HTTP を通じて
BitKeeper を使用することもできる。
プロキシサーバを使用する必要がある場合は、使用するプロキシを指すように環境変数 http_proxy を設定する
shell> export http_proxy="http://your.proxy.server:8080/"次に、コピーを実行するときに、
bk:// を http:// に置き換える。たとえば、以下のように指定する。
shell> bk clone http://mysql.bkbits.net/mysql-4.1 mysql-4.1接続の速度によって、ソースツリーの初期ダウンロードには多少時間がかかることがある。
make、autoconf 2.53 (以降)、automake 1.5、libtool 1.4、および m4 が必要である。多くのオペレーティングシステムには独自の make 実装が搭載されているが、未知のエラーメッセージが出力されてコンパイルが失敗する可能性が高い。したがって、必ず GNU make (gmake と呼ばれることもある)を使用する。
幸い、多くのオペレーティングシステムは GNU ツールチェーンがプリインストールされているか、インストール可能な GNU ツールのパッケージを提供する。いずれの場合も、以下の場所からダウンロードすることもできる。
bison 1.75 も必要である。旧バージョンの bison は、次のようなエラーを報告することがある。
sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded。
注意: 実際に最大テーブルサイズを超過しているわけではない。このエラーは、旧バージョンの bison のバグが原因で発生する。
バージョン 4.1 より前の MySQL バージョンは、他の yacc 実装(BSD yacc 91.7.30 など)によってもコンパイルする。4.1 以降のバージョンの場合は、GNU bison は必要条件である。
シェルで実行する標準的なコマンドは以下のとおりである。
cd mysql-4.0 bk -r edit aclocal; autoheader; autoconf; automake (cd innobase; aclocal; autoheader; autoconf; automake) # for InnoDB (cd bdb/dist; sh s_all ) # for Berkeley DB ./configure # Add your favorite options here makeこの段階で未知のエラーが発生した場合は、
libtool が実際にインストールされているかどうかをチェックする。
当社の標準 configure スクリプトのコレクションは、`BUILD/' サブディレクトリにある。手間を省きたい場合は、`BUILD/compile-pentium-debug' を使用することもできる。別のアーキーテクチャ上でコンパイルするには、このスクリプトから Pentium 固有のフラグを削除して修正する。
make install を実行する。実稼動マシン上でこれを行う場合は、このコマンドによって稼動中のリリースインストールが上書きされるという点に注意する。別の MySQL がインストールされている場合は、prefix、with-tcp-port、unix-socket-path の各オプションに実稼動サーバで使用している値と異なる値を設定して、./configure を実行することをお勧めする。
make test の実行から始める。 See section 13.1.2 MySQL テストスイート。
make の段階に到達しても、ディストリビューションがコンパイルできない場合は、http://bugs.mysql.com/ にあるバグデータベースに報告をお願いしたい。必要な GNU ツールの最新バージョンがインストールされていて、それらのツールが設定ファイルの処理中にクラッシュする場合も同様である。
ただし、aclocal を実行して command not found というエラーや類似の問題が発生した場合は、報告は不要である。代わりに、必要なツールがすべてインストールされているかどうかと、シェルがそれらのツールを検出できるように PATH 変数が正しく設定されているかどうかを確認する。
bk clone 操作の後、定期的に bk pull を実行して更新を入手する。
bk sccstool を使用して、ツリーの変更履歴ですべての diff を調べることができる。不明な diff やコードがあった場合は、MySQL の内部メーリングリストにメールをお送りいただきたい。
See section 1.7.1.1 MySQL メーリングリスト。
また、何かに関する修正案がある場合も、同じアドレスにパッチを添付したメールをお送りいただきたい。
bk diffs は、ユーザがソースを変更するとパッチを作成してくれる。アイデアをコードにする時間がない場合は、説明だけでもお送りいただきたい。
BitKeeper には、bk helptool を使用してアクセスできる便利なヘルプユーティリティがある。
bk ci または bk citool)も、当社の内部メーリングリストへのチェンジセットを含んだメッセージの投稿や、ChangeSet コメントだけが含まれた通常の openlogging.org サブミッションをトリガすることはない。
一般に、コミットを使用する必要はない(公開ツリーは bk push を許可しないため)が、前述した bk diffs メソッドは使用する。
ChangeSet、コメント、ソースコードは、たとえば MySQL 4.1 の場合は http://mysql.bkbits.net:8080/mysql-4.1 で検索することもできます。
マニュアルは、独立したツリーに格納されています。このツリーは、以下のコマンドを使用してコピーすることができます。
shell> bk clone bk://mysql.bkbits.net/mysqldoc mysqldoc
MySQL Control Center と Connector/ODBC の公開 BitKeeper ツリーもあります。これらのツリーは、それぞれ以下のコマンドでコピーできます。
MySQL Control Center をコピーするには、以下のコマンドを使用してください。
shell> bk clone http://mysql.bkbits.net/mysqlcc mysqlcc
Connector/ODBC をコピーするには、以下のコマンドを使用してください。
shell> bk clone http://mysql.bkbits.net/myodbc3 myodbc3
すべての MySQL プログラムは、gcc を使用して、Solaris または Linux 上で警告を受け取ることなくきれいにコンパイルできます。他のシステム上では、システムインクルードファイルの違いが原因で警告が発生することがあります。MIT-pthreads を使用している場合に発生する可能性のある警告については、section 2.3.6 MIT-pthreads に関する注意事項 を参照してください。それ以外の問題については、以下の一覧をチェックしてください。
多くの問題は、解決に再 configure が必要です。再 configure が必要な場合は、以下の点に留意してください。
configure を 1 度実行した後にもう 1 度実行すると、前回の起動時に収集した情報を使用することがある。この情報は、`config.cache' に格納されている。configure は、起動時にこのファイルを探し、ファイルが存在する場合は、その情報が現在も適切であるものと想定してファイルの内容を読み取る。再 configure する場合は、この想定は無効である。
configure を実行するたびに make を実行して再コンパイルする必要がある。ただし、以前のビルドの古いオブジェクトファイルは別の設定オプションを使用してコンパイルされているので、最初にそれらのオブジェクトファイルを削除する必要がある。
古い検出情報やオブジェクトファイルが使用されるのを防ぐために、configure を再実行する前に以下のコマンドを実行します。
shell> rm config.cache shell> make clean
または、make distclean を実行します。
以下の一覧で、MySQL のコンパイル時によく発生することがわかっているいくつかの問題を説明します。
Internal compiler error: program cc1plus got fatal signal 11 か Out of virtual memory か Virtual memory exhaustedここで問題なのは、
gcc がインライン関数を備えた `sql_yacc.cc' をコンパイルするために大量のメモリを必要とすることである。--with-low-memory オプションを指定して configure を実行する。
shell> ./configure --with-low-memoryこのオプションによって、
gcc を使用している場合は -fno-inline、それ以外のコンパイラを使用している場合は -O0 がコンパイル行に追加される。メモリとスワップ領域が十分にあり、不足することはないと思われる場合でも、--with-low-memory オプションを試してみる。この問題は、メモリの豊富なハードウェア構成のシステム上でも発生することがわかっており、通常は --with-low-memory オプションを指定することで修正される。
configure はコンパイラ名として c++ を選び、GNU c++ は -lg++ をリンクする。gcc を使用している場合は、その動作によってコンフィギャ時に以下のような問題が発生することがある。
configure: error: installation or configuration problem: C++ compiler cannot create executables.
g++、libg++、または libstdc++ に関連したコンパイル時の問題が発生することもある。
これらの問題の原因の 1 つは、g++ がないか、g++ があっても libg++ または libstdc++ がないことである。`config.log' ファイルを調べると、このファイルに、C++ コンパイラが機能しない正確な理由が記述されているはずである。これらの問題に対処するために、C++ コンパイラとして gcc を使用することができる。環境変数 CXX を "gcc -O3" にする。たとえば、以下のように指定する。
shell> CXX="gcc -O3" ./configure
gcc は、g++ と同様に C++ ソースをコンパイルするが、デフォルトでは libg++ または libstdc++ にはリンクしない。
当然ながら、これらの問題を修正するもう 1 つの方法は、g++、libg++、および libstdc++ をインストールすることである。しかし、libg++ または libstdc++ を MySQL と共に使用することはお勧めしない。mysqld のバイナリサイズを増やすだけで何の利点もないためである。
これらのライブラリのバージョンの中には、MySQL ユーザにとって未知の問題を過去に引き起こしたものもある。
GNU gcc バージョン 3 以降を使用しており、RAID 機能(RAID テーブル型の詳細については section 6.5.3 CREATE TABLE 構文 を参照)を組み込んだ MySQL をコンパイルする場合も、C++ コンパイラとして gcc を使用する必要がある。--with-raid オプションを使用してコンパイルするように MySQL をコンフィギャしているときに、リンク段階で以下のいずれかのようなエラーが発生した場合は、前述の環境変数 CXX を定義して C++ コンパイラとして gcc を使用してみる。
gcc -O3 -DDBUG_OFF -rdynamic -o isamchk isamchk.o sort.o libnisam.a ../mysys/libmysys.a ../dbug/libdbug.a ../strings/libmystrings.a -lpthread -lz -lcrypt -lnsl -lm -lpthread ../mysys/libmysys.a(raid.o)(.text+0x79): In function `my_raid_create': : undefined reference to `operator new(unsigned)' ../mysys/libmysys.a(raid.o)(.text+0xdd): In function `my_raid_create': : undefined reference to `operator delete(void*)' ../mysys/libmysys.a(raid.o)(.text+0x129): In function `my_raid_open': : undefined reference to `operator new(unsigned)' ../mysys/libmysys.a(raid.o)(.text+0x189): In function `my_raid_open': : undefined reference to `operator delete(void*)' ../mysys/libmysys.a(raid.o)(.text+0x64b): In function `my_raid_close': : undefined reference to `operator delete(void*)' collect2: ld returned 1 exit status
make のバージョンを GNU make にアップグレードする必要がある。
making all in mit-pthreads make: Fatal error in reader: Makefile, line 18: Badly formed macro assignment か make: file `Makefile' line 18: Must be a separator (: か pthread.h: No such file or directorySolaris と FreeBSD は、複雑な
make プログラムが組み込まれていることで知られている。
GNU make バージョン 3.75 は、正常に機能することが知られている。
CFLAGS および CXXFLAGS という環境変数にそれらのフラグを追加して定義する。同様に、CC および CXX を使用してコンパイラ名を指定することもできる。以下に例を示す。
shell> CC=gcc shell> CFLAGS=-O3 shell> CXX=gcc shell> CXXFLAGS=-O3 shell> export CC CFLAGS CXX CXXFLAGSさまざまなシステムで有用であることがわかっているフラグの一覧については、section 2.2.11 MySQL AB がコンパイルした MySQL バイナリ を参照。
gcc コンパイラをアップグレードする必要がある。
client/libmysql.c:273: parse error before `__attribute__'
gcc 2.8.1 は正しく機能することが知られているが、当社では gcc 2.95.X の使用をお勧めする。
mysqld のコンパイル時に以下に示すようなエラーが発生した場合は、configure が accept()、getsockname()、または getpeername() の最後の引数の型を正しく検出していない。
cxx: Error: mysqld.cc, line 645: In this statement, the referenced
type of the pointer value ''length'' is ''unsigned long'', which
is not compatible with ''int''.
new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);
これを修正するには、`config.h' ファイルを編集する(このファイルは configure によって生成される)。以下の行を検索する。
/* Define as the base type of the last arg to accept */ #define SOCKET_SIZE_TYPE XXX使用しているオペレーティングシステムに応じて、
XXX を size_t または int に変更する(注意: configure は `config.h' を生成するので、configure を実行するたびにこの処理を行う必要がある)。
"sql_yacc.yy", line xxx fatal: default action causes potential...このエラーは、使用している
yacc のバージョンでは不十分であることを示している。
ほとんどの場合、bison (GNU バージョンの yacc)をインストールして、現在の yacc の代わりに使用する必要がある。
mysqld または MySQL クライアントをデバッグする必要がある場合は、--with-debug オプションを指定して configure を実行する。次に、再コンパイルして、クライアントを新しいクライアントライブラリにリンクする。 See section E.2 MySQL クライアントのデバッグ。
libmysql.c:1329: warning: passing arg 5 of `gethostbyname_r' from incompatible pointer type libmysql.c:1329: too few arguments to function `gethostbyname_r' libmysql.c:1329: warning: assignment makes pointer from integer without a cast make[2]: *** [libmysql.lo] Error 1
configure スクリプトは、デフォルトで GNU C++ コンパイラである g++ を使用して引数の正しい数を判別しようとする。しかし、g++ がインストールされていないと、このテストで正しくない結果が返される。この問題に対処するには、以下の 2 つの方法がある。
g++ がインストールされていることを確認する。必要なパッケージの名前は、Linux ディストリビューションの種類に応じて gpp または gcc-c++ である。
CXX 環境変数を gcc に設定して、C++ コンパイラとして gcc を使用する。
export CXX="gcc"
configure を再実行する必要があります。
ここでは、MIT-pthreads の使用に関係するいくつかの問題を説明します。
注意: Linux では、MIT-pthreads を使用しないで、インストールされている LinuxThreads 実装を使用してください。 See section 2.6.2 Linux の注意事項(すべての Linux バージョン)。
システムにネイティブスレッドサポートが用意されていない場合は、MIT-pthreads パッケージを使用して MySQL をビルドする必要があります。そのようなシステムとしては、旧バージョンの FreeBSD システム、SunOS 4.x、Solaris 2.4 以前などがあります。 See section 2.2.6 MySQL がサポートしているオペレーティングシステム。
注意: MySQL 4.0.2 からは、ソースディストリビューションに MIT-pthreads は含まれていません。このパッケージが必要な場合は、http://www.mysql.com/Downloads/Contrib/pthreads-1_60_beta6-mysql.tar.gz から別にダウンロードしてください。
ダウンロードしたら、このソースアーカイブを MySQL ソースディレクトリの最上位で展開します。これによって、mit-pthreads というサブディレクトリが新しく作成されます。
--with-mit-threads オプションを指定して configure を実行して、強制的に MIT-pthreads を使用させることができる。
shell> ./configure --with-mit-threadsMIT-pthreads を使用している場合は、このコードへの変更を最小限に抑えたいので、ソースディレクトリ以外の場所へのビルドはサポートされていない。
--without-server を使用してディストリビューションをコンフィギャしてクライアントコードだけをビルドした場合は、クライアントは MIT-pthreads を使用するかどうかを判断できず、デフォルトで Unix ソケット接続を使用する。
一部のプラットフォームでは、MIT-pthreads のもとで Unix ソケットが機能しないため、クライアントプログラムを実行するときに -h または --host を使用する必要がある。
--external-locking オプションを使用して、システムロックの使用をサーバに指示することができる。これは、同じデータファイルに対して 2 つの MySQL サーバを実行できるようにする場合にのみ必要である(このような処理は推奨しない)。
bind() コマンドがソケットへのバインドに失敗し、エラーメッセージが表示されないことがある(これは、少なくとも Solaris 上では発生する)。したがって、サーバへのすべての接続が失敗するということになる。以下に例を示す。
shell> mysqladmin version mysqladmin: connect to server at '' failed; error: 'Can't connect to mysql server on localhost (146)'この問題の解決策は、
mysqld サーバを強制終了して再起動することである。
これは、当社でサーバを強制的に停止してすぐに再起動したときに、偶然見つかった方法である。
sleep() システムコールに対して SIGINT(ブレーク)による割り込みを行うことはできない。これは、mysqladmin --sleep を実行したときにのみわかる。sleep() コールが終了してから、割り込みが実行されプロセスが停止する。
ld: warning: symbol `_iob' has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
ld: warning: symbol `__iob' has differing sizes:
(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;
file /usr/lib/libc.so value=0x140);
/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken
implicit declaration of function `int strtoll(...)' implicit declaration of function `int strtoul(...)'
readline はまだない(これは、必要のないものであるが、興味のあるユーザもいるかもしれない)。
ここでは、Windows 上でバージョン 4.1 以降のソースから MySQL バイナリをビルドする方法を説明します。標準のソースディストリビューションまたは最新の開発ソースが格納されている BitKeeper ツリーからバイナリをビルドする場合の手順が記載されています。
注意: ここに記載されている手順は、最新のソースディストリビューションまたは BitKeeper ツリーで入手した MySQL を Windows 上でテストするユーザだけを対象としています。 自分でソースからビルドした MySQL サーバを実稼動環境で使用することはお勧めしません。通常、最も望ましいのは、MySQL AB が特に Windows 上で最適なパフォーマンスを達成するようにビルドした、プリコンパイルされた MySQL バイナリディストリビューションを使用することです。 バイナリディストリビューションのインストール手順については、section 2.1.1 Windows への MySQL のインストール を参照してください。
Windows 上で MySQL をビルドするには、使用している Windows システムに以下のコンパイラとリソースがなければなりません。
また、Windows 用の MySQL ソースディストリビューションも必要です。MySQL バージョン 4.1 以降のソースディストリビューションを入手する方法は、以下の2 とおりです。
Windows ソースディストリビューションを使用する場合は、直接 section 2.3.7.1 VC++ を使用した MySQL のビルド に進んでください。BitKeeper ツリーからビルドする場合は、section 2.3.7.2 最新の開発ソースから Windows ソースパッケージを作成する に進んでください。
予想通りに動作しないものを見つけた場合や、Windows での現在のビルドプロセスの改良方法に関して提案がある場合は、win32 メーリングリストにメッセージを送ってください。
See section 1.7.1.1 MySQL メーリングリスト。
注意: MySQL 4.1 以降の VC++ ワークスペースファイルは、Microsoft Visual Studio 6.0 以降(7.0/.NET)のバージョンと互換性があり、リリース前に MySQL AB のスタッフによってテストされています。
MySQL のビルドは、以下の手順で行います。
WinZip か、`.zip' ファイルを読み取ることのできるその他の Windows ツールを使用して、上記のディレクトリにソースディストリビューションをアンパックする。
File]メニューで、[Open Workspace]を選択する。
Build]メニューで、[Set Active Configuration]メニューを選択する。
mysqld - Win32 Debug]を選択し、[OK]をクリックする。
F7 キーを押し、デバッグサーバ、ライブラリ、およびクライアントアプリケーションのビルドを開始する。
Build]メニューで[build all]オプションを選択する。
--basedir オプションと --datadir オプションを指定するか、オプション設定ファイル(Windows ディレクトリにある `C:\my.cnf' ファイルまたは `my.ini' ファイル)に適切なオプションを配置する。使用したい既存のデータディレクトリが別の場所にある場合は、そのパス名を指定する。
mysql の対話型コマンドラインユーティリティからそのサーバに接続する。
ビルドしたプログラムが正しく動作することを確認したら、サーバを停止します。次に、以下の手順で MySQL をインストールします。
C: mkdir \mysql mkdir \mysql\bin mkdir \mysql\data mkdir \mysql\share mkdir \mysql\scriptsその他のクライアントをコンパイルして MySQL にリンクする場合は、追加のディレクトリも作成する。
mkdir \mysql\include mkdir \mysql\lib mkdir \mysql\lib\debug mkdir \mysql\lib\optMySQL のベンチマークを実行する場合は、以下のディレクトリを作成する。
mkdir \mysql\sql-benchベンチマークを実行するには、Perl が必要である。
C:\mysql ディレクトリにコピーする。
copy client_release\*.exe C:\mysql\bin copy client_debug\mysqld.exe C:\mysql\bin\mysqld-debug.exe xcopy scripts\*.* C:\mysql\scripts /E xcopy share\*.* C:\mysql\share /Eその他のクライアントをコンパイルして MySQL にリンクする場合は、以下のコマンドも実行する。
copy lib_debug\mysqlclient.lib C:\mysql\lib\debug copy lib_debug\libmysql.* C:\mysql\lib\debug copy lib_debug\zlib.* C:\mysql\lib\debug copy lib_release\mysqlclient.lib C:\mysql\lib\opt copy lib_release\libmysql.* C:\mysql\lib\opt copy lib_release\zlib.* C:\mysql\lib\opt copy include\*.h C:\mysql\include copy libmysql\libmysql.def C:\mysql\includeMySQL のベンチマークを実行する場合は、以下のコマンドも実行する。
xcopy sql-bench\*.* C:\mysql\bench /E
Windows バイナリディストリビューションの場合と同様にサーバを設定して起動します。 See section 2.1.1 Windows への MySQL のインストール。
現在の BitKeeper ソースツリーから最新の Windows ソースパッケージをビルドするには、以下の手順で行います。 注意: この手順は、Unix または Unix ライクなオペレーティングシステムを実行しているシステム上で行う必要があります(この手順は、Linux などの場合に有効であることが知られています)。
shell> ./BUILD/compile-pentium-max
shell> ./scripts/make_win_src_distributionこのスクリプトによって、Windows システム上で使用する Windows ソースパッケージが作成される。必要に応じて、このスクリプトに別のオプションを指定することができる。指定できるオプションは以下のとおりである。
--debug デバッグ。パッケージは作成しない。 --tmp tmp を指定する。 --suffix パッケージの名前のサフィックスを指定。 --dirname ファイルをコピーするディレクトリ名。 --silent ファイルの処理経過の詳細を出力しない。 --tar tar.gz パッケージを .zip パッケージの代わりに作成。 --help ヘルプの表示。デフォルトでは、
make_win_src_distribution は、`mysql-VERSION-win-src.zip' という名前の zip 形式の圧縮アーカイブを作成する。この場合、VERSION は 使用している MySQL ソースツリーのバージョンを表す。
MySQL をインストールしたら(バイナリディストリビューションまたはソースディストリビューションから)、権限テーブルを初期化して、サーバを起動し、サーバが正常に動作することを確認する必要があります。システムの起動時およびシャットダウン時にサーバが自動的に起動および停止するように設定することもできます。
ソースディストリビューションからインストールする場合は、通常、以下のように権限テーブルをインストールしてサーバを起動します。
shell> ./scripts/mysql_install_db shell> cd mysql_installation_directory shell> ./bin/mysqld_safe --user=mysql &
バイナリディストリビューション(RPM パッケージまたは pkg パッケージ)の場合は、以下を実行します。
shell> cd mysql_installation_directory shell> ./scripts/mysql_install_db shell> ./bin/mysqld_safe --user=mysql &
mysql_install_db スクリプトは、すべての権限を管理する mysql データベースと、MySQL のテストに使用できる test データベースを作成します。さらに、mysql_install_db を実行するユーザと root ユーザの権限エントリも作成します。これらのエントリはパスワードなしで作成されます。
mysqld_safe スクリプトは、mysqld サーバを起動します(バージョン 4.0 より前の MySQL を使用している場合は、mysqld_safe ではなく safe_mysqld を使用します)。
mysql_install_db は、古い権限テーブルを上書きしないので、どのような状況で実行しても安全です。test データベースが必要ない場合は、サーバを起動した後に mysqladmin -u root drop test を使用してこのデータベースを削除することができます。
テストは、MySQL ディストリビューションの最上位ディレクトリから簡単に実行できます。バイナリディストリビューションの場合、最上位ディレクトリはインストールディレクトリです(通常は `/usr/local/mysql' など)。ソースディストリビューションの場合は、最上位ディレクトリは MySQL ソースツリーのメインディレクトリです。
以下の各項に示されるコマンドでは、BINDIR は mysqladmin や mysqld_safe などのプログラムがインストールされている場所のパスを表します。バイナリディストリビューションの場合、BINDIR はディストリビューション内の `bin' ディレクトリです。ソースディストリビューションの場合、configure を実行したときに `/usr/local' 以外のインストールディレクトリを指定していない限り、BINDIR は通常は `/usr/local/bin' です。
EXECDIR は、mysqld サーバがインストールされている場所です。バイナリディストリビューションの場合、これは BINDIR と同じです。ソースディストリビューションの場合、EXECDIR は通常は `/usr/local/libexec' です。
mysqld サーバを起動して、MySQL 権限テーブルを初期化する。これは、通常 mysql_install_db スクリプトを使用して行う。
shell> scripts/mysql_install_dbMySQL 権限テーブルには、MySQL サーバに接続できるユーザのホストや権限の情報が記録されている。 一般に、
mysql_install_db は、初めて MySQL をインストールしたときにのみ実行する必要がある。したがって、既存のインストールをアップグレードする場合は、このステップはスキップできる(ただし、mysql_install_db は使用しても非常に安全で、既存のテーブルを更新することはないので、判断がつかない場合は mysql_install_db を実行してかまわない)。
mysql_install_db は、mysql データベースに 6 つのテーブル(user、db、host、tables_priv、columns_priv、および func)を作成する。初期権限の説明については、section 4.4.4 MySQL 権限の初期設定 を参照。
簡単に説明すると、初期権限は、MySQL root ユーザにあらゆる操作を許可し、全ユーザに test という名前か、test_ で始まる名前を持つデータベースを作成または使用する許可を与える。
権限テーブルを設定しないと、サーバを起動したときにログファイルに以下のエラーが記録される。
mysqld: Can't find file: 'host.frm'MySQL バイナリディストリビューションの場合にも、
./bin/mysqld_safe を実行して MySQL を起動しないとこのエラーが発生する。
See section 4.8.2 mysqld_safe(mysqld のラッパ)。
mysql_install_db は、Unix root アカウントで実行する必要があることがある。
ただし、必要に応じて、データベースディレクトリ内のファイルに対して読み取りと書き込みのアクセス権がある一般のアカウント(root 以外の Unix のアカウント)で、 MySQL サーバを実行することもできる。一般のアカウントで MySQL を実行する手順については、section A.3.2 一般ユーザで MySQL を実行する方法を参照。
mysql_install_db で問題が発生する場合は、section 2.4.1 mysql_install_db の実行に関する問題 を参照。
MySQL ディストリビューションで提供される mysql_install_db スクリプトを実行する代わりに行えるいくつかの手段がある。
mysql_install_db を実行する前に、このスクリプトを編集して、権限テーブルにインストールされている初期の権限を変更することができる。スクリプトの変更により、同じ権限を持つ複数のマシンに MySQL をインストールする場合に便利である。この場合、通常は、mysql.user テーブルと mysql.db テーブルにいくつかの INSERT ステートメントを追加するだけで済む。
mysql_install_db を実行して、mysql -u root mysql を使用して MySQL root ユーザとして権限テーブルに接続し、SQL ステートメントを発行して権限テーブルを直接修正する。
mysql_install_db を編集した後に作成し直す場合に、これを行う必要がある。
shell> cd mysql_installation_directory shell> bin/mysqld_safe &バージョン 4.0 より前の MySQL を使用している場合は、最後のコマンドの
bin/mysqld_safe を bin/safe_mysqld に置き換える。
サーバの起動時に問題が発生した場合は、section 2.4.2 MySQL サーバの起動に関する問題 を参照。
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 オプションを指定して起動する。
shell> BINDIR/mysqladmin -u root shutdown
mysqld_safe を使用するか、直接 mysqld を起動して行う。以下に例を示す。
shell> BINDIR/mysqld_safe --log &
mysqld_safe が失敗した場合は、MySQL のインストールディレクトリから実行する(インストールディレクトリ以外のディレクトリに移動している場合)。それでも失敗する場合は、section 2.4.2 MySQL サーバの起動に関する問題 を参照。
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_% | | +------+--------+------+また、`sql-bench' ディレクトリ(MySQL インストールディレクトリの下)に、ベンチマークスィートがある。このベンチマークスィートを使用すると、各種のプラットフォーム上での MySQL の動作を比較できる。ベンチマークスィートは、Perl で記述されており、Perl DBI モジュールを使用してデータベースに依存しないインタフェースを各種のデータベースに提供する。ベンチマークスィートを実行するには、以下の追加の Perl モジュールが必要である。
DBI DBD-mysql Data-Dumper Data-ShowTableこれらのモジュールは、CPAN(http://www.cpan.org/)から入手できる。 See section 2.7.1 Unix への Perl のインストール。 `sql-bench/Results' ディレクトリには、さまざまなデータベースやプラットフォームのベンチマークスィートの実行結果が含まれている。すべてのテストを実行するには、以下のコマンドを実行する。
shell> cd sql-bench shell> run-all-tests`sql-bench' ディレクトリがない場合は、バイナリディストリビューション用の RPM を使用している可能性がある(ソースディストリビューションの 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' ファイルに出力される。
mysql_install_db の実行に関する問題
mysql_install_db スクリプトの目的は、新しい MySQL 権限テーブルを生成することです。このスクリプトがその他のデータに影響を及ぼすことはありません。
MySQL 権限テーブルがすでにインストールされている場合は、何も行いません。
権限テーブルを作成し直す場合は、mysqld サーバを停止して(サーバが稼動している場合)、以下のようなコマンドを実行します。
shell> mv mysql-data-directory/mysql mysql-data-directory/mysql-old shell> mysql_install_db
ここでは、mysql_install_db の実行時に発生する可能性のある問題について説明します。
mysql_install_db が権限テーブルをインストールしない
mysql_install_db が権限テーブルのインストールに失敗し、以下のメッセージを表示した後に終了することがある。
starting mysqld daemon with databases from XXXXXX mysql daemon endedこの場合は、ログファイルを詳しく調べる必要がある。ログは、エラーメッセージに表示されている `XXXXXX' ディレクトリにある。ログには
mysqld が起動しない原因が示される。何が起きたかわからない場合は、mysqlbug を使用してバグレポートを投稿するときにこのログを含める。
See section 1.7.1.3 バグまたは問題を報告する方法。
mysqld デーモンがすでに稼動している
mysql_install_db を実行する必要はない。mysql_install_db は、MySQL を初めてインストールするときに 1 回だけ実行する必要がある。
mysqld デーモンをインストールできない
Can't start server: Bind on TCP/IP port: Address already in use または Can't start server: Bind on
unix socket...。 See section 4.2 同じマシン上で複数の MySQL サーバを実行する。
mysql_install_db の実行時や、mysqld の起動時または使用時にエラーが表示される。
以下のコマンドを実行して、別のソケットとテンポラリディレクトリを指定することができる。
shell> TMPDIR=/some_tmp_dir/ shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysqld.sock shell> export TMPDIR MYSQL_UNIX_PORTsection A.4.5 MySQL ソケットファイル `/tmp/mysql.sock' の保護または変更方法 を参照。 `some_tmp_dir' には、自分が書き込みアクセス権を持つディレクトリのパスを指定する。 See section F 環境変数。 この後、以下のコマンドを使用して、
mysql_install_db を実行し、サーバを起動できる。
shell> scripts/mysql_install_db shell> BINDIR/mysqld_safe &
mysqld がすぐにクラッシュする
glibc を備えた Red Hat バージョン 5.0 を実行している場合、glibc のすべてのパッチがインストールされていることを確認する必要がある。
MySQL メールアーカイブには、これに関する大量の情報がある。メールアーカイブへのリンクは、http://lists.mysql.com/ からオンラインで利用できる。
section 2.6.2 Linux の注意事項(すべての Linux バージョン) も参照。
また、--skip-grant-tables オプションを指定して mysqld を手動で起動し、mysql を使用して自分で特権情報を追加することもできる。
shell> BINDIR/mysqld_safe --skip-grant-tables & shell> BINDIR/mysql -u root mysql
mysql から、mysql_install_db で SQL コマンドを手動で実行する。後で、必ず mysqladmin flush-privileges またはmysqladmin reload を実行してサーバに権限テーブルの再ロードを指示する。
トランザクション(InnoDB、BDB)をサポートするテーブルを使用する場合は、最初に `my.cnf' ファイルを作成して、使用する予定のテーブル型用の起動オプションを設定しておく必要があります。 See section 7 MySQL のテーブル型。
通常は、以下のいずれかの方法で mysqld サーバを起動します。
mysql.server を実行する。このスクリプトは、主にシステムの起動とシャットダウンの際に使用される。詳細については、section 2.4.3 MySQL を自動的に起動および停止する を参照。
mysqld_safe を実行する。このスクリプトは、mysqld の適切なオプションを判別し、それらのオプションを指定して mysqld を実行する。 See section 4.8.2 mysqld_safe(mysqld のラッパ)。
mysqld を直接起動する。
起動した mysqld デーモンは、ディレクトリをデータディレクトリに変更します。このディレクトリで、mysqld は、ログファイルと pid (プロセスID)ファイルを書き込み、データベースを検索します。
データディレクトリ(datadir 変数)の場所は、ディストリビューションのコンパイル時に組み込まれます。ただし、mysqld が実際に存在するシステム上の場所以外の場所にデータディレクトリがあると、mysqld は正しく動作しません。パスに問題がある場合は、--help オプションを指定して mysqld を起動して、mysqld が許可するオプションとデフォルトのパス設定を確認することができます。mysqldへのコマンドライン引数として正しいパス名を指定して、デフォルト設定を無効にすることができます(これらのオプションは、mysqld_safe でも同様に使用できます)。
通常、mysqld に指示する必要があるのは、MySQL がインストールされているベースディレクトリだけです。ベースディレクトリの指定は、--basedir オプションを使用して行うことができます。また、--help を使用して、パスオプションを変更した場合の影響をチェックすることもできます(注意: --help は、mysqld コマンドラインの最後に指定する必要があります)。以下に例を示します。
shell> EXECDIR/mysqld --basedir=/usr/local --help
必要なパス設定を決定したら、--help オプションを指定しないでサーバを起動します。
どの方法でサーバを起動した場合でも、サーバが正常に起動しないときは、ログファイルをチェックして原因を突き止めることができるかどうか確認します。ログファイルは、データディレクトリ(通常、バイナリディストリビューションの場合は `/usr/local/mysql/data'、ソースディストリビューションの場合は `/usr/local/var'、Windows 上では `\mysql\data\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-no-recover を指定しないで mysqld を起動したことと、Berkeley DB がデータベースをリカバリするときにログファイルに問題があることを発見したことを意味しています。続行できるようにするには、データベースディレクトリにある既存の Berkeley DB のログファイルを、後で調べることができるような他の場所に移動します。ログファイルには、`log.0000000001' という名前が付いています。この場合、数字は時間の経過とともに増えます
BDB テーブルをサポートしている mysqld を起動しようとしてコアを吐いた場合は、BDB リカバリログに問題があるかもしれません。その場合は、--bdb-no-recover を指定して mysqld を起動してみます。この方法でサーバが正常に起動した場合は、データディレクトリからすべての `log.*' ファイルを削除して、もう一度 mysqld を起動してみます。
以下のエラーが表示された場合は、mysqld が使用しようとした TCP/IP ポートまたはソケットファイルを、他のプログラム(または別の mysqld サーバ)がすでに使用していることを意味します。
Can't start server: Bind on TCP/IP port: Address already in use か Can't start server: Bind on unix socket...
ps を使用して、別の mysqld サーバが稼動していないことを確認します。別のサーバが稼動していないことが確認できたら、コマンド telnet ホスト名 TCP/IPポート番号 を実行して、Enter キーを 2、3 回押します。telnet: Unable to connect to remote host: Connection refused のようなエラーメッセージが出力されない場合は、mysqld が使用しようとした TCP/IP ポートは他のプログラムによって使用されています。
section 2.4.1 mysql_install_db の実行に関する問題 および section 4.2 同じマシン上で複数の MySQL サーバを実行する を参照してください。
mysqld が現在稼動している場合は、以下のコマンドを実行して、mysqld が使用しているパス設定を調べることができます。
shell> mysqladmin variables
または
shell> mysqladmin -h 'your-host-name' variables
mysqld の起動時に Errcode 13(Permission deniedを表す)が表示された場合は、MySQL データベースまたはログディレクトリ内のファイルの読み取り/書き込み権限がなかったことを意味します。この場合、Unix root アカウントで mysqld を起動するか、関連するファイルおよびディレクトリを mysqld を実行する Unix アカウントが使用できるように、それらのファイルおよびディレクトリのアクセス権を変更します。
mysqld_safe によってサーバが起動されたのに、そのサーバに接続できない場合は、`/etc/hosts' に以下のようなエントリがあるかどうかを確認します。
127.0.0.1 localhost
この問題は、正常に機能するスレッドライブラリがなく、MySQL がMIT-pthreads を使用するようにコンフィギャされているシステムで発生します。
mysqld を起動させることができない場合は、トレースファイルを作成して問題を見つけます。 See section E.1.2 トレースファイルの作成。
InnoDB テーブルを使用している場合は、section 7.5.3 InnoDB 起動オプション を参照してください。
BDB(Berkeley DB)テーブルを使用している場合は、section 7.6.3 BDB 起動オプション をよく理解しておいてください。
mysql.server スクリプトと mysqld_safe スクリプトを使用すると、システムの起動時にサーバを自動的に起動することができます。mysql.server は、サーバを停止する場合にも使用できます。
mysql.server スクリプトに start 引数または stop 引数を指定して起動すると、サーバを起動または停止することができます。
shell> mysql.server start shell> mysql.server stop
mysql.server は、MySQL インストールディレクトリの下の `share/mysql' ディレクトリか、MySQL ソースツリーの `support-files' ディレクトリにあります。
注意: Linux RPM パッケージ(MySQL-server-VERSION.rpm)を使用している場合は、mysql.server スクリプトは `/etc/init.d/mysql' としてすでにインストールされています。したがって、手動でこのスクリプトをインストールする必要はありません。Linux RPM パッケージの詳細については、section 2.1.2 Linux への MySQL のインストール を参照してください。
Mac OS X では、別の MySQL Startup Item パッケージをインストールして、システムブートアップ時に MySQL が自動的に起動できるようにすることができます。 詳細については、section 2.1.3 Mac OS X への MySQL のインストール を参照してください。
mysql.server は、サーバを起動する前にディレクトリを MySQL インストールディレクトリに変更してから、mysqld_safe を起動します。
インストールしたバイナリディストリビューションが標準以外の場所にある場合は、mysql.server を編集する必要があります。mysqld_safe を実行する前に適切なディレクトリに変更する(cd)ように、mysql.server を修正します。サーバを特定のユーザとして実行する場合は、このセクションで説明するように適切な user 行を `/etc/my.cnf' ファイルに追加します。
mysql.server stop は、サーバにシグナルを送って停止させます。
mysqladmin shutdown を実行して、サーバを手動で停止させることもできます。
`/etc/rc*' ファイル内の適切な場所にこれらの起動コマンドおよび停止コマンドを追加する必要があります。
最新の Linux ディストリビューションでは、mysql.server ファイルを `/etc/init.d' ディレクトリ(旧バージョンの Red Hat システムの場合は `/etc/rc.d/init.d')にコピーするだけで済みます。その後、以下のコマンドを実行して、システムブート時に MySQL が起動できるようにします。
shell> chkconfig --add mysql.server
FreeBSD では、通常、起動スクリプトは `/usr/local/etc/rc.d/' に格納されます。
rc(8) マニュアルページには、このディレクトリにあるスクリプトの basename がシェルグロブパターン *.sh にマッチし、実行可能である場合のみ、実行されると述べられています。このディレクトリ内のその他のファイルやディレクトリは、自動的に無視されます。つまり、FreeBSD では、自動起動を有効にするには、ファイル `mysql.server' を `/usr/local/etc/rc.d/mysql.server.sh' としてインストールする必要があります。
一部のオペレーティングシステムでは、上記の方法の代わりに、`/etc/rc.local' または `/etc/init.d/boot.local' を使用して、ブートアップ時にその他のサービスを起動することもできます。この方法で MySQL を起動するには、以下のような記述を末尾に追加します。
shell> /bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'
グローバル `/etc/my.cnf' ファイルに mysql.server のオプションを追加することもできます。標準的な `/etc/my.cnf' ファイルは、以下のようになります。
[mysqld] datadir=/usr/local/mysql/var socket=/var/tmp/mysql.sock port=3306 user=mysql [mysql.server] basedir=/usr/local/mysql
mysql.server スクリプトは、datadir、basedir、および pid-file の各オプションを認識します。.
以下の表に、各起動スクリプトが、オプション設定ファイルから読み取るオプショングループを示します。
| スクリプト | オプショングループ |
mysqld | [mysqld]、[server]、および [mysqld-major-version]
|
mysql.server | [mysql.server]、[mysqld]、および [server]
|
mysqld_safe | [mysqld]、[server]、および [mysqld_safe]
|
下位互換性のために、mysql.server は [mysql_server] グループも読み取り、mysqld_safe は [safe_mysqld] グループも読み取ります。しかし、これらの代わりに [mysql.server] グループと [mysqld_safe] グループを使用するようにオプション設定ファイルを更新する必要があります。
See section 4.1.2 `my.cnf' オプション設定ファイル。
アップグレードを行う前に、既存のデータベースをバックアップする必要があります。
同じベースバージョンの MySQL である限り、MySQL のデータファイルを同じアーキーテクチャ上の異なるバージョンのプラットフォームに移動することができます。現在のベースバージョンは 4 です。
MySQL を運用中にキャラクタセットを変更する場合は、すべてのテーブルで myisamchk -r -q --set-character-set=charset を実行する必要があります。この処理を行わないと、キャラクタセットを変更したことによってソート順序も変更されることがあるため、インデックスが正しく順序付けられないことがあります。
新しいバージョンに不安を感じる場合は、いつでも、旧バージョンの mysqld の名前を mysqld-old-version-number のような名前に変更することができます。
そのようにしておくと、新しいバージョンの mysqld が予期しない動作をしたときに、その mysqld をシャットダウンして旧バージョンの mysqld で再起動するだけで済みます。
アップグレード後に、再コンパイルしたクライアントプログラムで Commands out of sync や予期しないコアダンプなどの問題が発生した場合は、プログラムのコンパイル時に旧バージョンのヘッダファイルやライブラリファイルを使用した可能性があります。この場合、`mysql.h' ファイルおよび `libmysqlclient.a' ライブラリの日付をチェックして、それらが新しい MySQL ディストリビューションのものであるかどうかを確認します。新しい MySQL ディストリビューションのものでない場合は、プログラムを再コンパイルしてください。
新しい mysqld サーバが起動しない、またはパスワードなしで接続できないなどの問題が発生した場合は、旧バージョンのインストールの `my.cnf' ファイルがないかどうかをチェックします。これは、program-name --print-defaults を使用してチェックすることができます。. プログラム名以外のものが出力された場合は、サーバの動作に影響を及ぼすアクティブな `my.cnf' ファイルがあります。
新しいリリースの MySQL をインストールするときは常に、Perl DBD-mysql モジュールの再ビルドと再インストールを行うことをお勧めします。同じことは、Python MySQLdb モジュールなどのその他の MySQL インタフェースについても当てはまります。
MySQL 4.0 と MySQL 4.1 では、重大なバグを修正し、MySQL と ANSI SQL 標準との互換性を向上させるためにいくつかの目立つ動作が変更されています。これらの変更は、アプリケーションに影響を及ぼすことがあります。
一部の 4.1 の動作は、完全に 4.1 にアップグレードする前に 4.0 でテストすることができます。比較的最近の MySQL 4.0 リリース(4.0.12 以降)には、mysqld 用の --new 起動オプションが追加されています。
このオプションを使用すると、最も重大な変更が行われた 4.1 の動作が提供されます。
SET @@new=1 コマンドを使用して特定のクライアント接続に対してこれらの動作を有効にしたり、有効になっている場合は SET @@new=0 コマンドを使用して無効にすることができます。
4.1 の変更点によって影響を受けると思われる場合は、4.1 にアップグレードする前に、最新の MySQL 4.0 バージョンをダウンロードして、設定ファイルに以下を追加し、--new オプションを指定してその MySQL を実行することをお勧めします。
[mysqld-4.0] new
このようにすれば、4.0 上で、新しい機能を動作させて、アプリケーションがそれらと連携して正常に機能するかどうかを、確認することができます。これは、4.1 以降への完全アップグレードを行うときに、苦労せずにスムーズに移行するのに役に立ちます。上記の方法でこれを行うと、誤って --new オプションを指定して 4.1 バージョンを実行することはありません。
以下では、アプリケーションに影響を及ぼす可能性のある変更点や、バージョン 4.1 にアップグレードするときに注意する必要のある変更点について説明します。
TIMESTAMP は、'YYYY-MM-DD HH:MM:SS' 形式の文字列として返されるようになった(4.0.12 以降では、--new オプションを使用してこの点に関して 4.1 のように動作させることができる)。バージョン 4.0 のように値を数値として返すようにする場合は、TIMESTAMP カラムを取得するときに、それらのカラムに +0 を追加する。
mysql> SELECT ts_col + 0 FROM tbl_name;
TIMESTAMP カラムの桁数指定のサポートは中止された。
たとえば、カラムを TIMESTAMP(10) と宣言しても、(10) は無視される。
これらの変更は、標準 SQL に準拠するために必要であった。今後のバージョンで、さらに変更が行われ(この変更と下位互換性がある)、タイムスタンプ長で秒の小数部の桁数を必要なだけ指定できるようになる予定。
0xFFDF などのバイナリ値は、数値ではなく文字列であると見なされるようになった。これによって、文字列をバイナリ値として入力するのが便利なキャラクタセットのいくつかの問題が修正される。この変更では、バイナリ値を整数として数値比較する場合は、以下のように CAST() を使用する必要がある。
mysql> SELECT CAST(0xFEFF AS UNSIGNED INTEGER) < CAST(0xFF AS UNSIGNED INTEGER);
-> 0
CAST() を使用しないと、以下のように文字列比較が行われる。
mysql> SELECT 0xFEFF < 0xFF;
-> 1
数値コンテキストでのバイナリ項目の使用や、= 演算子を使用したバイナリ項目の比較は、従来どおりに機能する(4.0.13 以降では、--new オプションを使用してこの点に関して 4.1 のように動作させることができる)。
DATE 値、DATETIME 値、または TIME 値を生成する関数の場合、クライアントに返される結果は時間の持つ型に修正されている。たとえば、MySQL 4.1 では、以下のような結果が返される。
mysql> SELECT CAST("2001-1-1" as DATETIME);
-> '2001-01-01 00:00:00'
MySQL 4.0 では、以下のように異なる結果が返される。
mysql> SELECT CAST("2001-1-1" as DATETIME);
-> '2001-01-01'
AUTO_INCREMENT カラムに DEFAULT 値を指定できなくなった(4.0 では DEFAULT 値は自動的に無視される。4.1 ではエラーが発生する)。
LIMIT は負の引数を受け付けなくなった。
-1 の代わりに 18446744073709551615 を使用する。
SERIALIZE は、sql_mode 変数の有効なオプション値ではなくなった。代わりに、SET TRANSACTION ISOLATION LEVEL SERIALIZABLE を使用する。SERIALIZE は、mysqld の --sql-mode オプションとしても有効ではなくなった。代わりに、--transaction-isolation=SERIALIZABLE を使用する。
SHOW CREATE TABLE と mysqldump によって表示される
(MySQL バージョン 4.0.6 以降は、新しいダンプファイルを読み取ることはできる。これより前のバージョンは、新しいダンプファイルを読み取ることはできない)。
mysqldump を使用する。
See section 4.9.7 mysqldump(テーブル構造とデータのダンプ)。
--shared_memory_base_name オプションを使用する必要がある。
XXX() ごとに xxx_clear() 関数を宣言しなければならなくなった。
一般に、以前の MySQL バージョンから 4.1 にアップグレードする場合は、以下のステップを実行する必要がある。
Password カラムを生成するように権限テーブルを更新する。テーブルの更新は、mysql_fix_privilege_tables を使用して行う。手順については、section 2.5.6 権限テーブルのアップグレード を参照。
4.1 では、より強力なセキュリティを実現するようにパスワードのハッシュメカニズムが変更されています。ただし、4.0 以前のクライアントライブラリを使用するクライアントがある場合に、互換性の問題が発生することがあります(4.1 にアップグレードされていないリモートホストからクライアントが接続するような状況では 4.0 クライアントがある可能性が非常に高いです)。考えられるいくつかのアップグレード方針を以下に示します。旧バージョンのクライアントとの互換性の目標とセキュリティの目標の間でさまざまなトレードオフが存在します。
mysql_fix_privilege_tables スクリプトを実行して、長いパスワードハッシュを格納できるように user テーブルの Password カラムを拡張する。ただし、--old-passwords オプションを指定してサーバを実行して、4.1 より前のバージョンのクライアントが引き続き短いハッシュのクライアントアカウントに接続できるようにして下位互換性を実現する
すべてのクライアントが 4.1 にアップグレードされたら、最終的に --old-passwords サーバオプションの使用を中止できるまた、MySQL アカウントのパスワードを、より安全で新しい形式を使用するように変更することもできる
mysql_fix_privilege_tables スクリプトを実行して、user テーブルの Password カラムを拡張する。すべてのクライアントが 4.1 にアップグレードされていることがわかっている場合は、--old-passwords オプションを指定しないでサーバを実行する。代わりに、既存のすべてのアカウントのパスワードを、新しい形式を持つように変更する。純粋な 4.1 インストールが最も安全である。
クライアント認証とパスワード変更操作に関係するパスワードハッシュの予備知識については、section 4.3.11 MySQL 4.1 のパスワードハッシュ を参照してください。
一般に、以前の MySQL バージョンから 4.0 にアップグレードする場合は、以下を実行する必要があります。
mysql_fix_privilege_tables スクリプトを使用して行う。手順については、section 2.5.6 権限テーブルのアップグレード を参照。
mysql_convert_table_format スクリプトを使用して、旧バージョンの ISAM ファイルを MyISAM ファイルに変換する(このスクリプトは、Perl スクリプトであるため、DBI をインストールする必要がある)。特定のデータベース内のテーブルを変換するには、以下のコマンドを使用する。
shell> mysql_convert_table_format データベース名注意: このコマンドは、データベース内のすべてのテーブルが
ISAM テーブルまたは MyISAM テーブルである場合にのみ使用する。他の型のテーブルを MyISAM に変換しないようにするには、コマンドラインのデータベース名の後ろに ISAM テーブルの名前を明示的に列記する。
他に、テーブルを MyISAM に変換するための ALTER TABLE table_name TYPE=MyISAM ステートメントを各 ISAM テーブルに対して発行することもできる。
特定のテーブルのテーブル型を確認するには、以下のステートメントを使用する。
mysql> SHOW TABLE STATUS LIKE 'tbl_name';
DBD-mysql モードなど)を使用する MySQL クライアントがないことを確認する。`libmysqlclient.so' で使用されるデータ構造が変更されたので、そのようなクライアントがある場合は、それらのクライアントを再コンパイルする必要がある。
同じことは、Python MySQLdb モジュールなどのその他の MySQL インタフェースについても当てはまる。
上記の処理を行わなくても MySQL 4.0 は動作しますが、新しいセキュリティ特権を使用できないため、後で MySQL 4.1 以降にアップグレードするときに問題が発生することがあります。ISAM ファイル形式は、MySQL 4.0 では引き続き機能しますが、廃止予定であり、MySQL 4.1 では無効化されます(デフォルトではコンパイルされない)。代わりに、MyISAM テーブルが使用されます。
旧バージョンのクライアントは、バージョン 4.0 サーバと支障なく連携して動作します。
上記の処理を行った場合でも、MySQL 4.0 シリーズで問題が発生したときは、MySQL 3.23.52 以降にダウングレードできます。その場合、mysqldump を使用して、フルテキストインデックスを使用するすべてのテーブルをダンプし、ダンプファイルを 3.23 サーバに再ロードする必要があります。
これは、4.0 ではフルテキストインデックス作成に新しい形式が使用されるためです。
以下では、バージョン 4.0 にアップグレードするときに注意する必要のある点についてさらに詳しく説明します。
mysql.user テーブルには多数の新しい権限がある。
See section 4.4.1 GRANT および REVOKE の構文。
これらの新しい権限を機能させるためには、権限テーブルを更新する必要がある。
更新の手順については、section 2.5.6 権限テーブルのアップグレード を参照。
権限テーブルを更新するまでは、すべてのユーザが SHOW DATABASES 権限、CREATE TEMPORARY TABLES 権限、および LOCK TABLES 権限を持つ。SUPER 権限と EXECUTE 権限は、PROCESS から自身の値を取得する。
REPLICATION SLAVE 権限と REPLICATION CLIENT 権限は、FILE から自身の値を取得する。
新しいユーザを作成するスクリプトがある場合は、新しい権限を使用するようにそれらのスクリプトを変更する必要がある。それらのスクリプトで GRANT コマンドを使用していない場合は、権限テーブルを直接変更する代わりに GRANT を使用するようにスクリプトを変更するよい機会である。
4.0.2 以降では、オプション --safe-show-database は廃止され、何の動作もしない。 See section 4.3.3 セキュリティ関連の mysqld スタートアップオプション。
バージョン 4.0.2 で、新しいユーザに対して Access denied エラーが発生した場合は、これまでは必要のなかったいくつかの新しい権限が必要であるかどうかをチェックする。特に、新しいスレーブに対しては FILE の代わりに REPLICATION SLAVE が必要。
mysqld_safe へのシンボリックリンクとして safe_mysqld が含められている。
--skip-innodb サーバ起動オプションを使用する。InnoDB を組み込まないで MySQL をコンパイルするには、--without-innodb オプションを指定して configure を実行する。
myisam_max_extra_sort_file_size および myisam_max_extra_sort_file_size は、バイト単位で指定されるようになった(4.0.3 より前のバージョンではメガバイト単位で指定されていた)。
MyISAM/ISAM ファイルの外部システムロックは、デフォルトでオフに設定されるようになった。これは、--external-locking を実行してオンにすることができる(ただし、通常はオンにする必要はない)。
| 変更前の名前 | 変更後の名前 |
myisam_bulk_insert_tree_size | bulk_insert_buffer_size
|
query_cache_startup_type | query_cache_type
|
record_buffer | read_buffer_size
|
record_rnd_buffer | read_rnd_buffer_size
|
sort_buffer | sort_buffer_size
|
warnings | log-warnings
|
--err-log | --log-error(mysqld_safe 用)
|
record_buffer、sort_buffer、および warnings の各起動オプションは、MySQL 4.0 でも機能するが、廃止予定である。
| 変更前の名前 | 変更後の名前 |
SQL_BIG_TABLES | BIG_TABLES
|
SQL_LOW_PRIORITY_UPDATES | LOW_PRIORITY_UPDATES
|
SQL_MAX_JOIN_SIZE | MAX_JOIN_SIZE
|
SQL_QUERY_CACHE_TYPE | QUERY_CACHE_TYPE
|
SET SQL_SLAVE_SKIP_COUNTER=# の代わりに SET GLOBAL SQL_SLAVE_SKIP_COUNTER=# を使用する必要がある。
mysqld 起動オプション --skip-locking および --enable-locking は、それぞれ、--skip-external-locking および --external-locking という名前に変更された。
SHOW MASTER STATUS は、バイナリログが有効になっていない場合は空のセットを返すようになった。
SHOW SLAVE STATUS は、スレーブが初期化されていない場合は空のセットを返すようになった。
mysqld の --temp-pool オプションはデフォルトで有効になるようになった。このオプションを使用すると、一部のオペレーティングシステム(最も顕著なのは Linux)でパフォーマンスが向上するためである。
DOUBLE カラムと FLOAT カラムは、UNSIGNED フラグを受け付けるようになった(以前は、これらのカラムでは UNSIGNED は無視されていた)。
ORDER BY col_name DESC は、NULL 値を最後にする。3.23 と 4.0.11 より前の 4.0 バージョンでは、場合によって異なっていた。
SHOW INDEX のカラムは 3.23 よりも 2 つ増えている(Null と Index_type)。
CHECK、LOCALTIME、および LOCALTIMESTAMP は予約語になった。
|、&、<<、>>、および ~)の結果は、符号なしになった。符号付きの結果が必要なコンテキストでこれらを使用すると、問題を引き起こすことがある。
See section 6.3.5 キャスト関数。
UNSIGNED 型の場合、結果の値は符号なしになる。つまり、MySQL 4.0 にアップグレードする前に、アプリケーションをチェックして、符号なしのエンティティから値を差し引いて、負の答えを得たい場合や、整数カラムから符号なしの値を差し引く場合がないかを確認する。mysqld を起動するときに --sql-mode=NO_UNSIGNED_SUBTRACTION オプションを使用すると、この動作を無効にすることができる。 See section 6.3.5 キャスト関数。
MATCH ... AGAINST (... IN BOOLEAN MODE) を使用するには、REPAIR TABLE table_name USE_FRM でテーブルを再ビルドする必要がある。
LOCATE() と INSTR() は、いずれかの引数がバイナリ文字列である場合にケース依存となる。それ以外の場合は、ケース非依存である。
STRCMP() は、比較を実行するときに現在のキャラクタセットを使用するようになった。つまり、デフォルトの比較動作はケース非依存になった。
HEX(string) は、string で 16 進数に変換された文字を返す。数値を 16 進数に変換したい場合は、必ず、数値引数を指定して HEX() を呼び出す。
INSERT INTO ... SELECT は、常に IGNORE が有効になっていた。
4.0.1 では、IGNORE が指定されていない限り、MySQL はエラーが発生するとデフォルトで停止する(そして、場合によってロールバックする)。
CFLAGS=-DUSE_OLD_FUNCTIONS を指定して MySQL をコンパイルしていない限り、旧バージョンの C API 関数 mysql_drop_db()、mysql_create_db()、および mysql_connect() はサポートされなくなった。ただし、代わりに新しい 4.0 API を使用するようにクライアントプログラムを変更する方が望ましい。
MYSQL_FIELD 構造体の length および max_length は、unsigned int から unsigned long に変更された。関数の printf() クラスの引数としてこれらを使用した場合に、警告メッセージが生成されることがある以外は、この変更によって問題が発生することはない。
TRUNCATE TABLE を使用する必要がある(4.0 では DELETE FROM table_name がレコードカウントを返し、TRUNCATE TABLE は速度が上がった)。
TRUNCATE TABLE または DROP DATABASE を実行するときに、アクティブな LOCK TABLES またはトランザクションがあると、エラーが発生する。
BIGINT カラムに値を格納する必要がある(MySQL 3.23 では文字列を使用していた)。引き続き文字列を使用することもできるが、整数を使用する方が効率的である。
SHOW OPEN TABLES の形式が変更された。
mysql_thread_init() および mysql_thread_end() を使用する必要がある。 See section 11.1.14 スレッドクライアントの作成方法。
DBD::mysql モジュールを再コンパイルする場合は、DBD-mysql バージョン 1.2218 以降を入手する必要がある。これは、1.2218 より前のバージョンの DBD モジュールでは、廃止になった mysql_drop_db() コールが使用されるためである。
バージョン 2.1022 以降が推奨される。
RAND(seed) は 3.23 の場合とは異なる乱数系を返す。この変更は、RAND(seed) と RAND(seed+1) をさらに明確に区別するために行われた。
IFNULL(A,B) によって返されるデフォルトの型は、A および B の型のうちで、より '総称的な' 方が設定されるようになった(総称性の度合いの高い順に並べると、文字列、REAL、INTEGER となる)。
Windows 上で MySQL サーバを実行する場合は、section 2.5.8 Windows 上での MySQL のアップグレード も参照してください。レプリケーションを使用する場合は、section 4.11.2 レプリケーション実装の概要 も参照してください。
MySQL バージョン 3.23 は、新しい MyISAM 型と以前の ISAM 型のテーブルをサポートします。バージョン 3.23 で以前のテーブルを使用する場合に、それらのテーブルを変換する必要はありません。デフォルトでは、新しいテーブルはすべて、MyISAM 型で作成されます(ただし、--default-table-type=isam オプションを指定して mysqld を起動した場合を除きます)。ISAM テーブルは、ALTER TABLE table_name TYPE=MyISAM または Perl スクリプト mysql_convert_table_format を使用して MyISAM 形式に変換することができます。
バージョン 3.22 および 3.21 のクライアントは、バージョン 3.23 サーバと支障なく連携して動作します。
以下では、バージョン 3.23 にアップグレードするときに注意する必要のある事項について説明します。
tis620 キャラクタセットを使用するテーブルはすべて、myisamchk -r または REPAIR TABLE で修復する必要がある。
DROP DATABASE を実行した場合、リンクと元のデータベースの両方が削除される(3.22 では、configure は readlink() システムコールの使用可能性を検出しないので、これは行われなかった)。
OPTIMIZE TABLE は、MyISAM テーブルのみに対応するようになった。
これ以外のテーブル型のテーブルを最適化するには、ALTER TABLE を使用する。
OPTIMIZE TABLE の実行中は、他のスレッドに使用されるのを防ぐためにテーブルがロックされるようになった。
mysql は、デフォルトで --no-named-commands (-g) を指定して起動されるようになった。このオプションは、--enable-named-commands (-G) を指定して無効にすることができる。場合によって、これによって非互換性の問題が発生することがある(セミコロンなしの名前付きコマンドを使用する SQL スクリプトなどの場合)。第 1 行目のロング形式のコマンドは引き続き有効である。
MONTH() など)は、0000-00-00 日付の場合に 0 を返すようになった(MySQL 3.22 では、これらの関数は NULL を返していた)。
ISAM テーブルに german 文字ソート順序を使用している場合は、isamchk -r を使用してそれらのテーブルを修復する必要がある。これは、このソート順序にいくつかの変更が加えられたためである。
IF() のデフォルトの戻り値の型は、最初の引数のみに依存するのではなく、両方の引数に依存するようになった。
AUTO_INCREMENT カラムを使用して負の数を格納しないようにする。負の数を格納した場合に、-1 から 0 にラップするときに問題が発生したためである。AUTO_INCREMENT カラムには 0 を格納してはならない。CHECK TABLE は、0 値に対して警告を返す。0 値はテーブルをダンプしてリストアした場合に、変化することがあるためである。MyISAM テーブルの AUTO_INCREMENT は、より低いレベルで処理されるようになり、以前よりもかなり高速になっている。さらに、MyISAM テーブルでは、テーブルからレコードを削除した場合でも、古い番号は再利用されなくなった。
CASE、DELAYED、ELSE、END、FULLTEXT、INNER、RIGHT、THEN、および WHEN は予約語になった。
FLOAT(X) は、真の浮動小数点型になり、小数部の桁数が固定された値でなくなった。
DECIMAL(length,dec) 型を使用してカラムを宣言するときに、length 引数に符号と小数点の位置が含まれなくなった。
TIME 文字列は、以下のいずれかの形式にしなければならなくなった。
[[[DAYS] [H]H:]MM:]SS[.fraction] または [[[[[H]H]H]H]MM]SS[.fraction]。
LIKE は、= 演算子の場合と同じ文字比較ルールを使用して文字列を比較するようになった。旧バージョンの動作が必要な場合は、CXXFLAGS=-DLIKE_CMP_TOUPPER フラグを指定して MySQL をコンパイルする。
REGEXP は、どちらの文字列もバイナリ文字列でない場合はケース非依存になった。
MyISAM(`.MYI')テーブルをチェックまたは修復する場合は、CHECK TABLE ステートメントまたは myisamchk コマンドを使用する必要がある。ISAM(`.ISM')テーブルの場合は、isamchk コマンドを使用する。
mysqldump ファイルに MySQL バージョン 3.22 とバージョン 3.23 の間の互換性を持たせたい場合は、mysqldump に --opt オプションまたは --all オプションを指定しない。
DATE_FORMAT() へのすべてのコールをチェックして、各書式文字の前に `%' があることを確認する
(MySQL バージョン 3.22 以降で、この構文はすでに許可されている)。
mysql_fetch_fields_direct() は関数になり(これまではマクロ)、MYSQL_FIELD の代わりに MYSQL_FIELD へのポインタを返すようになった。
mysql_num_fields() は、MYSQL* オブジェクトに対して使用できなくなった(引数として MYSQL_RES* 値をとる関数になった)。MYSQL* オブジェクトには、代わりに mysql_field_count() を使用する。
SELECT DISTINCT ... の出力は、ほとんどの場合ソートされた。バージョン 3.23 では、ソートされた出力を取得するには、GROUP BY または ORDER BY を使用する必要がある。
SUM() は、一致するレコードがない場合に 0 の代わりに NULL を返すようになった。これは、SQL-99 に対応したものである。
NULL 値を持つ AND または OR は、0 の代わりに NULL を返すようになった。これは、主に、NOT NULL = NULL のように、AND/OR 式で NOT を使用するクエリに影響を及ぼす。
LPAD() および RPAD() は、結果の文字列が length 引数より長い場合に、その文字列を短くするようになった。
バージョン 3.21 とバージョン 3.22 の間では互換性に影響するような変更は行われていません。
唯一の落とし穴は、DATE 型カラムで作成された新しいテーブルでは、新しい方法で日付が格納されることです。旧バージョンの mysqld からこれらの新しいカラムにアクセスすることはできません。
MySQL バージョン 3.22 をインストールした後に、新しいサーバを起動して、mysql_fix_privilege_tables スクリプトを実行する必要があります。このスクリプトによって、GRANT コマンドを使用するために必要な新しい権限が追加されます。この処理をしないと、ALTER TABLE、CREATE INDEX、または DROP INDEX を使用しようとしたときに、Access denied が返されます。権限テーブルの更新の手順については、section 2.5.6 権限テーブルのアップグレード を参照してください。
mysql_real_connect() への C API インタフェースは変更されました。この関数を呼び出す旧バージョンのクライアントプログラムがある場合は、新しい db 引数に 0 を指定します(または db 要素を送信するようにクライアントのコードを作成し直します)。また、mysql_real_connect() を呼び出す前に mysql_init() を呼び出す必要もあります。この変更は、新しい mysql_options() 関数が MYSQL ハンドラ構造にオプションを保存できるようにするために行われました。
mysqld 変数 key_buffer は、key_buffer_size という名前に変更されました。ただし、起動ファイルでは以前の名前を引き続き使用することができます。
バージョン 3.20.28 より前のバージョンを実行していて、バージョン 3.21 に切り替える場合は、以下のことを行う必要があります。
--old-protocol オプションを指定して mysqld バージョン 3.21 サーバを起動して、そのサーバをバージョン 3.20 ディストリビューションからのクライアントと共に使用することができます。この場合、新しいクライアント関数 mysql_errno() は、サーバエラーは返さず、CR_UNKNOWN_ERROR だけを返します(ただし、この関数はクライアントエラーに対しては機能します)。また、サーバは、新しい方式ではなく、3.21 より前の古い password() チェック方式を使用します。
mysqld に --old-protocol オプションを使用しない場合は、以下の変更を行う必要があります。
MyODBC 2.x ドライバを入手すること。
scripts/add_long_password スクリプトを実行して、mysql.user テーブルの Password フィールドを CHAR(16) に変換する。
mysql.user テーブルに割り当て直す(31 ビットのパスワードではなく 62 ビットのパスワードを取得するため)。
MySQL バージョン 3.20.28 以降では、クライアントに影響を及ぼすことなく新しい user テーブル形式を処理することができます。バージョン 3.20.28 より前の MySQL バージョンを使用している場合、user テーブルを変換すると、パスワードはその MySQL では無効になります。したがって、安全のために、最初にバージョン 3.20.28 以上にアップグレードしてから、バージョン 3.21 にアップグレードしてください。
新しいクライアントコードは 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 です(注意: user 引数と password 引数は順序が入れ替わりました)。
See section 11.5.2 DBI インタフェース。
以下の変更は、旧バージョンのアプリケーションのクエリに影響を及ぼすことがあります。
HAVING は ORDER BY 節の前に指定しなければならなくなった。
LOCATE() のパラメータの順序が入れ替えられた。
DATE、TIME、および TIMESTAMP である。
一部のリリースでは、権限テーブル(mysql データベース内のテーブル)の構造が変更され、新しい権限または機能が追加されています。新しいバージョンの MySQL に更新したときに権限テーブルが確実に最新のものであるようにするには、権限テーブルも更新する必要があります。
Unix システムまたは Unix ライクなシステムでは、以下のように mysql_fix_privilege_tables スクリプトを実行して権限テーブルを更新します。
shell> mysql_fix_privilege_tables
このスクリプトは、サーバの稼動中に実行しなければなりません。このスクリプトは、ローカルホスト上で稼動しているサーバに root として接続します。
root アカウントがパスワードを必要とする場合は、コマンドラインでパスワードを指定します。MySQL 4.1 以降のバージョンの場合は、以下のようにパスワードを指定します。
shell> mysql_fix_privilege_tables --password=root_password
MySQL 4.1 より前のバージョンの場合は、以下のようにパスワードを指定します。
shell> mysql_fix_privilege_tables root_password
mysql_fix_privilege_tables スクリプトは、権限テーブルを現行の形式に変換するために必要な処理を実行します。スクリプトの実行中にいくつかの Duplicate column name 警告が表示されることがあります。これらの警告は無視してかまいません。
スクリプトの実行後に、サーバを停止してから、再起動します。
Windows システムでは、MySQL 4.0.15 までは、権限テーブルを簡単に更新する方法はありません。バージョン 4.0.15 以降では、mysql クライアントを使用して実行できる mysql_fix_privilege_tables.sql SQL スクリプトが MySQL ディストリビューションに含まれています。MySQL が `C:\mysql' にインストールされている場合、コマンドは以下のようになります。
C:\mysql\bin> mysql -u root -p mysql mysql> SOURCE C:\mysql\scripts\mysql_fix_privilege_tables.sql
MySQL がこれ以外のディレクトリにインストールされている場合は、パス名をそれに合わせて変更してください。
このコマンドは、root のパスワードの入力を求めるプロンプトを表示します。プロンプトが表示されたらパスワードを入力します。
Unix の手順の場合と同様に、mysql が mysql_fix_privilege_tables.sql スクリプトのステートメントを処理しているときにいくつかの Duplicate column name 警告が表示されることがあります。これらの警告は、無視してかまいません。
スクリプトの実行後に、サーバを停止してから、再起動します。
MySQL バージョン 3.23 を使用している場合、同じ浮動小数点形式をサポートする異なるアーキーテクチャ間で、MyISAM テーブルの `.frm'、`.MYI'、および `.MYD' の各ファイルをコピーできます(MySQL はバイトスワップの問題を処理します)。
See section 7.1 MyISAM テーブル。
MySQL ISAM データファイルおよびインデックスファイル(それぞれ、`.ISD' および `*.ISM')は、アーキーテクチャ依存であり、場合によっては OS にも依存します。現在のマシンとは異なるアーキーテクチャまたは OS を持つ別のマシンにアプリケーションを移動したい場合、そのマシンにファイルを単純にコピーするだけでは、データベースを移動することはできません。代わりに、mysqldump を使用してください。
mysqldump は、デフォルトで SQL ステートメントが格納されたファイルを作成します。
ファイルを移動先のマシンに転送し、mysql クライアントにデータとして入力します。
mysqldump --help を実行して、使用可能なオプションを確認します。
新しいバージョンの MySQL にデータを移動する場合は、高速でコンパクトなダンプを行うために、新しいバージョンで mysqldump --opt を使用してください。
マシン間でデータベースを移動するための最も簡単な(ただし、最も迅速というわけではありません)方法は、データベースが置かれているマシンで以下のコマンドを実行することです。
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
また、mysqldump と mysqlimport を使用してデータベースを転送することもできます。
大きなテーブルの場合、この方法を使用すると、mysqldump だけを使用した場合よりもはるかに処理が速くなります。
以下のコマンドでは、DUMPDIR は、mysqldump からの出力を格納するのに使用するディレクトリの完全パス名です。
まず、以下のように、出力ファイル用のディレクトリを作成し、データベースをダンプします。
shell> mkdir DUMPDIR shell> mysqldump --tab=DUMPDIR db_name
次に、DUMPDIR ディレクトリ内のファイルを移動先マシン上の対応するディレクトリに転送し、そのマシン上の MySQL にロードします。
shell> mysqladmin create db_name # データベース作成 shell> cat DUMPDIR/*.sql | mysql db_name # テーブル作成 shell> mysqlimport db_name DUMPDIR/*.txt # load data into tables
また、mysql データベースも忘れずにコピーしてください。このデータベースには、権限テーブル (user、db、host) が格納されているためです。mysql データベースを配置するまでは、移動先のマシン上で MySQL root ユーザとしてコマンドを実行する必要があります。
mysql データベースを移動先のマシンにデータベースをインポートしたら、mysqladmin flush-privileges を実行して、サーバに権限テーブル情報を再ロードさせます。
Windows 上で MySQL をアップグレードする場合は、以下の手順に従って行います。
NET STOP mysql または Services ユーティリティ、それ以外の場合は mysqladmin shutdown を使用する)。
WinMySQLAdmin プログラムを実行している場合は、このプログラムを終了する。
c:\mysql\data ) を念のためバックアップする。
C:\mysql4 などの別のディレクトリにインストールする。旧バージョンを上書きすることを推奨する。ただし、data が上書きされないように注意する。
NET START mysql、それ以外の場合は直接 mysqld を起動する)。
考えられるエラー状況は以下のとおりです。
A system error has occurred. System error 1067 has occurred. The process terminated unexpectedly.
このエラーは、`my.cnf' ファイル(デフォルトでは `C:\my.cnf')に、MySQL が認識できないオプションが含まれていることを示しています。MySQL が `my.cnf' ファイルを使用しないようにするためにこのファイルの名前を `my_cnf.old' などに変更して、MySQL を再起動して、これが事実であるかどうかを確認します。事実であることを確認したら、原因となったオプションを特定する必要があります。新しい `my.cnf' ファイルを作成して、サーバの起動が失敗する原因となるオプションを特定するまで、古いファイルの各パートをそのファイルに移動します(1 つのパートを移動するたびにサーバを再起動します)。
ここでは、Windows 上で MySQL を使用する場合に固有の問題について説明します。
ここでは、SSH を使用してリモートの MySQL サーバとの安全な接続を確立するための接続方法について説明します(David Carlson 記(dcarlson@mplcomm.com))。
SecureCRT である。
もう 1 つは、http://www.f-secure.com/ の f-secure である。フリーソフトウェアについては、Google(http://directory.google.com/Top/Computers/Security/Products_and_Tools/Cryptography/SSH/Clients/Windows/)で検索できる。
Host_Name = yourmysqlserver_URL_or_IP を設定する。
userid=your_userid を設定して、サーバにログインする。この userid 値は、MySQL アカウントのユーザ名と同じでなくてもかまわない。
local_port: 3306、remote_host: yourmysqlservername_or_ip、remote_port: 3306 を設定)か、ローカル転送(port: 3306、host: localhost、remote port: 3306 を設定)を実行する。
yourmysqlservername ではなく localhost を入力する。
これで、SSH を使用して暗号化された、MySQL への ODBC 接続が確立されました。
ソースファイル内では、`mysql.h' の前に `my_global.h' をインクルードしてください。
#include <my_global.h> #include <mysql.h>
`my_global.h' には、Windows 上でプログラムをコンパイルする場合に Windows との互換性のために必要なその他のファイル(`windows.h' など)がインクルードされています。
コードは、動的な `libmysql.lib' ライブラリ(要求に応じて `libmysql.dll' をロードする単なるラッパ)にリンクすることも、静的な `mysqlclient.lib' ライブラリにリンクすることもできます。
注意: MySQL クライアントライブラリはスレッド化されたライブラリとしてコンパイルされるので、コードもマルチスレッド化されるようにコンパイルする必要があります。
Windows 用の MySQL は、非常に安定していることを自ら証明しました。Windows バージョンの MySQL には、それに対応する Unix バージョンと同じ機能が組み込まれていますが、以下の例外があります。
mysqld を長時間実行しない。その他のバージョンの Windows ではこのバグはない。
pread() 呼び出しおよび pwrite() 呼び出しに依存して、INSERT と SELECT の混在を可能にしている。現時点では、当社は相互排他ロック(mutex)を使用して pread()/pwrite() をエミュレートしている。長期的には、処理速度を向上させるためにNT/2000/XP 上で readfile()/writefile() インタフェースを使用できるように、ファイルレベルのインタフェースを仮想インタフェースに置き換える予定である。
現在の実装では、MySQL が使用できるオープンファイルの数は 1024 個に制限されている。したがって、NT/2000/XP 上では、Unix の場合と同じ数の同時実行スレッドを実行することはできない。
mysqladmin kill はスリープ状態の接続では機能しない。
mysqladmin shutdown が中断することはない。
DROP DATABASE
mysqladmin shutdown を使用する。
LOAD DATA INFILE または SELECT ... INTO OUTFILE を使用する場合は、以下のように `/' 文字で区切る Unix スタイルのファイル名を使用する。
mysql> LOAD DATA INFILE "C:/tmp/skr.txt" INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:/tmp/skr.txt' FROM skr;あるいは、以下のように `\' 文字を二重にする。
mysql> LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr; mysql> SELECT * INTO OUTFILE 'C:\\tmp\\skr.txt' FROM skr;
^Z / CHAR(24) が含まれている場合は、Windows は、End-Of-File(EOF)を検出したと見なして、プログラムを中止する。
これは、主に、以下のようにバイナリログを適用しようとしたときに発生する問題である。
mysqlbinlog binary-log-name | mysql --user=rootログを適用するときに問題が発生し、
^Z / CHAR(24) 文字が原因であると思われる場合は、以下の回避策をとる。
mysqlbinlog binary-log-file --result-file=/tmp/bin.sql mysql --user=root --execute "source /tmp/bin.sql"2 番目のコマンドは、バイナリデータが含まれている可能性のある SQL ファイルを確実に読み取とる場合にも使用できる。
Can't open named pipe エラー
error 2017: can't open named pipe to host: . pipe...このエラーは、リリースバージョンの MySQL がNT 上ではデフォルトで名前付きパイプを使用するということが原因で発生する。新しい MySQL クライアントに
--host=localhost オプションを使用してこのエラーを回避するか、以下の情報を格納したオプション設定ファイル `C:\my.cnf' を作成する。
[client] host = localhostバージョン 3.23.50 以降では、
--enable-named-pipe オプションを指定して mysqld-nt または mysqld-max-nt を起動した場合にのみ、名前付きパイプが有効になる。
Access denied for user エラー
Access denied for user: 'some-user@unknown' to database 'mysql' というエラーが表示された場合は、MySQL がホスト名を正しく解決できなかったことを意味する。
このエラーを修正するには、以下の情報を格納した `\windows\hosts' ファイルを作成する。
127.0.0.1 localhost
ALTER TABLE
ALTER TABLE ステートメントの実行中は、他のスレッドによって使用されるのを防ぐためにテーブルがロックされる。これは、Windows 上では他のスレッドが使用中のファイルを削除することはできないという事実に対処する必要がある。将来、この問題の解決策が見つかる可能性がある。
DROP TABLE
MERGE テーブルが使用しているテーブルに対して DROP TABLE を実行できない。これは、MERGE ハンドラが実行するテーブルマッピングを MySQL の上位レイヤが認識しないためである。Windows では開いているファイルを破棄できないため、対象のテーブルを破棄する前に、FLUSH TABLES ですべての MERGE テーブルをフラッシュするか、MERGE テーブルを破棄する必要がある。これについては、ビューを導入するときに修正する予定である。
DATA DIRECTORY と INDEX DIRECTORY
CREATE TABLE の DATA DIRECTORY オプションと INDEX DIRECTORY オプションは無視される。これは、Windows がシンボリックリンクをサポートしていないためである。
Windows 上の MySQL の改良に協力してくださるユーザのために、未解決の問題を以下に示す。
mysqld を強制終了できれば非常に便利である。
しばらくは、mysqladmin shutdown を使用する必要がある。
mysql コマンドラインツールで使用するため Windows に readline を移植する。
mysql、mysqlshow、mysqladmin、および mysqldump)があれば便利である。
mysqladmin kill を使用して、開いているスレッドを強制終了することができるようになる。
glibc に関する以下の注意事項は、MySQL を自分でビルドする場合にのみ適用されます。x86 マシン上で Linux を実行している場合、当社が提供するバイナリを使用する方がはるかに適切です。当社のバイナリは、高負荷なサーバに適したものするために、最適なコンパイラオプションを使用して、当社が考案した最適なパッチ適用済みバージョンの glibc をリンクしています。一般のユーザにとって、多数の同時接続や 2GB の制限を超えるテーブルがある構成であっても、ほとんどの場合、当社のバイナリは最良の選択です。以下のテキストを読んで、どうすべきか判断がつかない場合は、最初に当社のバイナリを試して自社の要件を満たすかどうかを確認し、十分でないことがわかった場合にのみ独自のビルドを検討してください。その場合は、不足な点を当社にお知らせください。次回のバイナリのビルドの際に参考にさせていただきます。
MySQL は、Linux 上で LinuxThreads を使用します。glibc2 が組み込まれていない旧バージョンの Linux を使用している場合は、MySQL をコンパイルする前に LinuxThreads をインストールする必要があります。LinuxThreads は、http://www.mysql.com/downloads/os-linux.html で入手できます。
注意: SMP システム上の Linux 2.2.14 と MySQL で未知の問題が発生したことがあります。SMP システムを使用している場合は、できるだけ速やかに Linux 2.4 にアップグレードすることをお勧めします。これによって、システムの処理速度と安定性が向上します。
注意: バージョン 2.1.1 以前のバージョンの glibc は、INSERT DELAYED ステートメントを発行したときに使用される pthread_mutex_timedwait 処理に重大なバグがあります。glibc をアップグレードするまでは、INSERT DELAYED を使用しないことをお勧めします。
1,000 を超える同時接続を予定している場合は、LinuxThreads にいくつかの変更を加えて再コンパイルし、新しい `libpthread.a' を MySQL に再リンクする必要があります。
`sysdeps/unix/sysv/linux/bits/local_lim.h' の PTHREAD_THREADS_MAX を 4096 に増やし、`linuxthreads/internals.h' の STACK_SIZE を 256 KB に減らしてください。このパスは glibc のルートからの相対パスです。
注意: STACK_SIZE がデフォルト値の 2MB である場合、MySQL は約 600 〜 1,000 接続で不安定になります。
MySQL が十分な数のファイルまたは接続を開けない場合は、その数のファイルを処理するように Linux を設定していない可能性があります。
Linux 2.2 以降では、以下を実行して、割り当てられているファイルハンドルの数をチェックできます。
cat /proc/sys/fs/file-max cat /proc/sys/fs/dquot-max cat /proc/sys/fs/super-max
16 MB を超えるメモリがある場合は、init スクリプト(SuSE Linux の `/etc/init.d/boot.local' など)に以下のような記述を追加してください。
echo 65536 > /proc/sys/fs/file-max echo 8192 > /proc/sys/fs/dquot-max echo 1024 > /proc/sys/fs/super-max
root アカウントでコマンドラインから上記のコマンドを実行することもできますが、次回にコンピュータがリブートしたときにそれらの設定は失われます。
あるいは、sysctl ツールを使用して、ブート時に以下のパラメータを設定することもできます。このツールは、多くの Linux ディストリビューションで使用されています(SuSE Linux 8.0 以降、SuSE でもこのツールが追加されています)。`/etc/sysctl.conf' という名前のファイルに以下の値を入力してください。
# Increase some values for MySQL fs.file-max = 65536 fs.dquot-max = 8192 fs.super-max = 1024
`/etc/my.cnf' に以下を追加する必要もあります。
[mysqld_safe] open-files-limit=8192
これによって、MySQL は最大で 8,192 の接続およびファイルを作成できるようになります。
LinuxThreads の STACK_SIZE 定数は、アドレス空間でのスレッドスタックのスペーシングを制御します。アドレス空間は、個別のスレッドのスタックに十分なスペースを提供できる程度に大きくなければなりませんが、いくつかのスレッドのスタックがグローバルな mysqld データにぶつからない程度に小さくなければなりません。mmap() の Linux 実装は、すでに使用されているアドレスをマップアウトするように指示されると、エラーを返さずに、マップ済みの領域を正常にマップ解除して、ページ全体のデータを消去することが実験でわかっています。mysqld やその他のスレッドアプリケーションの安全性は、スレッドを作成するコードの "紳士的な" 動作にかかっています。ユーザは、任意の時点で稼動しているスレッドの数が、スレッドスタックがグローバルヒープから離れていられる程度に小さくなるようにするための措置をとる必要があります。mysqld では、max_connections 変数に適切な値を設定してこの "紳士的な" 動作を強制する必要があります。
自分で MySQL をビルドする場合、LinuxThreads にパッチを適用する作業をしたくなければ、max_connections を 500 以下の値に設定してください、大きなキーバッファや大きなヒープテーブルなど、mysqld が大量のメモリを割り当てなければならないものがある場合や、2G のパッチが適用された 2.2 カーネルを実行している場合は、さらに小さな値を設定します。当社のバイナリまたは RPM バージョン 3.23.25 以降を使用している場合は、大量のデータを持つキーバッファまたはヒープテーブルがなければ、max_connections を 1500 に設定しても大丈夫です。LinuxThreads の STACK_SIZE の値を小さくすればするほど、スレッドを支障なく作成できるようになります。128K から 256K までの範囲の値を推奨します。
多数の同時接続を使用する場合、fork 爆弾攻撃を避けるために、子プロセスの fork や複製のプロセスにペナルティを科すという、2.2 カーネルの "機能" に悩まされることがあります。これにより、同時実行クライアントの数を増やすと、MySQL がうまくスケールしなくなります。シングル CPU システムでは、スレッド生成が非常に遅くなることでこれが明らかになりました。これは、MySQL に接続するのに長い時間がかかり(1 分程度)、接続を切断するのにも同じだけ時間がかかることを意味します。マルチ CPU システムでは、クライアント数の増加に伴って、クエリ速度が徐々に落ちていくのが観測されました。解決法を見つける過程で、ユーザの 1 人からカーネルパッチを受け取りました。このユーザのサイトではこのパッチが大きな効果を上げているということでした。このパッチは、http://www.mysql.com/Downloads/Patches/linux-fork.patch で入手できます。当社は、開発システムと実稼動システムの両方で、このパッチに非常に広範囲に及ぶテストを実行しました。このパッチは、何の問題も引き起こすことなく MySQL のパフォーマンスを大幅に向上させました。2.2 カーネル上で高負荷のサーバを実行しているユーザに、このパッチをお勧めします。2.4 カーネルではこの問題は修正されています。したがって、システムの現在のパフォーマンスに満足していない場合は、2.2 カーネルにパッチを適用するよりも、2.4 カーネルにアップグレードする方が簡単です。2.4 カーネルは、この公正バグが修正されたほかに、優れた SMP ブーストも提供します。
2 CPU マシンでバージョン 2.4 上の MySQL をテストした結果、MySQL のスケーラビリティが非常に向上することがわかりました。1,000 クライアントに達するまでクエリスループットが低下することは実質的に皆無で、MySQL のスケーリングファクタ(1クライアントでのスループットに対する最大スループットの比率として算出される)は 180% でした。
4 CPU システムでも同様の結果が観察されました。クライアント数が 1,000 に達するまで実質的に速度低下はなく、スケーリングファクタは 300% でした。したがって、高負荷 SMP サーバの場合は、現時点で 2.4 カーネルを使用することを強くお勧めします。最大パフォーマンスを達成するには、2.4 カーネル上で最も高い優先順位を設定して mysqld プロセスを実行することが不可欠であることがわかりました。
これを行うには、renice -20 $$ コマンドを mysqld_safe に追加します。4 CPU マシン上でのテストでは、優先順位を高くすると、400 クライアントでのスループットが 60% 増加しました。
また、現在、当社は、4-way システムおよび 8-wayシステムで 2.4 カーネル上の MySQL のパフォーマンスがどれだけ向上するかについての情報を収集中です。このようなシステムにアクセスでき、何らかのベンチマークを行った場合は、結果を docs@mysql.com にお送りください。将来、このマニュアルにそれらの結果を記載します。
特に SMP システム上で顕著な、MySQL のパフォーマンスを大きく損なうもう 1 つの問題があります。glibc-2.1 の LinuxThreads の相互排他ロック(mutex)の実装は、短時間だけ相互排他ロックを保持する多数のスレッドを持つプログラムに悪影響を及ぼします。皮肉なことに、SMP システムでは、MySQL を未修正の LinuxThreads にリンクしている場合、多くの場合、マシンからプロセッサを取り外すと MySQL のパフォーマンスが向上します。当社は、この動作を修正するための、glibc 2.1.3 用のパッチを用意しました(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch)。
MySQL バージョン 3.23.36 は、glibc-2.2.2 のアダプティブロックを使用します。これは、glibc-2.1.3 のパッチ適用済みの相互排他ロックよりもさらに適切です。ただし、状況によって glibc-2.2.2 の現在の相互排他ロックのコードはオーバースピンし、これによって MySQL のパフォーマンスは損なわれるということに注意してください。mysqld プロセスの優先順位を最も高いものに変更することで、この状況が発生する可能性を下げることができます。オーバースピン動作は、パッチで修正することもできました。このパッチは、http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch で入手できます。
このパッチは、オーバースピン、スレッドの最大数、およびスタックスペーシングの修正を一体化したものです。patch -p0 </tmp/linuxthreads-2.2.2.patch の linuxthreads ディレクトリでパッチを適用する必要があります。
glibc-2.2 の将来のリリースに何らかの形でこのパッチが組み込まれることが望まれます。いずれにしても、glibc-2.2.2 にリンクしている場合は、STACK_SIZE と PTHREAD_THREADS_MAX を修正する必要があります。将来、デフォルトが高負荷の MySQL 設定として許容できる値に修正されて、その結果ユーザ自身のビルドが ./configure; make; make install まで減ることが望まれます。
上記のパッチを使用して libpthread.a の静的ライブラリを別にビルドし、MySQL に静的にリンクするためにのみ使用することをお勧めします。これらのパッチが MySQL にとって安全であり、MySQL のパフォーマンスを大幅に向上させることはわかっていますが、その他のアプリケーションについてはわかっていません。その他のアプリケーションをこのライブラリのパッチ適用済みバージョンにリンクする場合や、パッチ適用済みの共有バージョンをビルドしてシステムにインストールする場合は、LinuxThreads に依存するその他のアプリケーションに関してはユーザ自身の責任で行ってください。
MySQL のインストール時に未知の問題が発生した場合や、一般的なユーティリティがハングした場合は、それがライブラリまたはコンパイラに関連するものである可能性が高いです。その場合は、当社のバイナリを使用することでそれらの問題は解決されます。
バイナリディストリビューションの既知の問題の 1 つは libc を使用する旧バージョンの Linux システム(Red Hat 4.x や Slackware など)に関連するもので、ホスト名解決で重大ではない問題がいくつか発生します。
See section 2.6.2.1 Linux の注意事項 (バイナリディストリビューション)。
LinuxThreads を使用している場合は、最小で 3 つのプロセスが稼動しているのが確認されます。これらは、実際はスレッドで、1 つは LinuxThreads マネージャ用のスレッド、1 つは接続を処理するスレッド、1 つはアラームとシグナルを処理するスレッドです。
注意: Linux カーネルと LinuxThreads ライブラリは、デフォルトでは 1,024 のスレッドしか持つことはできません。したがって、パッチ未適用のシステムでは、MySQL への接続は最大で 1,021 しか使用できません。この制限を回避する方法については http://www.volano.com/linuxnotes.html ページを参照してください。
ps で dead 状態の mysqld デーモンプロセスが表示された場合は、通常は、MySQL にバグがあるか、壊れたテーブルがあることを意味します。 See section A.4.1 MySQL が何度もクラッシュする場合に行うこと。
SIGSEGV シグナルで mysqld が停止した場合に Linux 上でコアダンプを取得するには、--core-file オプションを指定して mysqld を起動します。注意: ulimit -c 1000000 を mysqld_safe に追加するか、--core-file-size=1000000 を指定して mysqld_safe を起動して、コアファイルのサイズを増やします。
See section 4.8.2 mysqld_safe(mysqld のラッパ)。
独自の MySQL クライアントをリンクしているときに、以下のエラーが発生した場合
ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory
それらを実行するときに、以下のいずれかの方法で問題を回避できます。
-Lpath の代わりに、以下のフラグを設定してクライアントをリンクする。
-Wl,r/path-libmysqlclient.so。
libmysqclient.so を `/usr/lib' にコピーする。
LD_RUN_PATH 環境変数に追加する。
富士通コンパイラ (fcc / FCC) を使用している場合は、MySQL のコンパイルでいくつかの問題が発生します。これは、Linux ヘッダファイルが非常に gcc 指向であるためです。
fcc/FCC を使用する場合は、以下の configure 行が有効です。
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
MySQL は、Linux バージョン 2.0 以降を必要とします。
警告: 一部の MySQL ユーザからLinux カーネル 2.2.14 を使用する MySQL で重大な安定性の問題が発生したことが報告されています。このカーネルを使用している場合は、カーネル 2.2.19 以降またはカーネル 2.4 にアップグレードしてください。マルチ CPU マシンを使用している場合は、カーネル 2.4 によって処理速度が飛躍的に向上するので、使用を検討してください。
バイナリリリースは、-static でリンクされます。したがって、通常は使用するシステムライブラリのバージョンを気にする必要はありません。また、LinuxThreads をインストールする必要もありません。-static でリンクされたプログラムは、動的にリンクされたプログラムよりも少し大きいですが、速度も少し(3 〜 5%)上がります。ただし、静的にリンクされたプログラムにはユーザ定義関数(UDF)を使用できないことが 1 つの問題です。UDFを作成または使用する場合(C または C++ のプログラマの場合のみ)は、動的リンクを使用して MySQL を自分でコンパイルする必要があります。
glibc2 システムではなく、libc ベースのシステムを使用している場合は、バイナリリリースでホスト名解決と getpwnam() に関連する問題が発生することが多いです(これは、glibc が、-static でコンパイルされている場合でも、外部ライブラリに依存してホスト名と getpwent() を解決することが原因です)。その場合、mysql_install_db を実行したときに以下のエラーメッセージが表示されます。
Sorry, the host 'xxxx' could not be looked up
または、--user オプションを指定して mysqld を実行したときに、以下のエラーが表示されます。
getpwnam: No such file or directory
この問題は、以下のいずれかの方法で解決できます。
tar.gz ディストリビューション)を入手して、それをインストールする。
mysql_install_db --force を実行する。この場合、mysql_install_db の resolveip テストは実行されません。この方法の弱点は、権限テーブルでホスト名を使用できないため、代わりに IP 番号を使用しなくてはならないことです(localhost の場合は除く)。--force をサポートしていない旧バージョンの MySQL リリースを使用している場合、エディタを使用して mysql_install の resolveip テストを削除する必要があります。
--user を使用する代わりに su を指定して mysqld を起動する。
MySQL の Linux-Intel バイナリと RPM リリースは、最高の速度を実現するようにコンフィギャされています。当社は、常に、入手可能な最速の安定したコンパイラを使用するよう努めています。
MySQL の Perl サポートは、Perl 5.004_03 以降のバージョンを必要とします。
一部の Linux 2.2 バージョンでは、TCP/IP を介して mysqld サーバに多数の接続を行うと、Resource temporarily unavailable というエラーが発生することがあります。
問題は、Linux では、TCP/IP ソケットを閉じてから、そのソケットが実際にシステムによって解放されるまでの間に遅延があることです。限られた数の TCP/IP スロット用のスペースしかないので、TCP/IP を介して `test-connect' ベンチマークを実行している場合など、短時間に多すぎる数の新しい TCP/IP 接続を実行すると、上記のエラーが発生します。
さまざまなLinux メーリングリストにこの問題を何回かメールで送りましたが、適切な解決法はいまだに得られていません。
この問題の '修正方法' として唯一知られているのは、データベースサーバとクライアントを同じマシン上で実行している場合に、クライアントで永続的な接続を使用するかソケットファイルを使用することです、将来、Linux 2.4 カーネルでこの問題が修正されることが望まれます。
MySQL は、libc バージョン 5.4.12 以降を必要とします。MySQL が libc 5.4.46 と連携して正常に動作することは知られています。glibc バージョン 2.0.6 以降も正常に機能するはずです。Red Hat 製の glibc RPM にはいくつかの問題がありました。したがって、問題が発生した場合は、更新がないかどうかチェックしてください。
glibc 2.0.7-19 および 2.0.7-29 の RPM は、正常に機能することが知られています。
Red Hat 8.0 以降の glibc 2.2.x ライブラリを使用している場合は、--thread-stack=192K オプションを指定して mysqld を起動してください
(MySQL 4 より前のバージョンの場合は -O thread_stack=192K を使用してください)。このオプションを使用しないと、mysqld は gethostbyaddr() で停止します。これは、新しい glibc ライブラリがこのコールのために 128KB を超えるスタックサイズを必要とするためです。MySQL 4.0.10 以降では、このスタックサイズがデフォルトになりました。
gcc 3.0 を使用して MySQL をコンパイルする場合は、コンパイルの前に libstdc++v3 ライブラリをインストールする必要があります。このライブラリをインストールしないと、リンク時に __cxa_pure_virtual シンボルが見つからないというエラーが出力されます。
一部の旧バージョンの 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.
このエラーメッセージの指示に従って、1 つのアンダースコアしかない _P マクロに、アンダースコアをもう 1 つ追加してから、再実行します。
コンパイル中にいくつかの警告が表示されることがあります。以下に示した警告は無視してかまいません。
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'
mysql.server は、MySQL インストールディレクトリの下の `share/mysql' ディレクトリか、MySQL ソースツリーの `support-files' ディレクトリにあります。
mysqld が起動時に必ずコアダンプする場合は、旧バージョンの `/lib/libc.a' を使用していることが問題である可能性があります。このファイルの名前を変更して、`sql/mysqld' を削除し、新たに make install を実行して、もう一度起動してみてください。一部の Slackware でこの問題が発生することが報告されています。
mysqld をリンクしているときに以下のエラーが発生した場合は、`libg++.a' が正しくインストールされていないことを意味します。
/usr/lib/libc.a(putc.o): In function `_IO_putc': putc.o(.text+0x0): multiple definition of `_IO_putc'
以下のように configure を実行して、`libg++.a' を使用しないようにすることができます。
shell> CXX=gcc ./configure
一部の実装で、readdir_r() が壊れています。SHOW DATABASES が常に空のセットを返すという現象が発生します。この問題は、設定した後、コンパイルする前に、`config.h' から HAVE_READDIR_R を削除することで修正できます。
MySQL バージョン 3.23.12 は、Linux-Alpha 上でテストされた最初の MySQL バージョンです。Linux-Alpha 上で MySQL を使用する予定の場合は、必ずこのバージョン以降の MySQL を使用してください。
Alpha 上のMySQL は、当社のベンチマークとテストスィートを使用してテストされましたが、適正に動作すると思われます。
現在、当社は、Alpha EV6 プロセッサを搭載した Compaq DS20 マシン上で、SuSE Linux 7.0 for AXP、カーネル 2.4.4-SMP、Compaq の C コンパイラ(V6.2-505)、および Compaq の C++ コンパイラ(V6.3-006) で MySQL バイナリパッケージをビルド中です。
上記のコンパイラは、http://www.support.compaq.com/alpha-tools/ にあります。gcc の代わりにこれらのコンパイラを使用することで、MySQL のパフォーマンスが約 9 〜 14% 向上します。
注意: MySQL バージョン 3.23.52 および 4.0.2 までは、バイナリは最新の CPU だけを対象に最適化されていました(-fast コンパイルオプションを使用して)。これは、Alpha EV6 プロセッサを使用している場合にのみ当社のバイナリを使用できることを意味します。
その後のリリースからは、バイナリが確実にすべての Alpha プロセッサ上で動作するようにする、-arch generic フラグがコンパイルオプションに加えられました。また、当社では、ライブラリの問題を回避するために静的にコンパイルします。
CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \ CXXFLAGS="-fast -arch generic -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
egcs を使用する場合は、以下の configure 行を使用します。
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
Linux-Alpha 上で MySQL を実行した場合の既知の問題は以下のとおりです。
gdb 4.18 では MySQL などのスレッドアプリケーションのデバッグが正常に行われない。代わりに、gdb 5.1 をダウンロードして使用する。
gcc を使用している場合に、mysqld を静的にリンクしようとすると、結果のイメージが起動時にコアダンプする。したがって、gcc と一緒に --with-mysqld-ldflags=-all-static を使用しないようにする。
MySQL は、最新の glibc パッケージを備えた MkLinux 上で正常に動作します(glibc 2.0.7 でテスト済み)。
Qube2(Linux Mips)上で MySQL を機能させるには、最新の glibc ライブラリが必要です(glibc-2.0.7-29C2 は正常に機能することが知られています)。また、egcs C++ コンパイラ(egcs-1.0.2-9、または gcc 2.95.2 以降)を使用する必要もあります。
Linux IA-64 上でMySQL をコンパイルさせるには、以下の compile 行を使用します
(gcc-2.96 を使用)。
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql \ "--with-comment=Official MySQL binary" --with-extra-charsets=complex
IA-64 では、MySQL クライアントバイナリは共有ライブラリを使用します。これは、`/usr/local/mysql' 以外の場所にバイナリディストリビューションをインストールした場合は、`libmysqlclient.so' をインストールしたディレクトリのパスを、`/etc/ld.so.conf' ファイルまたは LD_LIBRARY_PATH 環境変数の値に追加する必要があるということを意味します。
See section A.3.1 MySQL クライアントライブラリにリンク時の問題。
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)を使用して、ディストリビューションをアンパックする必要がありますSolaris 用のプリコンパイル済みコピーは、http://www.mysql.com/downloads/os-solaris.html にあります。
Sun のネイティブスレッドは、Solaris 2.5 以降でのみ機能します。バージョン 2.4 以前の Solaris の場合は、MySQL は自動的に MIT-pthreads を使用します。 See section 2.3.6 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 または 3.2 です。これらのコンパイラは、http://gcc.gnu.org/ にあります。
注意: egcs 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
UltraSPARC を使用している場合は、"-mcpu=v8 -Wa,-xarch=v8plusa" を CFLAGS および CXXFLAGS に追加することでパフォーマンスを 4% 向上できます。
Sun の Forte 5.0 以降のコンパイラを使用している場合は、configure を以下のように実行できます。
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt" \ CXX=CC CXXFLAGS="-noex -mt" \ ./configure --prefix=/usr/local/mysql --enable-assembler
以下のコンパイルフラグを指定して Sun の Forte コンパイラを使用して、64 ビットのバイナリを作成できます。
CC=cc CFLAGS="-Xa -fast -native -xstrconst -mt -xarch=v9" \ CXX=CC CXXFLAGS="-noex -mt -xarch=v9" ASFLAGS="-xarch=v9" \ ./configure --prefix=/usr/local/mysql --enable-assembler
gcc を使用して 64 ビットの Solaris バイナリを作成するには、CFLAGS および CXXFLAGS に -m64 を追加します。注意: これは、MySQL 4.0 以降のみで機能します。MySQL 3.23 にはこれをサポートするために必要な変更が含まれていません。
MySQL ベンチマークでは、UltraSPARC 上で 32 ビットモードで Forte 5.0 を使用した場合、-mcpu フラグを指定して gcc 3.2 を使用した場合と比較して速度が 4% 向上しました。
64 ビットバイナリを作成した場合、32 ビットバイナリよりも速度が 4% 低下しますが、その代わりに mysqld はより多くのスレッドとメモリを処理できます。
fdatasync または sched_yield で問題が発生した場合は、configure 行に LIBS=-lrt を追加することでその問題を修正できます。
以下の段落は、WorkShop 5.3 より前のバージョンのコンパイラにのみ関連するものです。
configure スクリプトを編集して以下の行を変更する必要がある場合もあります。
#if !defined(__STDC__) || __STDC__ != 1
これを次のように変更します。
#if !defined(__STDC__)
-Xc オプションを指定して __STDC__ を有効にすると、Sun のコンパイラは Solaris の `pthread.h' ヘッダファイルでコンパイルできません。これは Sun のバグです(コンパイラまたはインクルードファイルが壊れています)。
mysqld を実行したときに、以下のようなエラーメッセージが出力された場合は、マルチスレッドオプション(-mt)を有効にしていない Sun のコンパイラを使用して MySQL をコンパイルしようとしています。
libc internal error: _rmutex_unlock: rmutex not held
CFLAGS および CXXFLAGS に -mt を追加して、再実行してください。
SFW バージョンの gcc (Solaris 8 に付属している)を使用している場合は、configure を実行する前に、LD_LIBRARY_PATH 環境変数に `/opt/sfw/lib' を追加する必要があります。
sunfreeware.com から入手できる gcc を使用している場合は、多くの問題が発生することがあります。問題を回避するためには、gcc および GNU binutils を実行するマシン上で、それらを再コンパイルする必要があります。
gcc を使用して MySQL をコンパイルしているときに以下のエラーが出力された場合は、その 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 を入手し、現在の gcc コンパイラを使用してそれをコンパイルすることです。少なくとも Solaris 2.5 の場合、gcc のほとんどすべてのバイナリバージョンに古くて利用に適さないインクルードファイルが組み込まれており、それらによって、スレッドを使用するすべてのプログラム(そして、おそらくその他のプログラムも)が破壊されます。
Solaris は、静的バージョンのシステムライブラリ(libpthreads および libdl)は一切提供しません。したがって、--static を指定して MySQL をコンパイルすることはできません。このオプションを指定してコンパイルすると、以下のエラーが表示されます。
ld: fatal: library -ldl: not found または undefined reference to `dlopen' または cannot find -lrt
多すぎる数のプロセスが非常に迅速に mysqld に接続を試みると、MySQL ログに以下のエラーが出力されます。
Error in accept: Protocol error
この問題を回避するために、--set-variable back_log=50 オプションを指定してサーバを起動してみてください。
注意: --set-variable=name=value 構文および -O name=value 構文は、MySQL 4.0 以降廃止されました。代わりに、--back_log=50 を使用してください。
See section 4.1.1 mysqld コマンドラインオプション。
独自の MySQL クライアントをリンクしている場合、そのクライアントを実行したときに、以下のエラーが発生することがあります。
ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
以下のいずれかの方法でこの問題を回避できます。
-Lpath の代わりに、以下のフラグを設定してクライアントをリンクする。
-Wl,r/full-path-to-libmysqlclient.so。
LD_RUN_PATH 環境変数に追加する。
configure が -lz でリンクする際に問題が発生し、zlib をインストールしていない場合、以下の 2 つの選択肢があります。
--with-named-z-libs=no を指定してコンフィギャする。
gcc を使用していて、ユーザ定義関数(UDF)を MySQL にロードする際に問題が発生した場合は、その UDF をリンクする行に -lgcc を追加してみてください。
MySQL を自動的に起動させる場合は、`/etc/init.d' に `support-files/mysql.server' をコピーして、`/etc/rc3.d/S99mysql.server' という名前でそのディレクトリへのシンボリックリンクを作成します。
Solaris では setuid() アプリケーションのコアファイルがサポートされていないので、--user オプションを指定している場合、mysqld からコアファイルを取得することはできません。
Solaris 2.7 および 2.8 上では、Solaris 2.6 バイナリを通常どおりに使用することができます。Solaris 2.6 のほとんどの問題は、Solaris 2.7 および 2.8 の場合にも当てはまります。
注意: MySQL バージョン 3.23.4 以降は、新しいバージョンの Solaris を自動検出できるため、以下の問題の回避を可能にします。
Solaris 2.7 および 2.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 `;'
この問題を解決するには、以下のいずれかを実行します。
CFLAGS=-DHAVE_CURSES_H CXXFLAGS=-DHAVE_CURSES_H ./configure を指定してコンフィギャする。
#define HAVE_TERM 行を削除し、make を再実行する。
クライアントプログラムをリンクしているときに、リンカが -lz を検出できないという問題が発生した場合は、`libz.so' ファイルが `/usr/local/lib' にインストールされていることが問題である可能性が高いです。この問題は、以下のいずれかの方法で解決できます。
LD_LIBRARY_PATH にコピーする。
--with-named-z-libs=no オプションを指定して、MySQL をコンフィギャする。
x86 上の Solaris 8 では、strip を使用してデバッグシンボルを削除すると、mysqld がコアダンプします。
Solaris x86 上で gcc または egcs を使用していて、ロード中のコアダンプで問題が発生した場合は、以下の 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 でそのデバッグバージョンを実行します。 See section E.1.3 mysqld のデバッグ(gdb 使用)。
ここでは、各種の BSD と、それぞれの個別のバージョンについて説明します。
スレッドパッケージがより統合されているので FreeBSD 4.x 以降を推奨します。
最も簡単な、したがって最も望ましいインストール方法は、mysql-server と mysql-client の ports(http://www.freebsd.org/ で入手できる)を使用することです。
これらの ports を使用すると以下のことを実現できます。
pkg_info -L を使用して、インストールされているファイルを確認することが可能。そのマシンに MySQL が不要になったら、pkg_delete を使用してそれらのファイルをすべて削除することが可能。
FreeBSD 2.x では MIT-pthreads を、バージョン 3 以降ではネイティブスレッドを、それぞれ使用することをお勧めします。一部の後期 2.2 x バージョンでは、ネイティブスレッドを使用して実行できますが、mysqld をシャットダウンする際に問題が発生することがあります。
FreeBSD 上の一部の関数呼び出しは、まだ完全にはスレッドセーフではありません。最も顕著なのは、MySQL がホスト名を IP アドレスに変換するために使用する gethostbyname() 関数です。特定の状況下で、mysqld プロセスは、突然、CPU 負荷 100% 状態を引き起こして、応答不能になります。この状態が発生したら、--skip-name-resolve オプションを使用して MySQL を起動してみてください。
あるいは、FreeBSD 4.x 上で MySQL を LinuxThreads ライブラリにリンクします。これによって、ネイティブの FreeBSD スレッド実装が持つ 2、3 の問題が回避されます。LinuxThreads とネイティブスレッドの非常に優れた比較については、"FreeBSD or Linux for your MySQL Server?" という Jeremy Zawodny の記事(http://jeremy.zawodny.com/blog/archives/000697.html)を参照してください。
FreeBSD で LinuxThreads を使用した場合の既知の問題は以下のとおりです。
wait_timeout は機能していない(FreeBSD/LinuxThreads のシグナル処理の問題である可能性がある)。この問題は、FreeBSD 5.0 で修正される予定となっている。
永続的な接続がクローズされずに長時間ハングするという現象が発生する。
MySQL `Makefile' を使用するには、GNU make (gmake)が機能している必要があります。MySQL をコンパイルする場合は、最初に GNU make をインストールする必要があります。
ネームリゾルバの設定に誤りがないようにしてください。設定に誤りがあると、mysqld に接続するときにリゾルバが遅延または失敗することがあります。
`/etc/hosts' ファイルの localhost エントリが正確であることを確認してください。正確でないと、データベースに接続する際に問題が発生します。`/etc/hosts' ファイルは、以下の行で始まっていなければなりません。
127.0.0.1 localhost localhost.your.domain
gcc(2.95.2 以降)を使用して FreeBSD 上で MySQL のコンパイルとインストールを行う場合は、以下のように行うことをお勧めします。
CC=gcc CFLAGS="-O2 -fno-strength-reduce" \ CXX=gcc CXXFLAGS="-O2 -fno-rtti -fno-exceptions -felide-constructors \ -fno-strength-reduce" \ ./configure --prefix=/usr/local/mysql --enable-assembler gmake gmake install ./scripts/mysql_install_db cd /usr/local/mysql ./bin/mysqld_safe &
configure が MIT-pthreads を使用することがわかった場合は、MIT-pthreads の注意事項を読んでください。 See section 2.3.6 MIT-pthreads に関する注意事項。
make install が `/usr/include/pthreads' を検出できないというエラーを出力した場合は、configure が MIT-pthreads が必要なことを検出しなかったことを意味します。このエラーは、以下のコマンドを実行して修正します。
shell> rm config.cache shell> ./configure --with-mit-threads
FreeBSD は、デフォルトのファイルハンドルの上限が非常に低く設定されていることも知られています。See section A.2.17 File Not Found エラー。
mysqld_safe の ulimit -n セクションのコメントを解除するか、`/etc/login.conf' で mysqld ユーザに対する上限を増やして cap_mkdb /etc/login.conf で再ビルドします。
また、デフォルトの値を使用しない場合は、必ずこのユーザに適切なクラスを設定してください(chpass mysqld-user-name が使用できる)。 See section 4.8.2 mysqld_safe(mysqld のラッパ)。
メモリに余裕がある場合は、MySQL が 512 MB を超える RAM を取得できるようにカーネルを再ビルドすることを検討してください。
詳細情報が必要な場合は、LINT 設定ファイルの option MAXDSIZ を調べてください。
MySQL の現在の日付に関する問題が発生した場合は、TZ 変数を設定することでおそらく解決します。 See section F 環境変数。
安全で安定したシステムにするには、-RELEASE と指定された FreeBSD カーネルだけを使用してください。
NetBSD 上でコンパイルするには、GNU make が必要です。GNU make がないと、make が C++ ファイルで lint を実行したときにクラッシュします。
OpenBSD バージョン 2.5 では、ネイティブスレッドを使用して以下のオプションを指定して MySQL をコンパイルできます。
CFLAGS=-pthread CXXFLAGS=-pthread ./configure --with-mit-threads=no
OpenBSD 2.8 には MySQL で問題を発生させるスレッドのバグがあるということがユーザから報告されています。OpenBSD 開発者はこの問題を修正しましたが、2001 年 1 月 25 日現在で ``-current'' ブランチでしか利用できません。 このスレッドのバグによって発生する現象として、スローレスポンス、高負荷、高 CPU 使用率、クラッシュがあります。
テーブルやディレクトリを開こうとしたときに、Error in accept:: Bad file descriptor というエラーまたはエラー 9 が発生した場合、問題は MySQL に十分なファイルディスクリプタを割り当てていないことだと考えられます。
この場合、以下のオプションを指定して、root として mysqld_safe を起動してみてください。
shell> mysqld_safe --user=mysql --open-files-limit=2048 &
MySQL をコンパイルしているときに以下のエラーが発生した場合は、ulimit 値が低すぎます。
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
ulimit -v 80000 を使用して make を再実行してみてください。この方法で効果がなく、sh を使用している場合は、csh または sh を切り替えてみてください。bash と ulimit に関する問題が BSDI ユーザから報告されています。
gcc を使用している場合は、`sql_yacc.cc' のコンパイルを可能にするために configure に --with-low-memory フラグを使用する必要もあるかもしれません。
MySQL の現在の日付に関する問題が発生した場合は、TZ 変数を設定することで解決すると考えられます。 See section F 環境変数。
BSD/OS バージョン 3.1 にアップグレードしてください。それが不可能な場合は、BSDI patch M300-038 をインストールしてください。
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
以下のラインも有効であることが知られています。
shell> env CC=gcc CXX=gcc CXXFLAGS=-O3 \
./configure \
--prefix=/usr/local/mysql \
--with-unix-socket-path=/var/mysql/mysql.sock
必要に応じてディレクトリの場所を変更してもかまいません。また、どの場所も指定しないでデフォルトを使用することもできます。
高負荷の状況でパフォーマンスに問題がある場合は、mysqld に --skip-thread-priority オプションを使用してみてください。これによって、すべてのスレッドが同じ優先順位で実行されます。BSDI バージョン 3.1 では、これによってパフォーマンスが向上します(少なくとも BSDI がスレッドスケジューラを修正するまでの間)。
コンパイル中に virtual memory exhausted というエラーが発生した場合は、ulimit -v 80000 を使用して make を再実行してみてください。
この方法で効果がなく、sh を使用している場合は、csh または sh を切り替えてみてください。bash と ulimit に関する問題が BSDI ユーザから報告されています。
BSDI バージョン 4.x にはスレッド関連のバグがいくつかあります。BSDI バージョン 4.x 上で MySQL を使用する場合は、すべてのスレッド関連のパッチをインストールしてください。少なくとも M400-023 はインストールする必要があります。
BSDI バージョン 4.x システムでは、共有ライブラリに関する問題が発生することがあります。
mysqladmin などのクライアントプログラムを実行できないという現象が発生します。この場合、configure に --disable-shared オプションを指定して、共有ライブラリを使用しないように再コンフィギャする必要があります。
mysqld バイナリがしばらくたつとテーブルを開けなくなるという問題が BSDI 4.0.1 上で発生したことがあります。これは、ライブラリまたはシステム関連の何らかのバグによって、ユーザが要求していないのに mysqld がカレントディレクトリを変更したためです。
この問題は、3.23.34 以降にアップグレードするか、configure を実行した後、make を実行する前に config.h から #define HAVE_REALPATH 行を削除することで解決します。
注意: このことは、BSDI 上で、データベースディレクトリを別のデータベースディレクトリにシンボリックリンクすることも、テーブルを別のデータベースにシンボリックリンクすることもできないことを意味します(別のディスクへのシンボリックリンクを作成することはできます)。
MySQL は Mac OS X 10.x(Darwin)上で問題なく機能します。この OS 用の pthread パッチは必要ありません。
このことは、Mac OS X 10.x Server にも当てはまります。サーバプラットフォーム用のコンパイルは、クライアントバージョンの Mac OS X の場合と同じです。ただし、MySQL は、サーバ にプリインストールされていることに注意してください。
当社の Mac OS X 用バイナリは、以下の configure 行で Darwin 6.3 上でコンパイルされます。
CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \ CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \ -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --disable-shared
See section 2.1.3 Mac OS X への MySQL のインストール。
MySQL on Mac OS X Server 1.2(別名 Rhapsody)上でMySQL をコンフィギャする前に、まず、http://www.prnet.de/RegEx/mysql.html にある pthread パッケージをインストールする必要があります。
See section 2.1.3 Mac OS X への MySQL のインストール。
HP-UX 用 MySQL のバイナリディストリビューションのいくつかは、HP の depot ファイルおよび tar ファイルとして配布されます。depot ファイルを使用するには、HP-UX 10.x 以降を実行していて、HP's software depot tools にアクセスできなければなりません。
HP バージョンの MySQL は、HP-UX 10.20 を実行する HP 9000/8xx サーバ上でコンパイルされ、MIT-pthreads を使用します。この構成で MySQL が適切に動作することが知られています。MySQL バージョン 3.22.26 以降は、HP のネイティブスレッドパッケージを使用してビルドすることもできます。
その他の有効な構成
以下の構成では、ほぼ確実に正常に機能しません。
ディストリビューションをインストールするには、以下のいずれかのコマンドを使用します。この場合、/path/to/depot は depot ファイルの完全パス名です。
shell> /usr/sbin/swinstall -s /path/to/depot mysql.full
shell> /usr/sbin/swinstall -s /path/to/depot mysql.server
shell> /usr/sbin/swinstall -s /path/to/depot mysql.client
shell> /usr/sbin/swinstall -s /path/to/depot mysql.developer
depot は、バイナリとライブラリを `/opt/mysql' に配置し、データを `/var/opt/mysql' に配置します。また、ブート時にサーバを自動的に起動するための適切なエントリを `/etc/init.d' と `/etc/rc2.d' に作成します当然ですが、インストールするには root である必要があります。
HP-UX tar.gz ディストリビューションをインストールするには、GNU の tar がなければなりません。
HP-UX 上で MySQL をコンパイルしているときに、小さな問題がいくつか発生します。HP-UX のネイティブコンパイラの代わりに gcc を使用することをお勧めします。これは、gcc の方が優れたコードを生成するためです。
HP-UX では gcc 2.95 を使用することをお勧めします。高いレベルの最適化フラグ(-O6 など) は、HP-UX 上では安全でない可能性があるので使用しないでください。
gcc 2.95 を使用する場合は、以下の configure 行が有効です。
CFLAGS="-I/opt/dce/include -fpic" \ CXXFLAGS="-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
gcc 3.1 を使用する場合は、以下の configure 行が有効です。
CFLAGS="-DHPUX -I/opt/dce/include -O3 -fPIC" CXX=gcc \ CXXFLAGS="-DHPUX -I/opt/dce/include -felide-constructors -fno-exceptions \ -fno-rtti -O3 -fPIC" ./configure --prefix=/usr/local/mysql \ --with-extra-charsets=complex --enable-thread-safe-client \ --enable-local-infile --with-pthread \ --with-named-thread-libs=-ldce --with-lib-ccflags=-fPIC --disable-shared
HP-UX バージョン 11.x の場合は、MySQL バージョン 3.23.15 以降を推奨します。
標準の HP-UX ライブラリにはいくつかの重大なバグがあるため、HP-UX 11.0 上で MySQL を実行する前に以下のパッチをインストールする必要があります。
PHKL_22840 Streams cumulative PHNE_22397 ARPA cumulative
これによって、スレッドアプリケーションで、recv() から EWOULDBLOCK を、accept() から EBADF を受け取るという問題が解決されます。
パッチ未適用の HP-UX 11.x システム上で gcc 2.95.1 を使用している場合、以下のエラーが発生します。
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:
問題は、HP-UX の pthreads_atfork() の定義に整合性がないことです。
`/usr/include/sys/unistd.h':184 と `/usr/include/sys/pthread.h':440 に、矛盾したプロトタイプがあります(詳細は以下で述べます)。
1 つの解決法は、`/usr/include/sys/unistd.h' を `mysql/include' にコピーして、`unistd.h' を編集して、`pthread.h' 内の定義と一致するように変更することです。以下に 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));
この後は、以下の configure 行が機能します。
CFLAGS="-fomit-frame-pointer -O3 -fpic" CXX=gcc \ CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -O3" \ ./configure --prefix=/usr/local/mysql --disable-shared
HP-UX コンパイラと共に MySQL 4.0.5 を使用している場合は、以下を使用できます (cc B.11.11.04 でテスト済み)。
CC=cc CXX=aCC CFLAGS=+DD64 CXXFLAGS=+DD64 ./configure --with-extra-character-set=complex
以下のようなエラーは無視してかまいません。
aCC: warning 901: unknown option: `-3': use +help for online documentation
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.
HP-UX の C および C++ コンパイラへのパスの前に K&R コンパイラへのパスがないことを確認します。
コンパイルできないもう 1 つの理由は、上で +DD64 フラグを定義していないことです。
HP-UX 11 のもう 1 つの可能性は、HP-UX 10.20 用の MySQL バイナリを使用することです。 これらのバイナリが HP-UX 11.00 で正常に機能することがユーザから報告されています。問題が発生した場合は、必ず HP-UX のパッチのレベルをチェックしてください。
xlC の自動検出が Autoconf からなくなっているため、MySQL をコンパイルするときには以下のような configure の指定が必要です(この例では、IBM コンパイラを使用しています)。
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 LDFLAGS="-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
上記は、MySQL ディストリビューションをコンパイルする際に使用されるオプションで、http://www-frec.bull.com/ にあります。
上記の configure 行で -O3 を -O2 に変更した場合は、-qstrict オプションも削除する必要があります(これは、IBM C コンパイラの制限です)。
gcc または egcs を使用して MySQL をコンパイルする場合は、-fno-exceptions フラグを使用する必要があります。gcc および egcs の例外処理がスレッドセーフでないためです(これは、egcs 1.1 を使用してテストされています)。IBM アセンブラにもいくつかの既知の問題があります。これらの問題のために、このアセンブラを gcc と共に使用した場合に、不良コードが生成されることがあります。
AIX 上では、egcs および gcc 2.95 と共に以下の configure 行を使用することをお勧めします。
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
-Wa,-many は、コンパイルを成功させるために必要です。IBM は、この問題を認識していますが、回避方法があるため修正を急いでいません。gcc 2.95 に -fno-exceptions が必要かどうかはわかりませんが、MySQL は例外を使用しない上に、このオプションによってコードが高速化するので、egcs および gcc には常にこのオプションを使用することをお勧めします。
アセンブラコードで問題が発生する場合は、使用している CPU と一致するように -mcpu=xxx を変更してみてください。通常は、power2、power、または powerpc を指定する必要があるでしょう。あるいは、604 または 604e を指定する必要があるかもしれません。確証はありませんが、ほとんどの場合 "power" を指定しても問題ありません(power2 マシン上であっても同様)。
CPU が何であるかわからない場合は、"uname -m" を実行してください。xxyyyyyymmss の形式を持つ、"000514676700" のような文字列が返されます。この場合、xx と ss は常に 0、yyyyyy は一意のシステム ID、mm は CPU プレーナの ID です。http://publib.boulder.ibm.com/doc_link/en_US/a_doc_lib/cmds/aixcmds5/uname.htm にこれらの値の表があります。 これによってマシンの種類と型がわかります。このマシンの種類と型で、使用している CPU の種類を特定できます。
シグナルに関する問題が発生した場合 (高負荷の状況で MySQL が突然停止する)、スレッドとシグナルに関する OS のバグを見つけた可能性があります。この場合、以下のコマンドを使用してコンフィギャすることで、シグナルを使用しないように MySQL に指示することができます。
shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \
CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti \
-DDONT_USE_THR_ALARM" \
./configure --prefix=/usr/local/mysql --with-debug --with-low-memory
これは、MySQL のパフォーマンスには影響しませんが、接続上で "スリープ状態" のクライアントを、mysqladmin kill または mysqladmin shutdown を使用して強制終了することができなくなるという副作用があります。代わりに、クライアントは自身が次回コマンドを発行したときに停止します。
AIX の一部のバージョンでは、libbind.a とリンクすると getservbyname がコアダンプします。これは AIX のバグなので、IBM に報告する必要があります。
AIX 4.2.1 と gcc を使用する場合、以下の変更を行う必要があります。
設定の後に、`config.h' と `include/my_config.h' を編集して、以下の行を変更します。
#define HAVE_SNPRINTF 1
これを以下のように変更します。
#undef HAVE_SNPRINTF
最後に、`mysqld.cc' の initgoups にプロトタイプを追加する必要があります。
#ifdef _AIX41 extern "C" int initgroups(const char *,int); #endif
mysqld プロセスに大量のメモリを割り当てる必要がある場合は、'ulimit -d unlimited' を設定するだけでは十分ではありません。場合によって、mysqld_safe で以下のように設定する必要もあります。
export LDR_CNTRL='MAXDATA=0x80000000'
以下のサイトに、大量のメモリの使用についての詳細情報があります。 http://publib16.boulder.ibm.com/pseries/en_US/aixprggd/genprogc/lrg_prg_support.htm。
SunOS 4 では、MySQL をコンパイルするために MIT-pthreads が必要です。これは、GNU make が必要であることを意味します。
一部の SunOS 4 システムは、動的ライブラリと libtool に問題があります。
以下の configure 行を実行すると、この問題を回避できます。
shell> ./configure --disable-shared --with-mysqld-ldflags=-all-static
readline をコンパイルしているときに、重複定義に関する警告が表示されることがあります。
これらの警告は無視してかまいません。
mysqld をコンパイルしているときに、implicit declaration of function という警告が表示されます。これらの警告は無視してかまいません。
Digital Unix 上で egcs 1.1.2 を使用している場合は、gcc 2.95.2 にアップグレードしてください。これは、DEC 上の egcs にいくつかの重大なバグがあるためです。
Digital Unix 上でスレッドプログラムをコンパイルする場合、マニュアルでは、cc および cxx の -pthread オプションとライブラリ -lmach -lexc (-lpthread のほかに)を使用することが推奨されています。以下のような configure を実行してください。
CC="cc -pthread" CXX="cxx -pthread -O" \ ./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"
mysqld をコンパイルしているときに、以下のようないくつかの警告が表示されることがあります。
mysqld.cc: In function void handle_connections()': mysqld.cc:626: passing long unsigned int *' as argument 3 of accept(int,sockadddr *, int *)'
これらの警告は無視してもかまいません。これらの警告は、configure が検出できるのはエラーだけで、警告は検出できないために発生します。
直接コマンドラインからサーバを起動した場合に、ログアウトするとサーバが停止するという問題が発生することがあります(ログアウトすると、まだ終わっていないプロセスは SIGHUP シグナルを受信します)。その場合は、以下のようにサーバを起動します。
shell> nohup mysqld [options] &
nohup は、その後ろに指定されたコマンドに、端末から送信された SIGHUP シグナルを無視させます。あるいは、mysqld_safe を実行してサーバを起動します。mysqld_safe は、nohup を使用して mysqld を起動します。
See section 4.8.2 mysqld_safe(mysqld のラッパ)。
`mysys/get_opt.c' をコンパイルしているときに問題が発生した場合は、ファイルの先頭から #define _NO_PROTO という行を削除してください。
Compaq の CC コンパイラを使用している場合は、以下の configure 行が有効です。
CC="cc -pthread" CFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host" CXX="cxx -pthread" CXXFLAGS="-O4 -ansi_alias -ansi_args -fast -inline speed all -arch host \ -noexceptions -nortti" 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
上記のように共有ライブラリを有効にしてコンパイルしているときに、mysql のリンク中に libtool で問題が発生した場合は、以下のコマンドを発行してその問題を回避できます。
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
DEC の CC および gcc がインストールされている場合、コンパイルで問題が発生したら、以下のような configure を実行してみてください。
CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql
`c_asm.h' ファイルで問題が発生した場合は、以下のコマンドで 'ダミー' の `c_asm.h' ファイルを作成して使用してください。
touch include/c_asm.h CC=gcc CFLAGS=-I./include \ CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql
注意: ld プログラムに関する以下の問題は、最新の DEC(Compaq)パッチキットを以下のサイトからダウンロードして修正できます。
http://ftp.support.compaq.com/public/unix/。
OSF/1 V4.0D およびコンパイラ "DEC C V5.6-071 on Digital Unix V4.0 (Rev. 878)" では、コンパイラにいくつかの未知の動作があります(未定義の asm シンボル)。
/bin/ld も壊れているように思われます(mysqld のリンク中に _exit undefined エラーが発生する問題)。このシステムでは、/bin/ld を OSF 4.0C のバージョンに置き換えた後、以下の configure 行を使用して MySQL をコンパイルできました。
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql
Digital コンパイラ "C++ V6.1-029" を使用する場合は、以下の指定が有効です。
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"
OSF/1 の一部のバージョンでは、alloca() 関数が壊れています。`config.h' の 'HAVE_ALLOCA' を定義する行を削除して、この問題を解決します。
alloca() 関数も /usr/include/alloca.h に正しくないプロトタイプを持つことがあります。その結果表示される警告は無視してかまいません。
configure は、以下のスレッドライブラリを自動的に使用します。
--with-named-thread-libs="-lpthread -lmach -lexc -lc"。
gcc を使用している場合は、以下のように configure を実行してみてください。
shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ...
シグナルに関する問題が発生した場合 (高負荷の状況で MySQL が突然停止する)、スレッドとシグナルに関する OS のバグを見つけた可能性があります。この場合、以下のコマンドを使用して設定することで、シグナルを使用しないように MySQL に指示することができます。
shell> CFLAGS=-DDONT_USE_THR_ALARM \
CXXFLAGS=-DDONT_USE_THR_ALARM \
./configure ...
これは、MySQL のパフォーマンスには影響しませんが、接続上で "スリープ状態" のクライアントを、mysqladmin kill または mysqladmin shutdown を使用して強制終了することができなくなるという副作用があります。代わりに、クライアントは自身が次回コマンドを発行したときに停止します。
gcc 2.95.2 を使用している場合、以下のコンパイルエラーが発生する可能性が高いです。
sql_acl.cc:1456: Internal compiler error in `scan_region', at except.c:2566 Please submit a full bug report.
これを修正するには、sql ディレクトリに移動して、末尾の gcc 行を ``カットアンドペースト'' しますが、-O3 は -O0 に変更します(または、コンパイル行に -O オプションがない場合は、-O0 を gcc の直後に追加します)。この処理が終わったら、最上位のディレクトリに戻って、make を再実行します。
Irix Version 6.5.3 以降を使用している場合、CAP_SCHED_MGT 特権を持つユーザ(root など)として mysqld を実行した場合か、以下のシェルコマンドを使用して mysqld サーバにこの特権を与えた場合にのみ、mysqld はスレッドを作成することができます。
shell> chcap "CAP_SCHED_MGT+epi" /opt/mysql/libexec/mysqld
場合によって、configure を実行した後、コンパイルする前に `config.h' でいくつかのシンボルを再定義する必要があります。
Irix の一部のバージョンでは、alloca() 関数が壊れています。SELECT ステートメントで mysqld サーバが停止する場合は、`config.h' から HAVE_ALLOC と HAVE_ALLOCA_H を定義している行を削除してください。
mysqladmin create が機能しない場合は、`config.h' から HAVE_READDIR_R を定義している行を削除します。場合によって、HAVE_TERM_H 行も削除する必要があります。
SGI では、以下のページにあるすべてのパッチをまとめてインストールすることを推奨しています。 http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html
少なくとも、最新のカーネルロールアップ、最新の rld ロールアップ、および最新の libc ロールアップだけはインストールしてください。
pthread のサポートのために、以下のページにあるすべての POSIX パッチが必要です。
http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html
`mysql.cc' をコンパイルしているときに、以下のようなエラーが発生することがあります。
"/usr/include/curses.h", line 82: error(1084): invalid combination of type
MySQL ソースツリーの最上位のディレクトリで、以下を入力します。
shell> extra/replace bool curses_bool < /usr/include/curses.h \ > include/curses.h shell> make
スケジューリングに関する問題も報告されています。1 つのスレッドだけが稼動している場合、パフォーマンスが低くなります。別のクライアントを起動して、この問題を回避してください。これによって、もう 1 方のスレッドの実行速度が 2 〜 10 倍になることがあります。これは、Irix スレッドに関する不明点の多い問題です。この問題が修正できるまで間に合わせの解決法を見つけなくてはなりません。
gcc を使用してコンパイルしている場合は、以下の configure コマンドを使用できます。
CC=gcc CXX=gcc CXXFLAGS=-O3 \ ./configure --prefix=/usr/local/mysql --enable-thread-safe-client \ --with-named-thread-libs=-lpthread
Irix 6.5.11 上でネイティブの Irix C コンパイラおよび C++ コンパイラのバージョン 7.3.1.2 を使用している場合、以下が有効であることが報告されています。
CC=cc CXX=CC CFLAGS='-O3 -n32 -TARG:platform=IP22 -I/usr/local/include \ -L/usr/local/lib' CXXFLAGS='-O3 -n32 -TARG:platform=IP22 \ -I/usr/local/include -L/usr/local/lib' ./configure \ --prefix=/usr/local/mysql --with-innodb --with-berkeley-db \ --with-libwrap=/usr/local \ --with-named-curses-libs=/usr/local/lib/libncurses.a
現行の移植版は、``sco3.2v5.0.5''、``sco3.2v5.0.6''、および ``sco3.2v5.0.7'' のシステム上でのみテストされています。``sco 3.2v4.2'' への移植版でも大きな進展がありました.
現時点で、OpenServer 上で推奨されるコンパイラは gcc 2.95.2 です。このコンパイラを使用すると、以下のコマンドだけで MySQL をコンパイルできます。
CC=gcc CXX=gcc ./configure ... (options)
./configure を実行し、SCO OpenServer オプションを選択する。このコマンドによって、`Makefile.SCO5' が `Makefile' にコピーされる。
make を実行する。
cd)、make install を実行する。
make を使用する。
root として mysqld_safe を起動しないと、おそらくプロセス当たり 110 個(デフォルト)のオープンファイルしか取得しない。mysqld は、これに関する注記をログファイルに書き込む。
configure コマンドが有効である。
shell> ./configure --prefix=/usr/local/mysql --disable-shared
configure コマンドが有効である。
shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \
./configure \
--prefix=/usr/local/mysql \
--with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \
--with-named-curses-libs="-lcurses"
インクルードファイルに関する問題が発生することがある。この場合、http://www.mysql.com/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz で、新しい SCO 固有のインクルードファイルを見つける。
MySQL ソースツリーの `include' ディレクトリにこのファイルをアンパックする。
SCO development の注意事項
-lgthreads -lsocket -lgthreads を使用して mysqld をリンクする。
malloc でリンクされた状態で提供される。メモリ使用率に関する問題が発生した場合は、`libgthreads.a' と `libgthreads.so' に `gmalloc.o' がインクルードされていることを確認する。
read()、write()、getmsg()、connect()、accept()、select()、および wait() である。
mysqld を実行する場合は、このパッチを削除する必要がある。
SCO に DBI をインストールする場合は、DBI-xxx と各サブディレクトリに含まれている `Makefile' を編集する必要があります。
注意: 以下は、gcc 2.95.2 以降を想定したものです。
変更前: 変更後: 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 変更前: CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include 変更後: CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include
icc または cc でコンパイルされた DBI モジュールを Perl dynaloader がロードしないので、このように処理する必要があります。
Perl は、cc でコンパイルされると最もよく機能します。
MySQL のバージョン 3.22.13 以降の MySQL のバージョンと UnixWare 7.1.0 のバージョンを使用する必要があります。これは、これらのバージョンで UnixWare 上の移植性と OS に関する問題がいくつか修正されているためです。
UnixWare バージョン 7.1.x 上で以下の configure コマンドを使用して MySQL をコンパイルすることができました。
CC=cc CXX=CC ./configure --prefix=/usr/local/mysql
gcc を使用する場合は、gcc 2.95.2 以降をインストールする必要があります。
CC=gcc CXX=g++ ./configure --prefix=/usr/local/mysql
MySQL は、多数のオープンファイルを使用します。そのため、`CONFIG.SYS' ファイルに以下のような記述を追加する必要があります。
SET EMXOPT=-c -n -h1024
この処理を行わないと、おそらく以下のエラーが発生します。
File 'xxxx' not found (Errcode: 24)
OS/2 Warp 3 で MySQL を使用する場合は、FixPack 29 以降が必要です。OS/2 Warp 4 で MySQL を使用する場合は、FixPack 4 以降が必要です。これは、Pthreads ライブラリの要件です。MySQL は、HPFS、FAT32など、長いファイル名をサポートするパーティションにインストールする必要があります。
`INSTALL.CMD' スクリプトは、OS/2 の `CMD.EXE' から実行しなければならず、`4OS2.EXE' などの置換シェルでは機能しないことがあります。
`scripts/mysql-install-db' スクリプトは、名前が変更されました。現在、`install.cmd' と呼ばれているこのスクリプトは、REXX スクリプトで、デフォルトの MySQL セキュリティ設定をセットアップし、MySQL 用の ワークプレイスシェルアイコンを作成します。
動的モジュールサポートは、コンパイルはされていますが、完全にはテストされていません。動的モジュールは、Pthreads ランタイムライブラリを使用してコンパイルする必要があります。
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
注意:OS/2 での制限のために、UDF モジュール名の語幹ステムは 8 文字を超えることはできません。モジュールは、`/mysql2/udf' ディレクトリに格納されます。safe-mysqld.cmd スクリプトはこのディレクトリを BEGINLIBPATH 環境変数に設定します。UDF モジュールを使用している場合、指定した拡張子は無視されます。拡張子は `.udf' と仮定されます。
たとえば、Unix では、共有モジュールが `example.so' という名前の場合、以下のようなコマンドでそこから関数をロードします。
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example.so";
OS/2 では、モジュールが `example.udf' という名前であっても、ユーザはモジュール拡張子を指定しません。
mysql> CREATE FUNCTION metaphon RETURNS STRING SONAME "example";
NetWare への MySQL の移植は、Novell 主導で行われた作業です。Novell のユーザは、NetWare 6.5を実行するすべてのサーバに対する自動的な商用ライセンスを備えた MySQL バイナリが、NetWare 6.5 にバンドルされることを歓迎するはずです。
See section 2.1.4 NetWare への MySQL のインストール。
NetWare 用の MySQL は、Metrowerks CodeWarrior for NetWare と特別なクロスコンパイルバージョンの GNU autotool の組み合わせを使用してコンパイルされています。今後、NetWare 用の MySQL をビルドと最適化に関する詳細情報が必要になったら、このセクションをもう一度参照してください。
当社は、過去に MySQL を BeOS に 80% 移植すると語る BeOS の開発者と話したことがありますが、その後連絡はありません。
MySQL は、DBI/DBD クライアントインタフェースという形で Perl をサポートします。See section 11.5 MySQL Perl API。 Perl DBD/DBI クライアントコードは、Perl バージョン 5.004 以降を必要とします。これより前のバージョンの Perl を使用している場合は、このインタフェースは正常に機能しません。
MySQL の Perl モジュールの作成には、MySQL クライアントの開発環境(ヘッダファイルや libmysqlclient ライブラリ)をインストールすることが必要です。 RPM ファイルから MySQL をインストールした場合は、開発環境は MySQL-devel RPM に含まれています。MySQL-devel パッケージをインストールしていることを確認してください。
バージョン 3.22.8 以降、Perl のモジュールはメインのMySQL ディストリビューションとは別に配布されています。Perl モジュールをインストールする場合は、http://www.mysql.com/downloads/api-dbi.html から必要なファイルを入手できます。
Perl モジュールのディストリビューションは、tar 形式の圧縮アーカイブとして提供され、`MODULE-VERSION.tar.gz' などの名前が付いています。この場合、MODULE はモジュール名で、VERSION はバージョン番号です。Data-Dumper、DBI、DBD-mysql の各ディストリビューションを入手して、この順番でそれらをインストールする必要があります。インストール手順については、以下を参照してください。
ここでは、Data-Dumper モジュールの場合の例で説明しますが、3 つのディストリビューションすべてで手順は同じです。
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -このコマンドによって、`Data-Dumper-VERSION' という名前のディレクトリが作成される。
shell> cd Data-Dumper-VERSION
shell> perl Makefile.PL shell> make shell> make test shell> make install
make test コマンドは、モジュールが正常に機能することを確認するので重要です。注意: DBD-mysql のインストール時にこのコマンドを実行してインタフェースコードを実行する場合は、MySQL サーバが稼動していなければなりません。稼動していないとテストは失敗します。
新しいリリースの MySQL をインストールするときは常に、DBD-mysql ディストリビューションの再ビルドと再インストールを行うことをお勧めします。MySQL をアップグレードした後にすべての DBI スクリプトが失敗するというような現象に気付いた場合は、特に推奨します。
システムディレクトリに Perl モジュールをインストールする権限がない場合や、ローカルの Perl モジュールをインストールする場合は、以下を参照してください。
http://servers.digitaldaze.com/extensions/perl/modules.html#modules
Installing New Modules that Require Locally Installed Modules という見出しの下を調べてください。
Windows では、以下を実行して、ActiveState Perl が組み込まれた MySQL DBD モジュールをインストールする必要があります。
HTTP_proxy 変数を設定する。たとえば、以下のコマンドを使用する。
set HTTP_proxy=my.proxy.com:3128
C:\> c:\perl\bin\ppm.pl
DBI をまだインストールしていない場合は、ここでインストールする。
ppm> install DBI
install \ ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
上記のコマンドは、少なくとも ActiveState Perl バージョン 5.6 の場合は有効です。
このコマンドが正常に機能しない場合は、代わりに MyODBC ドライバをインストールして、ODBC を通じて MySQL サーバに接続してください。
use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) ||
die "Got error $DBI::errstr when connecting to $dsn\n";
DBI/DBD インタフェース使用時の問題`../mysql/mysql.so' モジュールを検出できないというメッセージが Perl から出力された場合は、Perl が共有ライブラリ `libmysqlclient.so' を見つけることができなかったことを意味します。
この問題は、以下のいずれかの方法で解決できます。
perl Makefile.PL ではなく perl Makefile.PL -static -config を使用して、DBD-mysql をコンパイルする。
LD_RUN_PATH 環境変数に追加する。
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 からの `mysql.so' に関する出力をチェックしてください)。-L オプションによって、システム内の `libgcc.a' が配置されているディレクトリのパス名が指定されます。
この問題のもう 1 つの原因は、Perl と MySQL の両方が gcc でコンパイルされていないことです。この場合、両方を gcc でコンパイルすることでこの不一致を解消できます。
テストを実行したときに、DBD-mysql から以下のエラーが出力されることがあります。
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 圧縮ライブラリをリンク行に追加する必要があります。これは、`lib/DBD/mysql/Install.pm' ファイルの以下の行を変更して行います。
$sysliblist .= " -lm";
この行を以下のように変更します。
$sysliblist .= " -lm -lz";
この後、必ず make realclean を実行して、最初からインストールを行います。
動的リンク(SCO など)をサポートしていないシステム上で Perl モジュールを使用する場合は、DBI と DBD-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 ディストリビューションが配置されているディレクトリで以下のコマンドを実行して、静的にリンクされた DBI モジュールが組み込まれた Perl を作成します。
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 です。
次に、今作成した Perl を使用して、DBD-mysql ディストリビューションが配置されているディレクトリで以下のコマンドを実行して、やはり静的にリンクされた DBD::mysql モジュールが組み込まれた Perl をもう 1 つ作成します。
shell> perl Makefile.PL -static -config shell> make shell> make install shell> make perl
最後に、この新しい Perl をインストールする必要があります。ここでも、make perl の出力に、使用するコマンドが示されます。
Go to the first, previous, next, last section, table of contents.