目次
この章では、MySQL の入手方法とインストール方法について説明します。
MySQL を入手できるサイトの一覧については、項2.2.1. 「MySQL の入手方法」 を参照。
サポートされているプラットフォームを確認するには、項2.2.3. 「MySQL がサポートしているオペレーティングシステム」 を参照。サポートされているすべてのシステムが、MySQL の実行に同じように適しているとは限らないことに注意する。 一部のシステムは、他のシステムよりもはるかに堅牢で効率的である。詳細については、項2.2.3. 「MySQL がサポートしているオペレーティングシステム」 を参照。
MySQL のいくつかのバージョンについては、バイナリディストリビューションとソースディストリビューションの両方が用意されている。また、最新の開発を確認したいユーザや新しいコードのテストに協力したいユーザのために、当社の現在のソースツリーへも公開している。使用すべきディストリビューションのバージョンとタイプを判断するには、項2.2.4. 「使用すべき MySQL のバージョン」 を参照。判断がつかない場合は、バイナリディストリビューションを使用する。
バイナリディストリビューションとソースディストリビューションのインストール手順については、それぞれ、項2.2.9. 「MySQL バイナリディストリビューションのインストール」 と項2.3. 「MySQL ソースディストリビューションのインストール」 を参照。各手順セットには、発生する可能性のあるシステム固有の問題に関するセクションが含まれている。
インストール後の手順については、項2.4. 「インストール後の設定とテスト」 を参照。これらの手順は、バイナリディストリビューションとソースディストリビューションのどちらを使用して MySQL をインストールする場合にも適用される。
この章では、それぞれのプラットフォームのネイティブパッケージ化形式を使用してパッケージが提供されているプラットフォームへの MySQL のインストールについて説明します。ただし、その他のさまざまなプラットフォーム用の MySQL バイナリディストリビューションも用意されています。すべてのプラットフォームに適用されるパッケージの一般インストール手順については、項2.2.9. 「MySQL バイナリディストリビューションのインストール」 を参照してください。
入手できるその他のバイナリディストリビューションとその入手方法の詳細については、項2.2. 「インストール関連の一般的な問題」 を参照してください。
Windows での MySQL のインストールは、以下のステップになります。
ディストリビューションのインストール
オプション設定ファイルの設定(必要時)
使用するサーバの選択
サーバの起動
Windows 用 MySQL は、以下の2種類の形式で提供されます。
バイナリディストリビューション。セットアッププログラムが含まれており、このプログラムによって必要なものがすべてインストールされるので、サーバを直ちに起動できる。
ソースディストリビューション。VC++ 6.0 コンパイラを使用して実行ファイルをビルドするためのすべてのコードとサポートファイルが含まれている。 See 項2.3.7. 「Windows 上でソースから MySQL をインストールする」。
一般的には、バイナリディストリビューションを使用することをお勧めします。このディストリビューションの方が単純で、MySQL のセットアップと実行に追加のツールを必要としないからです。
Windows で MySQL を実行する場合の要件は以下のとおりです。
9x、Me、NT、2000、XP などの 32 ビットの Windows オペレーティングシステム。 NT ファミリ(Windows NT、2000、および XP)では、MySQL サーバをサービスとして実行することができる。 See 項2.1.1.7. 「Windows NT、2000、または XP での MySQL の起動」。
TCP/IP プロトコルサポート。
Windows 用 MySQL バイナリディストリビューションのコピー。これは、http://www.mysql.com/downloads/ からダウンロードできる。
注意: ディストリビューションファイルは、zip 形式で提供されます。ダウンロードプロセス中のファイルの破損を避けるために、レジューム機能を持つ適切な FTP クライアントを使用することをお勧めします。
ディストリビューションファイルをアンパックするための
ZIP
プログラム。
要件に応じたデータベースのアンパック、インストール、作成を行うための十分な空き領域がハードディスクドライブ上にあること。
ODBC を経由して MySQL
サーバに接続する予定の場合は、MyODBC
ドライバも必要である。 See
項11.2. 「MySQL の ODBC サポート」。
4 GB
より大きいサイズのテーブルが必要な場合は、NTFS
またはそれより新しいファイルシステムに
MySQL
をインストールする。テーブルを作成するときに、MAX_ROWS
と AVG_ROW_LENGTH
を必ず使用する。 See
項6.5.3. 「CREATE TABLE
構文」。
バイナリディストリビューションを使用して Windows に MySQL をインストールするには、以下の手順に従って行います。
Windows NT、2000、または XP が搭載されたマシンで作業する場合は、必ず管理者権限を持つユーザとしてログインする。
旧バージョンの MySQL インストールをアップグレードする場合は、現在のサーバを停止する必要がある。 Windows NT、2000、または XP が搭載されたマシンで、Windows サービスとしてサーバを実行している場合は、コマンドプロンプトで以下のように入力してサーバを停止する。
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
をデフォルト以外の場所にインストールすると、サーバを起動するたびにその場所を指定しなければならなくなる。これを行う最も簡単な方法は、項2.1.1.3. 「Windows MySQL 環境の準備」
で説明するように、オプション設定ファイルを使用することである。
インストールプロセスを終了する。
サーバを実行するときに起動オプションを指定する必要がある場合は、コマンドラインで起動オプションを指定するか、オプション設定ファイルに起動オプションを配置します。サーバを起動するたびに使用されるオプションの場合、オプション設定ファイルを使用して MySQL のオプションを指定する方が便利です。この方法は、以下のような場合に特に便利です。
インストールディレクトリまたはデータディレクトリの場所がデフォルトの場所(C:\mysql
と
C:\mysql\data
)と異なる場合。
サーバの設定を調整する必要がある場合。
たとえば、MySQL バージョン 3.23 の
InnoDB
トランザクションテーブルを使用するには、InnoDB
のデータファイルとログファイルを格納するための
2
つのディレクトリ(C:\ibdata
と C:\iblogs
など)を手動で作成しなければならない。
また、項7.5.3. 「InnoDB 起動オプション」で説明するように、オプション設定ファイルに行を追加する必要もある
(MySQL 4.0 以降では、InnoDB
はデフォルトでデータディレクトリにデータファイルとログファイルを作成する。したがって、InnoDB
の設定は必須ではない。
ただし、必要に応じて明示的に設定することもできるが、その場合もオプション設定ファイルを使用すると便利である)。
Windows では、MySQL インストーラは、MySQL
のインストール先のディレクトリの直下にデータディレクトリを格納します。別の場所のデータディレクトリを使用する場合は、data
ディレクトリの内容全体をその新しい場所にコピーしてください。たとえば、デフォルトでは、インストーラは、MySQL
を C:\mysql
に、データディレクトリを
C:\mysql\data
にそれぞれ格納します。E:\mydata
のデータディレクトリを使用する場合は、以下の
2 つの処理を行う必要があります。
データディレクトリを
C:\mysql\data
から
E:\mydata
に移動する。
サーバを起動するたびに、--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
サーバは、名前付きパイプ接続をサポートします。これらのサーバのどちらかを使用する場合、名前付きパイプの使用には以下の制約があることに留意してください。
サーバは、名前付きパイプをサポートする Windows のバージョン(NT、2000、XP)で実行する必要がある。
バージョン 3.23.50
からは、--enable-named-pipe
オプションを使用してサーバを起動した場合にのみ、名前付きパイプが有効になる。
これらのサーバは、Windows 98 または Me で実行することができるが、TCP/IP がインストールされている場合に限られる。つまり、名前付きパイプを使用した接続はできない。
Windows 95 では、これらのサーバを使用することはできない。
Windows 95、98、または Me では、MySQL クライアントは常に TCP/IP を使用してサーバに接続します。Windows NT、2000、XP などの NT ベースのシステムでは、クライアントには 2 つの選択肢があります。つまり、TCP/IP を使用するか、サーバが名前付きパイプ接続をサポートしている場合は名前付きパイプを使用します。
サーババイナリの実行の詳細については、項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 項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
のバージョンの場合と同様にコマンドラインから起動することができます。手順については、項2.1.1.6. 「Windows 95、98、または Me での MySQL の起動」
を参照してください。
MySQL は、すべての Windows プラットフォームで
TCP/IP をサポートします。mysqld-nt
サーバと mysql-max-nt
サーバは、NT、2000、および XP
で名前付きパイプをサポートします。
ただし、デフォルトでは、プラットフォームに関係なく
TCP/IP が使用されます。
多くの Windows 設定では、名前付きパイプは、事実上 TCP/IP より低速である。
名前付きパイプを使用した場合、MySQL サーバをシャットダウンする際に問題が発生することがある。
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 項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
''
というエラーが表示された場合)は、項2.6.2.1. 「Linux の注意事項
(バイナリディストリビューション)」
を参照してください。
ほとんどの場合、MySQL-server
パッケージと MySQL-client
パッケージをインストールするだけで済みます。最小インストールの場合は、その他のパッケージは必要ありません。
追加機能を備えた MySQL Max
サーバを実行したい場合は、MySQL-server
RPM をインストールした後に
MySQL-Max
RPM
をインストールしてください。 See
項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
には、パッケージをインストールする前にその完全性と信頼性を検証する機能が備えられています。この機能の詳細については、項2.2.2. 「MD5 チェックサム
または
GnuPG
によるパッケージ完全性の検証」
を参照してください。
サーバ RPM は、/var/lib/mysql
ディレクトリの下にデータを配置します。また、ブート時にサーバを自動的に起動するための適切なエントリを
/etc/init.d/
に作成します(したがって、旧バージョンのインストールを実行しており、起動スクリプトに変更を加えている場合、新しいバージョンの
RPM
のインストール時にそのスクリプトが失われないようにするためにはスクリプトのコピーを作成する必要があります)。システム起動時に
MySQL
が自動的に起動されるようにする方法については、項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
項2.4. 「インストール後の設定とテスト」。
何か問題があった場合は、バイナリインストールの章を参照してください。 See 項2.2.9. 「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
項2.2.5. 「インストールレイアウト」。
MySQL インストールには、mysql
という名前の Mac OS X
ユーザアカウントが必要です(Mac OS X 10.2
以降の場合、この名前を持つユーザアカウントがデフォルトで存在します)。
Mac OS X Server を実行している場合、MySQL はすでにインストールされています。
Mac OS X Server 10.2 ? 10.2.2 には MySQL 3.23.51 がインストールされている。
Mac OS X Server 10.2.3 ? 10.2.6 には MySQL 3.23.53 が同梱されている。
Mac OS X Server 10.3 には MySQL 4.0.14 が同梱されている。
ここでは、公式の 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 項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 バージョン 6.5 または Support Pack 3 がインストールされた NetWare 6.0 (Support Pack 3は http://support.novell.com/filefinder/13659/index.html で入手できる)。 システムは、各バージョンの NetWare を実行するための Novell の必要条件を満たしている必要がある。
MySQL データとバイナリ自体が NSS ボリュームにインストールされていること(従来のボリュームはサポートされていない)。
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 では解決されています。
既存のインストールからアップグレードする場合は、MySQL サーバを停止する。 MySQL サーバの停止は、サーバコンソールから以下のコマンドを使用して行う。
SERVER: mysqladmin -u root shutdown
MySQL のインストール場所にアクセスできるクライアントマシンから目的のサーバにログオンする。
バイナリパッケージ zip
ファイルをサーバに抽出する。必ず、zip
ファイルのパスを使用できるようにする。ファイルを単純に
SYS:\
に抽出しても問題はない。
既存のインストールからアップグレードする場合は、ここで
my.cnf
のほかにデータディレクトリ(SYS:MYSQL\DATA
など)をコピーする必要がある場合がある(データディレクトリをカスタマイズしている場合)。その後、旧バージョンの
MySQL のコピーを削除することができる。
必要に応じて、ディレクトリの名前をより一貫性のある使いやすい名前に変更する。SYS:MYSQL
という名前の使用をお勧めする(このマニュアルの例では、一般にインストールディレクトリを指すのにこの名前を使用している)。
サーバコンソールで、MySQL NLM が格納されているディレクトリの検索パスを追加する。たとえば、以下のように入力する。
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_SAFE
NetWare 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 ミラーサイトになる方法と不適切なミラーや無効なミラーの報告方法についての情報も提供しています。
目的に合った 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 は、以下のオペレーティングシステムとスレッドパッケージの組み合わせで正常にコンパイルすることが報告されています。
AIX 4.x、5.x とネイティブスレッド。 See 項2.6.6.4. 「IBM-AIX の注意事項」。
Amiga
BSDI 2.x と MIT-pthreads パッケージ。 See 項2.6.4.5. 「BSD/OS バージョン 2.x の注意事項」。
BSDI 3.0、3.1、および 4.x とネイティブスレッド。 See 項2.6.4.5. 「BSD/OS バージョン 2.x の注意事項」。
SCO OpenServer と最新の移植版の FSU Pthreads パッケージ。 See 項2.6.6.9. 「SCO の注意事項」。
SCO UnixWare 7.1.x。See 項2.6.6.10. 「SCO UnixWare バージョン 7.1.x の注意事項」。
DEC Unix 4.x とネイティブスレッド。 See 項2.6.6.6. 「Alpha-DEC-UNIX(Tru64)の注意事項」。
FreeBSD 2.x と MIT-pthreads パッケージ。 See 項2.6.4.1. 「FreeBSD の注意事項」。
FreeBSD 3.x および 4.x とネイティブスレッド。 See 項2.6.4.1. 「FreeBSD の注意事項」。
FreeBSD 4.x と Linuxthreads。 See 項2.6.4.1. 「FreeBSD の注意事項」。
HP-UX 10.20 と DCE スレッドまたは MIT-pthreads パッケージ。 See 項2.6.6.2. 「HP-UX バージョン 10.20 の注意事項」。
HP-UX 11.x とネイティブスレッド。 See 項2.6.6.3. 「HP-UX バージョン 11.x の注意事項」。
Linux 2.0+ と LinuxThreads 0.7.1+ または
glibc
2.0.7+。 See
項2.6.2. 「Linux の注意事項(すべての Linux バージョン)」。
Mac OS X。See 項2.6.5. 「Mac OS X の注意事項」。
NetBSD 1.3/1.4 Intel および NetBSD 1.3 Alpha(GNU make が必要)。 See 項2.6.4.2. 「NetBSD の注意事項」。
Novell NetWare 6.0。 See 項2.6.8. 「Novell NetWare の注意事項」。
OpenBSD 2.5 以降のバージョンとネイティブスレッド。OpenBSD 2.5 より前のバージョンと MIT-pthreads パッケージ。 See 項2.6.4.3. 「OpenBSD 2.5 の注意事項」。
OS/2 Warp 3,FixPack 29 および OS/2 Warp 4, FixPack 4。See 項2.6.7. 「OS/2 の注意事項」。
SGI Irix 6.x とネイティブスレッド。 See 項2.6.6.8. 「SGI Irix の注意事項」。
Solaris 2.5 以降と SPARC および x86 上のネイティブスレッド。 See 項2.6.3. 「Solaris の注意事項」。
SunOS 4.x と MIT-pthreads パッケージ。 See 項2.6.3. 「Solaris の注意事項」。
Tru64 Unix
Windows 9x、Me、NT、2000、および XP。 See 項2.6.1. 「Windows の注意事項」。
注意: すべてのシステムが、MySQL の実行に同じように適しているとは限りません。特定のプラットフォームが高負荷でミッションクリティカルな MySQL サーバにどのぐらい適しているかは、以下の要因によって決まります。
スレッドライブラリの全般的な安定性。他の点で高い評価を得ているプラットフォームでも、MySQL が呼び出すスレッドライブラリのコードが不安定である場合は、それ以外のすべての点で完璧であっても、MySQL の動作は不安定になる。
カーネルおよびスレッドライブラリまたはそのいずれかがマルチプロセッサシステム上で SMP を活用できるかどうか。つまり、プロセスがスレッドを作成した場合に、そのスレッドは元のプロセスとは異なる CPU 上で動作できなければならない。
カーネル/スレッドライブラリが、
過剰なコンテキストスイッチを行うことなく、
相互排他ロック(mutex)を頻繁に取得/解放する多くのスレッドを、実行できるかどうか。
つまり、pthread_mutex_lock()
の実装が CPU
時間を生み出すことに重点を置きすぎている場合、そのことで
MySQL
のパフォーマンスは大きく損なわれることになる。この問題に対処しないと、CPU
をマシンに追加すると MySQL
の処理速度が実質的に遅くなる。
ファイルシステムの全般的な安定性とパフォーマンス
ファイルシステムがテーブルが大きい場合に大きなファイルを効率的に処理できるかどうか。
プラットフォームに関する MySQL AB の専門知識のレベル。MySQL AB は、熟知しているプラットフォームについては、コンパイル時に有効になるプラットフォーム固有の最適化や修正を導入する。また、MySQL 向けにシステム設定を最適化する方法について助言することもできる。
似たような設定をした環境に対して、MySQL AB が社内で行ったテストの量。
目的のプラットフォーム上で MySQL を問題なく実行したユーザの数。この数が多ければ、プラットフォーム固有の予期せぬ問題が発生する可能性が非常に低くなる。
以上の基準から、現時点で MySQL を実行するのに最適なプラットフォームは、SuSE Linux 8.2、2.4 カーネル、および ReiserFS (または類似の Linux ディストリビューション)を搭載した x86 と、Solaris(2.7 ? 9)を搭載した SPARC です。FreeBSD は第 3 位ですが、スレッドライブラリが改善されればベストグループに仲間入りするはずです。また、MySQL がコンパイルされ、正常に動作する(安定性とパフォーマンスのレベルがまったく同じではないにしても)他のすべてのプラットフォームをいつの日かベストグループに含めることができるようになることを当社は切に希望しています。そのためには、MySQL が依存する OS やライブラリの開発者と協力して当社が努力する必要があります。それらのコンポーネントのいずれかを改善することに興味があり、その開発に影響を与える立場にあり、MySQL の動作を改善するために必要な事柄についての詳細な説明が必要なユーザは、MySQL の社内メーリングリストに電子メールをお送りください。 See 項1.7.1.1. 「MySQL メーリングリスト」。
上記の比較は、各 OS の全般的な優劣をつけるためのものではありません。ここでは、特定用途(つまり MySQL の実行)のために特定の OS を選択することに焦点をあてており、その点に関してのみプラットフォームを比較しています。これを念頭に置けば、この比較にさらに多くの論点を含めた場合は、結果は異なったものになります。ある OS が別の OS よりも優れている理由が、単に当社がそのプラットフォームのテストと最適化に他のプラットフォームよりも多くの労力を費やしたためだけであるということもあります。 ここでは、ご使用のセットアップ内で MySQL を使用するプラットフォームを決定する際に参考にしていただけるように当社の所見を述べているにすぎません。
最初に、最新の開発版リリースと最新の製品版(安定版)リリースのどちらを使用するかを決めます。
初めて MySQL を使用を開始する場合や、専用のバイナリディストリビューションがないシステムに MySQL を移植する場合は、通常は製品版リリース(現バージョンは 4.0)を選択することをお勧めする。 注意: すべての MySQL リリースは、リリース前に MySQL ベンチマークと広範なテストスィートによってチェックされている(開発版リリースの場合も同様)。
それ以外の場合、既存の旧バージョンのシステムをアップグレードしたいが、シームレスでないアップグレードを使用するのが不安な場合は、使用している同じブランチを最新のものにアップグレードする(最新のバージョンが、使用しているものより新しい場合)。最新バージョンでは、重大なバグだけが修正され、比較的小さく安全な変更が行われている。
次に、ソースディストリビューションとバイナリディストリビューションのどちらを使用するかを決めます。ご使用のプラットフォーム用のバイナリディストリビューションがある場合、バイナリディストリビューションを使用してください。これは、一般的にソースディストリビューションよりもインストールが簡単なためです。
以下の場合は、ソースインストールを使用した方がうまく行く可能性があります。
MySQL を明示的に指定した場所にインストールする場合(標準のバイナリディストリビューションは、任意の場所で ``実行可能'' だが、よりいっそうの柔軟性が得られる)。
さまざまなユーザの要件を満たすことができるように、2
種類のバイナリバージョンが用意されている。1
つは非トランザクションストレージエンジンを組み込んでコンパイルされたバイナリ(高速で小さなバイナリ)で、もう
1
つはトランザクションセーフテーブルなどの最も重要な機能が組み込まれたバイナリである。どちらのバージョンも同じソースディストリビューションからコンパイルされている。すべての
MySQL
ネイティブクライアントは、両方の MySQL
バージョンに接続できる。
拡張 MySQL
バイナリディストリビューションには、-max
というサフィックスが付いており、mysqld-max
と同じオプションが指定されている。 See
項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]
デフォルトのバイナリディストリビューションは、通常、すべてのキャラクタセットのサポートを組み込んでコンパイルされ、同じプロセッサファミリの各種プロセッサ上で動作する。
MySQL
サーバをより高速化したい場合は、必要なキャラクタセットのサポートだけを組み込んで
MySQL
サーバを再コンパイルする必要がある。その際は、より適切なコンパイラ(pgcc
など)を使用するか、使用しているプロセッサ向けにより最適化されたコンパイラオプションを使用する。
バグを見つけて、MySQL 開発チームに報告すると、パッチが送付される。そのパッチをソースディストリビューションに適用して、バグを修正する必要がある。
MySQL を構成する C および C++ のコードの読み取りや修正を行う場合は、ソースディストリビューションを入手する。ソースコードは、常に最高のマニュアルとなる。また、ソースディストリビューションには、バイナリディストリビューションよりも多くのテストやサンプルが含まれている。
MySQL の名前付けスキームでは、3 つの数字と 1
つのサフィックスで構成されるリリース番号が使用されます。たとえば、mysql-4.1.0-alpha
のようなリリース名は、以下のように解釈されます。
最初の数字(4
)は、メジャーバージョン番号であり、同時にファイル形式も表している。バージョン
4
の全リリースは同じファイル形式を持っている。
2
番目の数字(1
)はリリースレベルである。
3
番目の数字(0
)は、リリースレベル内のバージョン番号である。この数字は、新しいディストリビューションごとに増えていく。通常は、選択したリリースレベルの最新のバージョンが必要である。
サフィックス(alpha
)は、リリースの安定性のレベルを示す。
以下のようなサフィックスがある。
alpha
は、そのリリースに
100%
はテストされていない新しいコードが含まれていることを示している。既知のバグ(通常はない)は、「News」のセクションに記載される。See
付録?D. MySQL Change History。 ほとんどの alpha
リリースには新しいコマンドと拡張機能も含まれている。
alpha
リリースでは、大きなコード変更がおきるような開発が行われる可能性があるが、リリースの前にすべてがテストされている。MySQL
リリースには既知のバグはない。
beta
は、すべての新しいコードがテストされていることを示している。古いコードを破壊するような大きな新しい機能は追加されていない。既知のバグはない。少なくとも
1 か月間、alpha
バージョンで重大なバグが報告されず、古いコマンドの信頼性を下げるような機能を追加する計画がない場合は、バージョンはアルファからベータに変わる。
gamma
は、一定期間出回っていて、正常に動作すると思われるベータバージョンである。小さな修正だけが追加される。これは、他の多くの企業でリリースと呼ばれているものである。
サフィックスが付いていない場合は、そのバージョンがさまざまなサイトでプラットフォーム固有のバグ以外のバグが報告されることなく一定期間稼動していたことを意味する。そのようなリリースには重大なバグ修正だけが適用される。これは、製品版(安定版)リリースと呼ばれているものである。
MySQL 開発プロセスでは、段階の異なるさまざまなバージョンが共存します。当然、旧バージョンのシリーズの関連バグ修正は新バージョンに伝播されます。
以前の安定版/製品版シリーズ
3.23
の場合、新バージョンは重大なバグの場合のみリリースされる。
現行のシリーズ 4.0
は、安定版/製品版レベルの品質で、バグ修正のために新しいバージョンがリリースされている。コードの安定性に影響を及ぼすような新機能は追加されていない。
alpha ブランチ 4.1
では、重要な新機能が追加されている。開発システムで使用およびテストするためのソースとバイナリが用意されている。
開発ブランチ 5.0
は、BitKeeper
ツリーからのみ入手できる。
MySQL のすべてのバージョンは、標準テストとベンチマークテストが行われ、比較的安全であることが確認されています。標準テストは、過去に見つかったすべてのバグをチェックするために時間の経過とともに拡張されているので、テストスィートは常に改良されています。
注意: すべてのリリースは少なくとも以下のテストが実行されています。
内部テストスィート
mysql-test
ディレクトリには充実したテストケースセットが含まれている。
これらのテストは、事実上すべてのサーババイナリに対して行われる。
MySQL ベンチマークスィート
このテストスィートは、各種の一般的クエリを実行する。これは、また、最新の一連の最適化が実際にコードを高速化するかどうかを確認するためのテストでもある。 See 項5.1.4. 「MySQL ベンチマークスィート」。
crash-me
テスト
データベースがサポートする機能と、その能力と制約の判定が試行される。 See 項5.1.4. 「MySQL ベンチマークスィート」。
もう 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
ディレクトリにインストールされる。
データディレクトリは data
ではなく var
である。
mysql_install_db
は、/usr/local/mysql/scripts
ディレクトリではなく、/usr/local/bin
ディレクトリにインストールされる。
ヘッダファイルとライブラリのディレクトリは、include
と lib
ではなく、include/mysql
と
lib/mysql
である。
スクリプト
scripts/make_binary_distribution
を実行して、コンパイルされたソースディストリビューションから独自のバイナリインストールを作成できます。
MySQL AB 社内で MySQL は非常に急速に進化しており、当社は他の MySQL ユーザとこれを共有したいと考えています。他のユーザが必要としていると思われる非常に有用な機能がある場合は、リリースを作成します。
また、簡単に実装できる機能を求めているユーザの支援にも努めています。ライセンスユーザ、特に拡張電子メールサポート対象のユーザが何を要望しているかに注意し、これらのユーザを支援する努力を行っています。
ユーザは新しいリリースをダウンロードする必要はありません。本当に必要なものが新しいリリースに含まれている場合は、「News」のセクションで通知されます。 See 付録?D. MySQL Change History。
MySQL を更新する場合、当社は以下のポリシーを使用します。
マイナーな更新が行われるたびに、バージョン文字列の最後の数字が増分される。 重要な新機能がある場合や旧バージョンとのわずかな非互換性がある場合は、バージョン文字列の 2 番目の数字が増分される。ファイル形式が変更された場合は、最初の数字が増分される。
製品版(安定テスト済み)リリースは、1 年に約 1 ? 2 回公開されることになっているが、小さなバグが見つかった場合は、バグ修正だけを含んだリリースが公開される。
運用リリース/旧リリースに対するバグ修正は、約 4 ? 8 週ごとに公開される。
メジャーリリースについては、MySQL AB によって一部のプラットフォーム用のバイナリディストリビューションが作成される。 第三者が、その他のシステム用のバイナリディストリビューションを作成することがあるが、その頻度は少ない。
通常、MySQL AB が小さなバグを発見して修正した場合はすぐにパッチを公開する。これらのパッチは、直ちに BitKeeper 公開リポジトリに格納される。また、次のリリースにも組み込まれる。
重大ではないが問題を引き起こすバグは、MySQL ソースリポジトリに追加され、次のリリースで修正される。
万が一、リリースに重大なバグがあった場合は、当社はできる限り速やかに新しいリリースを作成する。他社にもこの作業をお願いしたい。
現行の製品版リリースは、バージョン 4.0 です。アクティブな開発はすでにバージョン 4.1 および 5.0 に進んでいます。バージョン 4.0 のバグの修正と、3.23 シリーズの重大なバグの修正は今後も続けられます。 当社は、完全な開発凍結はよしとしません。これによって、バグ修正と "行うべき" ことが放置されることになるからです。"一部凍結" というのは、"すでに稼動しているものにほぼ間違いなく影響を与えない" 小さな変更が追加されることがあるということを意味します。
MySQL では、大部分の他製品とは少し異なる名前付けスキームが使用されます。 一般に、新しいバージョンに置き換えられることなく 2 週間公開されたバージョンは、使用しても比較的安全です。 See 項2.2.4. 「使用すべき MySQL のバージョン」。
当社は、リリースにバグがないようにするために多くの時間と労力を費やしています。 当社の知る限り、既知の '重大な' 再現可能なバグがある MySQL バージョンは 1 つもリリースされていません。
重大なバグとは、通常の使用で MySQL をクラッシュさせる、一般的なクエリに対して誤った応答を返すバグ、またはセキュリティに問題があるバグです。
設計上の決定に依存する未解決の障害、バグ、問題はすべて文書化されています。 See 項1.8.6. 「MySQL の既知のエラーと設計上の問題」。
当社の目標は、安定版の MySQL が不安定になるような危険を冒すことなく、修正可能なものはすべて修正することです。場合によって、これは、開発版の問題は修正できるが、安定版(製品版)の問題は修正できないということを意味します。当然、そのような問題は、ユーザに知らせるために文書化されます。
以下に、当社のビルドプロセスの仕組みを説明します。
カスタマサポートリスト、MySQL 社外メーリングリスト、およびバグデータベース(http://bugs.mysql.com/)からバグをモニタする。
有効なバージョンに関して報告されたすべてのバグがバグデータベースに入力される。
バグが修正されると、そのバグのテストケースを作成して、当社のテストシステムに組み込み、バグが再現しないことを確認する(修正済みバグの約 90% にはテストケースがある)。
また、MySQL に追加されるすべての新機能についてテストケースが作成される。
新しい MySQL リリースの作成を開始する前に、MySQL バージョン(3.23.x や 4.0.x など)について報告されたすべての再現可能なバグを確実に修正する。MySQL の内部の設計上のなんらかの決定が理由で修正が不可能なバグがある場合は、そのことをマニュアルに記載する。 See 項1.8.6. 「MySQL の既知のエラーと設計上の問題」。
専用のバイナリがサポートされているすべてのプラットフォーム(15 以上のプラットフォーム)上でビルドを行い、それらのすべてのプラットフォーム上で当社のテストスィートとベンチマークスィートを実行する。
テストまたはベンチマークスィートが失敗したプラットフォームのバイナリは公開されない。ソースの一般的なエラーである場合は、それを修正し、すべてのシステムで最初からビルドとテストを再実行する。
ビルドおよびテストのプロセス(2、3 日を要する)中に、重大なバグ(コアダンプを発生させるバグなど)に関する報告を受け取った場合は、そのバグを修正した上で、ビルドプロセスを再開する。
http://www.mysql.com/
でバイナリを公開した後、mysql
と announce
のメーリングリストで告知メールを送信する。
See 項1.7.1.1. 「MySQL メーリングリスト」。
告知メッセージには、リリースに対するすべての変更と、リリースに関する既知の問題の一覧が記載される
(リリースノートに「既知の問題」のセクションが必要であったのは、ほんの一握りのリリースだけである)。
ユーザが MySQL の最新の機能に迅速にアクセスできるように、4 ? 8 週間ごとに新しい MySQL リリースを行う。 ソースコードのスナップショットは毎日作成され、http://downloads.mysql.com/snapshots.php で公開される。
リリース後に、特定のプラットフォーム上のビルドに(それでも)重大な問題があったというバグレポートを受けた場合は、バグを直ちに修正し、そのプラットフォーム用の新しい
'a'
リリースをビルドする。当社の巨大なユーザ基盤のおかげで、問題は迅速に発見される。
当社は、優れたリリースを作成することに関して高い実績を持つ。過去の 150 リリースにおいて、新しいビルドを行う必要があったのは 10 リリース未満である(そのうちの 3 つは、当社のビルドマシンの 1 つで glibc ライブラリに欠陥があったためであった。これを突き止めるのに長い時間を要した)。
MySQL AB は、サービスとして MySQL の一連のバイナリディストリビューションを提供します。これらのバイナリディストリビューションは、社内でコンパイルするか、ユーザが当社にマシンへのアクセスを提供してくれる場所でコンパイルされます。
プラットフォーム固有のパッケージ形式で提供するバイナリ(項2.1. 「標準 MySQL のクイックインストール」
を参照)のほかに、tar
形式の圧縮アーカイブ(.tar.gz
)によってさまざまなプラットフォーム用のバイナリディストリビューションも提供します。
これらのディストリビューションは、Build-tools/Do-compile
スクリプトを使用して生成されます。このスクリプトは、ソースコードをコンパイルし、scripts/make_binary_distribution
を使用してバイナリ tar.gz
アーカイブを作成します。これらのバイナリは、以下のコンパイラとオプションによってコンフィギャおよびビルドされます。
MySQL AB の開発システムでビルドされるバイナリは以下のとおりです。
Linux 2.4.xx x86 with 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
Linux 2.4.xx Intel Itanium 2 with 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
Linux 2.4.xx Intel Itanium with 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
Linux 2.4.xx alpha with 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
Linux 2.4.xx s390 with 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
Linux 2.4.xx x86_64 (AMD64) with gcc
3.2.1
CXX=gcc ./configure --prefix=/usr/local/mysql
--with-extra-charsets=complex --enable-thread-safe-client
--enable-local-infile --disable-shared
Sun Solaris 8 x86 with 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
Sun Solaris 8 sparc with 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
Sun Solaris 8 sparc 64bit with 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
Sun Solaris 9 sparc with 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
Sun Solaris 9 sparc with 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
IBM AIX 4.3.2 ppc with 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
IBM AIX 4.3.3 ppc with 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
IBM AIX 5.1.0 ppc with 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
HP-UX 10.20 pa-risc1.1 with 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
HP-UX 11.11 pa-risc2.0 64bit with 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
HP-UX 11.11 pa-risc2.0 32bit with 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
Apple Mac OS X 10.2 powerpc with 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
FreeBSD 4.7 i386 with 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
QNX Neutrino 6.2.1 i386 with 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 は、これらのシステムを完全に管理しているわけではないので、これらのシステム上でビルドされたバイナリに対しては限られたサポートしか提供できません。
SCO Unix 3.2v5.0.6 i386 with 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
SCO OpenUnix 8.0.0 i386 with 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
Compaq Tru64 OSF/1 V5.1 732 alpha with
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
SGI Irix 6.5 IP32 with 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
FreeBSD 5.0 sparc64 with 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 がかつて提供していたバイナリパッケージに使用されていたものです。これらのバイナリは現在では更新されていませんが、参考のためにここにコンパイルオプションを記載します。
Linux 2.2.xx sparc with 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
Linux 2.2.x with x686 with 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
SunOS 4.1.4 2 sun4c with gcc
2.7.2.1
CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
./configure --prefix=/usr/local/mysql --disable-shared
--with-extra-charsets=complex --enable-assembler
SunOS 5.5.1 (and above) sun4u with 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
SunOS 5.6 i86pc with gcc
2.8.1
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure
--prefix=/usr/local/mysql --with-low-memory
--with-extra-charsets=complex
BSDI BSD/OS 3.1 i386 with gcc
2.7.2.1
CC=gcc CXX=gcc CXXFLAGS=-O ./configure
--prefix=/usr/local/mysql
--with-extra-charsets=complex
BSDI BSD/OS 2.1 i386 with gcc
2.7.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure
--prefix=/usr/local/mysql
--with-extra-charsets=complex
AIX 2 4 with gcc
2.7.2.2
CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure
--prefix=/usr/local/mysql
--with-extra-charsets=complex
上記のいずれかの設定に関してさらに最適なオプションをお持ちの方は、そのオプションを MySQL 社内メーリングリストに随時お送りください。 See 項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 ディストリビューションについては、項2.1.1. 「Windows への MySQL のインストール」 を参照してください。
ここでは、さまざまなプラットフォーム用の
MySQL
バイナリディストリビューション(.tar.gz
アーカイブ)について説明します(詳細な一覧については、項2.2.8. 「MySQL AB がコンパイルした MySQL バイナリ」
を参照してください)。
これらの一般的なパッケージのほかに、選択したプラットフォームのプラットフォーム固有のパッケージ形式のバイナリも提供しています。 これらのパッケージのインストール方法の詳細については、項2.1. 「標準 MySQL のクイックインストール」を参照してください。
一般的な MySQL
バイナリディストリビューションは、gzip
形式で圧縮された GNU tar
アーカイブ(.tar.gz
)としてパッケージ化されています。MySQL
バイナリディストリビューションをインストールするためには以下のツールが必要です。
ディストリビューションを解凍するための
GNU gunzip
。
ディストリビューションをアンパックするための適切な
tar
プログラム。GNU
tar
は、有効であることで知られている。オペレーティングシステムにプリインストールされている
tar
実装の中には、長いファイル名などに関する問題が発生することが知られているものがある(Sun
tar
など)。その場合は、まず
GNU tar
をインストールする。
問題が発生した場合は、MySQL
メーリングリストに質問を投稿するときに、必ず
mysqlbug
を使用してください。その問題がバグでない場合でも、mysqlbug
は、他のユーザが同じ問題を解決する際に役立つシステム情報を収集します。mysqlbug
を使用しないと、問題を解決できる可能性が小さくなります。ディストリビューションをアンパックすると、bin
ディレクトリに mysqlbug
が格納されます。 See 項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
スクリプトを使用して新しいユーザを追加できます。
以下に詳細な説明を示します。
バイナリディストリビューションをインストールするには、以下のステップに従って処理を行った後、項2.4. 「インストール後の設定とテスト」 に進み、インストール後の設定とテストを行います。
ディストリビューションのアンパック先とするディレクトリを決め、そのディレクトリに移動する。以下の例では、ディストリビューションは
/usr/local
にアンパックされる(したがって、以降の操作説明は、/usr/local
内にファイルおよびディレクトリを作成するためのアクセス権をユーザが持っていることを前提として書かれている。
そのディレクトリが保護されている場合は、root
としてインストールを実行する必要がある)。
項2.2.1. 「MySQL の入手方法」 に記載されているいずれかのサイトからディストリビューションファイルを入手する。
MySQL
バイナリディストリビューションは、圧縮された
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 mysql
GNU tar を使用して、最初の行を以下の代替コマンドに置き換えて、ディストリビューションの展開と抽出を一度に行うこともできる。
shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
最初のコマンドで、mysql-VERSION-OS
という名前のディレクトリが作成される。2
番目のコマンドで、そのディレクトリへのシンボリックリンクが作成される。これによって、インストールディレクトリを
/usr/local/mysql
としてより簡単に参照できるようになる。
以下のコマンドで、インストールディレクトリに移動する。
shell> cd mysql
mysql
ディレクトリ内には、いくつかのファイルとサブディレクトリがある。
インストールのために最も重要なのは、bin
サブディレクトリと scripts
サブディレクトリである。
このディレクトリにはクライアントプログラムとサーバが格納されている。
シェルが MySQL
プログラムを正しく検索するように、PATH
環境変数にこのディレクトリの完全パス名を追加する必要がある。
See 付録?F. 環境変数。
scripts
このディレクトリには、サーバアクセス権を保存する権限テーブルが格納された
mysql
データベースの初期化に使用する
mysql_install_db
スクリプトが格納されている。
mysqlaccess
を使用する場合、標準以外の場所に MySQL
ディストリビューションがあるときは、mysqlaccess
が mysql
クライアントを検索する場所を変更する必要がある。18
行目ぐらいにある
bin/mysqlaccess
スクリプトを編集する。以下のような行を検索する。
$MYSQL = '/usr/local/bin/mysql'; # path to mysql executable
mysql
が実際に格納されているシステム内の場所を反映するようにパスを変更する。この処理を行わないと、mysqlaccess
を実行したときに Broken pipe
というエラーが表示される。
以下のコマンドで、MySQL 権限テーブルを作成する(初めて MySQL をインストールする場合にのみ必要)。
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
グループに変更される。
Perl の DBI
/DBD
インタフェースのサポートをインストールする場合は、項2.7. 「Perl インストールについてのコメント」
を参照。
マシンのブート時に MySQL
を自動的に起動させる場合は、使用しているシステムの起動ファイルが格納されている場所に
support-files/mysql.server
をコピーする。詳細については、support-files/mysql.server
スクリプト自体と 項2.4.3. 「MySQL を自動的に起動および停止する」
を参照。
すべてのものをアンパックしてインストールしたら、ディストリビューションの初期化とテストを行ってください。
以下のコマンドで MySQL サーバを起動することができます。
shell> bin/mysqld_safe --user=mysql &
4.0 より前のバージョンの MySQL
を使用している場合は、このコマンドの
bin/mysqld_safe
を
bin/safe_mysqld
に置き換えてください。
次に、項4.8.2. 「mysqld_safe
(mysqld
のラッパ)」 に進み、See
項2.4. 「インストール後の設定とテスト」
を参照してください。
ソースのインストールに進む前に、使用しているプラットフォーム用のバイナリが入手可能かどうかと、それが自分のシステムでうまく機能するかどうかをまず確認します。当社は、バイナリを最適なオプションでビルドするよう尽力しています。
ソースから MySQL ビルドしてインストールするためには以下のツールが必要です。
ディストリビューションを伸長するための GNU
gunzip
。
ディストリビューションをアンパックするための適切な
tar
プログラム。GNU
tar
は、有効であることで知られている。オペレーティングシステムにプリインストールされている
tar
実装の中には、長いファイル名などに関する問題が発生することが知られているものがある(Sun
tar
など)。その場合は、まず
GNU tar
をインストールする。
正しく機能する ANSI C++
コンパイラ。正しく機能することが知られているコンパイラとしては、2.95.2
以降の 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 項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
項4.1.2. 「my.cnf
オプション設定ファイル」 と
項7.5.3. 「InnoDB 起動オプション」 を参照してください。
ソース RPM から開始する場合は、以下のコマンドを実行します。
shell> rpm --rebuild --clean MySQL-VERSION.src.rpm
これによって、インストールできるバイナリ RPM が作成されます。
DBI
および DBD-mysql
Perl
モジュールをインストールしている場合は、bin/mysql_setpermission
スクリプトを使用して新しいユーザを追加できます。
以下に詳細な説明を示します。
ソースディストリビューションをインストールするには、以下のステップに従って処理を行った後、項2.4. 「インストール後の設定とテスト」 に進み、ポストインストール初期化とテストを行います。
ディストリビューションのアンパック先とするディレクトリを決め、そのディレクトリに移動する。
項2.2.1. 「MySQL の入手方法」 に記載されているいずれかのサイトからディストリビューションファイルを入手する。
MySQL で Berkeley DB
テーブルを使用することを考えている場合は、Berkeley
DB
ソースコードのパッチ適用済みバージョンを入手する必要がある。次に進む前に、Berkeley
DB
テーブルに関する章を読むことをお勧めする。
See 項7.6. 「BDB
または BerkeleyDB
テーブル」。
MySQL
ソースディストリビューションは、tar
形式の圧縮アーカイブとして提供され、mysql-VERSION.tar.gz
などの名前が付いている。この場合、VERSION
は、5.0.6-beta などのバージョン番号である。
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
を実行する。
項2.3.3. 「一般的な configure
オプション」
では、さらに便利ないくつかのオプションについて説明する。
configure
が失敗し、MySQL
メーリングリストにメールを送信して支援を求める場合は、config.log
の中の、問題の解決に役立つと思われる行をメールに含める。configure
が中断した場合は、configure
からの出力の最後の 2、3
行も含める。mysqlbug
スクリプトを使用して、バグレポートを投稿する。
See 項1.7.1.3. 「バグまたは問題を報告する方法」。
コンパイルが失敗した場合は、項2.3.5. 「MySQL のコンパイルに関する問題への対処」 で、数多くの一般的な問題に関するヘルプを参照。
以下のコマンドで、すべてのものをインストールする。
shell> make install
このコマンドは、root
として実行する必要がある場合がある。
以下のコマンドで、MySQL 権限テーブルを作成します(初めて MySQL をインストールする場合にのみ必要)。
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
グループに変更される。
Perl の DBI
/DBD
インタフェースのサポートをインストールする場合は、項2.7. 「Perl インストールについてのコメント」
を参照。
マシンのブート時に MySQL
を自動的に起動させる場合は、使用しているシステムの起動ファイルが格納されている場所に
support-files/mysql.server
をコピーする。詳細については、support-files/mysql.server
スクリプト自体と 項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
項4.2. 「同じマシン上で複数の MySQL サーバを実行する」。
次に、項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
スクリプトを使用すると、MySQL
ディストリビューションの設定を自由に調整できます。設定方法の調整は、通常は
configure
コマンドラインでオプションを使用して行います。また、環境変数を使用して
configure
を調整することもできます。See
付録?F. 環境変数。
configure
がサポートするオプションの一覧が必要な場合は、以下のコマンドを実行します。
shell> ./configure --help
ここでは、広く使用されている
configure
オプションの一部を説明します。
MySQL
のクライアントライブラリとクライアントプログラムだけをコンパイルして、サーバをコンパイルしない場合は、以下のように
--without-server
オプションを使用する。
shell> ./configure --without-server
C++
コンパイラがない場合は、mysql
はコンパイルを実行しない(mysql は C++
を必要とする唯一のクライアントプログラム)。その場合は、configure
の、C++
コンパイラをテストするコードを削除し、--without-server
オプションを指定して
./configure
を実行する。compile
ステップは依然として mysql
のビルドを試行するが、mysql.cc
に関する警告は無視してもかまわない(make
が停止したら、make -k
を実行して、エラーが発生しても残りのビルドを続行するよう指示する)。
組み込みの MySQL
サーバライブラリ(libmysqld.a
)が必要な場合は、--with-embedded-server
オプションを使用する。
ログファイルとデータベースディレクトリを
/usr/local/var
の下に配置しない場合は、以下のいずれかと類似した
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 項4.1.2. 「my.cnf
オプション設定ファイル」。
Unix を使用しており、MySQL
ソケットファイルをデフォルトの場所(通常は、/tmp
または
/var/run
)以外の場所に配置する場合は、以下のような
configure
コマンドを使用する。
shell> ./configure --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock
注意:
指定するファイルは絶対パス名でなければならない。
また、後で MySQL
オプション設定ファイルを使用して、場所
mysql.sock
を変更することもできる。 See
項A.4.5. 「MySQL ソケットファイル /tmp/mysql.sock
の保護または変更方法」。
静的にリンクされたプログラムをコンパイルする場合(バイナリディストリビューションの作成、高速化、一部の
Red Hat Linux
ディストリビューションの問題の回避などのために)、以下のような
configure
コマンドを実行します。
shell>./configure --with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static
gcc
を使用しており、libg++
または
libstdc++
がインストールされていない場合、C++
コンパイラとして gcc
を使用するように configure
を設定することができる。
shell> CC=gcc CXX=gcc ./configure
C++ コンパイラとして 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" |
ほとんどの場合、上記の表に記載されているオプションを使用して、configure 行に以下のオプションを追加して、MySQL バイナリを適度に最適化することができる。
--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 項2.2.8. 「MySQL AB がコンパイルした MySQL バイナリ」。 さらに高速なバイナリを作成するためにユーザが微調整できる設定がいくつかあるが、これは上級ユーザ向けである。 See 項5.5.3. 「MySQL の速度に対するコンパイルとリンクの影響」。
ビルドが失敗し、コンパイラまたはリンカが共有ライブラリ
libmysqlclient.so.#
(‘#
’
はバージョン番号です)を作成できないというエラーが生成された場合は、configure
に --disable-shared
オプションを指定してこの問題に対処できる。この場合、configure
は共有ライブラリ
libmysqlclient.so.#
をビルドしない。
非 NULL
属性のカラム(つまり、NULL
にすることが許されないカラム)に
DEFAULT
の値を使用しないように
MySQL をコンフィギャすることができる。 See
項1.8.5.2. 「NOT NULL
および DEFAULT
値制約」。
shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure
MySQL は、デフォルトで ISO-8859-1 (Latin1)
キャラクタセットを使用する。デフォルトのキャラクタセットを変更するには、以下のように
--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 項4.7.1. 「データおよびソート用キャラクタセット」。
サーバとクライアントの間で文字を変換する場合は、SET
CHARACTER SET
コマンドに注目する。 See
項5.5.6. 「SET
構文」。
警告:
テーブルを作成した後にキャラクタセットを変更する場合は、すべてのテーブルで
myisamchk -r -q
--set-character-set=charset
を実行する必要がある。これを行わないと、インデックスが正しくソートされないことがある(MySQL
をインストールし、いくつかのテーブルを作成し、別のキャラクタセットを使用するように
MySQL をコンフィギャし直して、その MySQL
を再インストールした場合に、この問題が起きる可能性がある)。
--with-extra-charsets=LIST
オプションを使用して、サーバにコンパイルする追加のキャラクタセットを定義できる。
この場合、LIST
は、カンマで区切ったキャラクタセットのリスト、動的にロードできないすべての文字を含めるための
complex
、またはすべてのキャラクタセットをバイナリに含めるための
all
のいずれかである。
コードをデバッグするように MySQL
をコンフィギャするには、--with-debug
オプションを使用する。
shell> ./configure --with-debug
これによって、エラーを検出し、エラーの内容に関する出力を提供する安全なメモリアロケータが組み込まれる。 See 項E.1. 「MySQL サーバのデバッグ」。
クライアントプログラムがスレッドを使用する場合、--enable-thread-safe-client
configure オプションを使用して、MySQL
クライアントライブラリのスレッドセーフバージョンをコンパイルする必要もある。これによって、スレッドアプリケーションとリンクさせる
libmysqlclient_r
ライブラリが作成される。 See
項11.1.14. 「スレッドクライアントの作成方法」。
特定のシステムに関係するオプションについては、このマニュアルのシステム固有のセクションを参照。 See 項2.6. 「オペレーティングシステム固有の注意事項」。
注意:このセクションは、当社の新しいコードのテストに協力することに関心のある場合にのみお読みください。MySQL をビルドしてシステム上で稼動させるだけの場合は、標準のリリースディストリビューション(ソースディストリビューションまたはバイナリディストリビューション)を使用してください。
最新の開発ソースツリーを入手するには、以下の説明に従ってください。
http://www.bitmover.com/cgi-bin/download.cgi
から BitKeeper
をダウンロードする。当社のリポジトリにアクセスするには、Bitkeeper
3.0 以降が必要である。
指示に従って、ダウンロードした BitKeeper をインストールする。
BitKeeper
をインストールしたら、まず、作業するディレクトリに移動する。次に、以下のいずれかのコマンドを使用して、必要な
MySQL バージョンブランチをコピーする。
3.23(旧バージョン)ブランチをコピーするには、以下のコマンドを使用する。
shell> bk clone bk://mysql.bkbits.net/mysql-3.23 mysql-3.23
4.0(安定版/製品版)ブランチをコピーするには、以下のコマンドを使用する。
shell> bk clone bk://mysql.bkbits.net/mysql-4.0 mysql-4.0
4.1 alpha ブランチをコピーするには、以下のコマンドを使用する。
shell> bk clone bk://mysql.bkbits.net/mysql-4.1 mysql-4.1
5.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
接続の速度によって、ソースツリーの初期ダウンロードには多少時間がかかることがある。
次の一連のコマンドを実行するには、GNU
make
、autoconf 2.53
(以降)
、automake
1.5
、libtool 1.4
、および
m4
が必要である。多くのオペレーティングシステムには独自の
make
実装が搭載されているが、未知のエラーメッセージが出力されてコンパイルが失敗する可能性が高い。したがって、必ず
GNU make
(gmake
と呼ばれることもある)を使用する。
幸い、多くのオペレーティングシステムは GNU ツールチェーンがプリインストールされているか、インストール可能な GNU ツールのパッケージを提供する。いずれの場合も、以下の場所からダウンロードすることもできる。
MySQL 4.1 をコンフィギャする場合は、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
項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 項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
を使用している場合に発生する可能性のある警告については、項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 のコンパイル時によく発生することがわかっているいくつかの問題を説明します。
sql_yacc.cc
のコンパイル時にここに示されているようなエラーが発生した場合は、メモリまたはスワップ領域が不足している可能性がある。
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
テーブル型の詳細については
項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 directory
Solaris と FreeBSD は、複雑な make
プログラムが組み込まれていることで知られている。
GNU make
バージョン 3.75
は、正常に機能することが知られている。
C コンパイラまたはC++
コンパイラが使用するフラグを定義する場合は、CFLAGS
および CXXFLAGS
という環境変数にそれらのフラグを追加して定義する。同様に、CC
および CXX
を使用してコンパイラ名を指定することもできる。以下に例を示す。
shell>CC=gcc
shell>CFLAGS=-O3
shell>CXX=gcc
shell>CXXFLAGS=-O3
shell>export CC CFLAGS CXX CXXFLAGS
さまざまなシステムで有用であることがわかっているフラグの一覧については、項2.2.8. 「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.cc
ファイルは、sql_yacc.yy
から生成される。MySQL
には生成済みのコピーが付属しているので、通常はビルドプロセスが
sql_yacc.cc
を作成する必要はない。ただし、このファイルを再作成する必要がある場合は、以下のエラーが出力される。
"sql_yacc.yy", line xxx fatal: default action causes potential...
このエラーは、使用している
yacc
のバージョンでは不十分であることを示している。
ほとんどの場合、bison
(GNU
バージョンの
yacc
)をインストールして、現在の
yacc の代わりに使用する必要がある。
mysqld
または MySQL
クライアントをデバッグする必要がある場合は、--with-debug
オプションを指定して configure
を実行する。次に、再コンパイルして、クライアントを新しいクライアントライブラリにリンクする。
See 項E.2. 「MySQL クライアントのデバッグ」。
Linux (SuSE Linux 8.1 や Red Hat Linux 7.3 など)で、以下のようなコンパイルエラーが出力された場合
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 つの方法がある。
GNU C++ g++
がインストールされていることを確認する。必要なパッケージの名前は、Linux
ディストリビューションの種類に応じて
gpp
または
gcc-c++
である。
CXX
環境変数を
gcc
に設定して、C++
コンパイラとして gcc
を使用する。
export CXX="gcc"
注意: 後で configure
を再実行する必要があります。
ここでは、MIT-pthreads の使用に関係するいくつかの問題を説明します。
注意: Linux では、MIT-pthreads を使用しないで、インストールされている LinuxThreads 実装を使用してください。 See 項2.6.2. 「Linux の注意事項(すべての Linux バージョン)」。
システムにネイティブスレッドサポートが用意されていない場合は、MIT-pthreads パッケージを使用して MySQL をビルドする必要があります。そのようなシステムとしては、旧バージョンの FreeBSD システム、SunOS 4.x、Solaris 2.4 以前などがあります。 See 項2.2.3. 「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-threads
MIT-pthreads を使用している場合は、このコードへの変更を最小限に抑えたいので、ソースディレクトリ以外の場所へのビルドはサポートされていない。
MIT-pthreads
を使用するかどうかを判断するチェックは、サーバコードを処理する設定プロセスの一環としてしか行われない。--without-server
を使用してディストリビューションをコンフィギャしてクライアントコードだけをビルドした場合は、クライアントは
MIT-pthreads
を使用するかどうかを判断できず、デフォルトで
Unix ソケット接続を使用する。
一部のプラットフォームでは、MIT-pthreads
のもとで Unix
ソケットが機能しないため、クライアントプログラムを実行するときに
-h
または --host
を使用する必要がある。
MIT-pthreads を使用して MySQL
をコンパイルした場合は、パフォーマンス上の理由から、デフォルトでシステムロックが無効になる。--external-locking
オプションを使用して、システムロックの使用をサーバに指示することができる。これは、同じデータファイルに対して
2 つの MySQL
サーバを実行できるようにする場合にのみ必要である(このような処理は推奨しない)。
pthread bind()
コマンドがソケットへのバインドに失敗し、エラーメッセージが表示されないことがある(これは、少なくとも
Solaris
上では発生する)。したがって、サーバへのすべての接続が失敗するということになる。以下に例を示す。
shell> mysqladmin version
mysqladmin: connect to server at '' failed;
error: 'Can't connect to mysql server on localhost (146)'
この問題の解決策は、mysqld
サーバを強制終了して再起動することである。
これは、当社でサーバを強制的に停止してすぐに再起動したときに、偶然見つかった方法である。
MIT-pthreadsでは、sleep()
システムコールに対して
SIGINT
(ブレーク)による割り込みを行うことはできない。これは、mysqladmin
--sleep
を実行したときにのみわかる。sleep()
コールが終了してから、割り込みが実行されプロセスが停止する。
リンク時に、以下のような警告メッセージが表示されることがある(少なくとも Solaris では発生する)。これらのメッセージは無視してかまわない。
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(...)'
MIT-pthreads と連携して動作する
readline
はまだない(これは、必要のないものであるが、興味のあるユーザもいるかもしれない)。
ここでは、Windows 上でバージョン 4.1 以降のソースから MySQL バイナリをビルドする方法を説明します。標準のソースディストリビューションまたは最新の開発ソースが格納されている BitKeeper ツリーからバイナリをビルドする場合の手順が記載されています。
注意: ここに記載されている手順は、最新のソースディストリビューションまたは BitKeeper ツリーで入手した MySQL を Windows 上でテストするユーザだけを対象としています。 自分でソースからビルドした MySQL サーバを実稼動環境で使用することはお勧めしません。通常、最も望ましいのは、MySQL AB が特に Windows 上で最適なパフォーマンスを達成するようにビルドした、プリコンパイルされた MySQL バイナリディストリビューションを使用することです。 バイナリディストリビューションのインストール手順については、項2.1.1. 「Windows への MySQL のインストール」 を参照してください。
Windows 上で MySQL をビルドするには、使用している Windows システムに以下のコンパイラとリソースがなければなりません。
VC++ 6.0 コンパイラ(SP 4 または 5 とプリプロセッサパッケージで更新したもの)。 プリプロセッサパッケージは、マクロアセンブラにとって必要である。 詳細については、以下のサイトを参照。 http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/faq.aspx。
約 45 MB のディスク領域
64 MB の RAM
また、Windows 用の MySQL ソースディストリビューションも必要です。MySQL バージョン 4.1 以降のソースディストリビューションを入手する方法は、以下の2 とおりです。
関心のあるバージョンの MySQL の MySQL AB がパッケージ化したソースディストリビューションを入手する。プリパッケージされたソースディストリビューションは、MySQL のリリース済みバージョン用のものが用意されており、http://www.mysql.com/downloads/ から入手できる。
最新の BitKeeper 開発者ソースツリーから自分でソースディストリビューションをパッケージ化する。これを行う場合は、Unix システム上でパッケージを作成してから、使用している Windows システムに転送する必要がある(設定およびビルドのステップの中には Unix 上でしか動作しないツールが必要なものがあるため)。したがって、BitKeeper を利用する場合は以下のものが必要である。
Unix を実行しているシステムか、Linux などの Unix ライクなシステム
そのシステム用の BitKeeper 3.0。BitKeeper は、http://www.bitkeeper.com/ から入手できる。
Windows ソースディストリビューションを使用する場合は、直接 項2.3.7.1. 「VC++ を使用した MySQL のビルド」 に進んでください。BitKeeper ツリーからビルドする場合は、項2.3.7.2. 「最新の開発ソースから Windows ソースパッケージを作成する」 に進んでください。
予想通りに動作しないものを見つけた場合や、Windows
での現在のビルドプロセスの改良方法に関して提案がある場合は、win32
メーリングリストにメッセージを送ってください。
See 項1.7.1.1. 「MySQL メーリングリスト」。
注意: MySQL 4.1 以降の VC++ ワークスペースファイルは、Microsoft Visual Studio 6.0 以降(7.0/.NET)のバージョンと互換性があり、リリース前に MySQL AB のスタッフによってテストされています。
MySQL のビルドは、以下の手順で行います。
作業ディレクトリを作成する(workdir
など)。
WinZip
か、.zip
ファイルを読み取ることのできるその他の
Windows
ツールを使用して、上記のディレクトリにソースディストリビューションをアンパックする。
VC++ 6.0 コンパイラを起動する。
[File
]メニューで、[Open
Workspace
]を選択する。
作業ディレクトリにある
mysql.dsw
ワークスペースを開く。
[Build
]メニューで、[Set
Active
Configuration
]メニューを選択する。
画面上でクリックして、[mysqld -
Win32
Debug
]を選択し、[OK]をクリックする。
F7
キーを押し、デバッグサーバ、ライブラリ、およびクライアントアプリケーションのビルドを開始する。
同様に、必要なリリースバージョンをコンパイルする。
プログラムおよびライブラリのデバッグバージョンは、client_debug
ディレクトリおよび lib_debug
ディレクトリにある。
プログラムおよびライブラリのリリースバージョンは、client_release
ディレクトリおよび
lib_release
ディレクトリにある。 注意:
デバッグバージョンとリリースバージョンの両方をビルドする場合は、[Build
]メニューで[build
all]オプションを選択する。
サーバをテストする。上記の手順でビルドしたサーバでは、デフォルトで
MySQL
ベースディレクトリとデータディレクトリが
C:\mysql
および
C:\mysql\data
であると想定される。ソースツリーのルートディレクトリとそのデータディレクトリをベースディレクトリおよびデータディレクトリとして使用してサーバをテストする場合は、サーバにそれらのパス名を通知する必要がある。この処理を行うには、コマンドラインで
--basedir
オプションと
--datadir
オプションを指定するか、オプション設定ファイル(Windows
ディレクトリにある C:\my.cnf
ファイルまたは my.ini
ファイル)に適切なオプションを配置する。使用したい既存のデータディレクトリが別の場所にある場合は、そのパス名を指定する。
使用するサーバに応じて、client_release
ディレクトリまたは
client_debug
ディレクトリからサーバを起動する。一般的なサーバの起動手順については、項2.1.1. 「Windows への MySQL のインストール」
を参照。
別のベースディレクトリまたはデータディレクトリを使用する場合は、それに合わせて手順を変更する必要がある。
設定に基づいてサーバがスタンドアロンまたはサービスとして稼動しているときに、client_release
ディレクトリまたは
client_debug
ディレクトリにある mysql
の対話型コマンドラインユーティリティからそのサーバに接続する。
ビルドしたプログラムが正しく動作することを確認したら、サーバを停止します。次に、以下の手順で MySQL をインストールします。
MySQL
をインストールするディレクトリを作成する。たとえば、C:\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\opt
MySQL のベンチマークを実行する場合は、以下のディレクトリを作成する。
mkdir \mysql\sql-bench
ベンチマークを実行するには、Perl が必要である。
workdir
ディレクトリから以下のディレクトリを
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\include
MySQL のベンチマークを実行する場合は、以下のコマンドも実行する。
xcopy sql-bench\*.* C:\mysql\bench /E
Windows バイナリディストリビューションの場合と同様にサーバを設定して起動します。 See 項2.1.1. 「Windows への MySQL のインストール」。
現在の BitKeeper ソースツリーから最新の Windows ソースパッケージをビルドするには、以下の手順で行います。 注意: この手順は、Unix または Unix ライクなオペレーティングシステムを実行しているシステム上で行う必要があります(この手順は、Linux などの場合に有効であることが知られています)。
MySQL の BitKeeper ソースツリーをコピーする(必要に応じて、バージョン 4.1 以降)。ソースツリーのコピー方法の詳細については、項2.3.4. 「開発ソースツリーからのインストール」の説明を参照。
サーババイナリが必要なため、ディストリビューションをコンフィギャしてビルドする。これを行う 1 つの方法は、ソースツリーの最上位ディレクトリで以下のコマンドを実行することである。
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
ソースツリーのバージョンを表す。
作成した Windows ソースパッケージを Windows マシンにコピーまたはアップロードする。ソースパッケージのコンパイルは、項2.3.7.1. 「VC++ を使用した 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_db
MySQL 権限テーブルには、MySQL サーバに接続できるユーザのホストや権限の情報が記録されている。
一般に、mysql_install_db
は、初めて MySQL
をインストールしたときにのみ実行する必要がある。したがって、既存のインストールをアップグレードする場合は、このステップはスキップできる(ただし、mysql_install_db
は使用しても非常に安全で、既存のテーブルを更新することはないので、判断がつかない場合は
mysql_install_db
を実行してかまわない)。
mysql_install_db
は、mysql
データベースに 6
つのテーブル(user
、db
、host
、tables_priv
、columns_priv
、および
func
)を作成する。初期権限の説明については、項4.4.4. 「MySQL 権限の初期設定」
を参照。
簡単に説明すると、初期権限は、MySQL
root
ユーザにあらゆる操作を許可し、全ユーザに
test
という名前か、test_
で始まる名前を持つデータベースを作成または使用する許可を与える。
権限テーブルを設定しないと、サーバを起動したときにログファイルに以下のエラーが記録される。
mysqld: Can't find file: 'host.frm'
MySQL
バイナリディストリビューションの場合にも、./bin/mysqld_safe
を実行して MySQL
を起動しないとこのエラーが発生する。 See
項4.8.2. 「mysqld_safe
(mysqld
のラッパ)」。
mysql_install_db
は、Unix
root
アカウントで実行する必要があることがある。
ただし、必要に応じて、データベースディレクトリ内のファイルに対して読み取りと書き込みのアクセス権がある一般のアカウント(root
以外の Unix のアカウント)で、 MySQL
サーバを実行することもできる。一般のアカウントで
MySQL
を実行する手順については、項A.3.2. 「一般ユーザで MySQL を実行する方法」を参照。
mysql_install_db
で問題が発生する場合は、項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
を編集した後に作成し直す場合に、これを行う必要がある。
これらの代替手段の詳細については、項4.4.4. 「MySQL 権限の初期設定」 を参照。
以下のように MySQL サーバを起動する。
shell>cd mysql_installation_directory
shell>bin/mysqld_safe &
バージョン 4.0 より前の MySQL
を使用している場合は、最後のコマンドの
bin/mysqld_safe
を
bin/safe_mysqld
に置き換える。
サーバの起動時に問題が発生した場合は、項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
のインストールディレクトリから実行する(インストールディレクトリ以外のディレクトリに移動している場合)。それでも失敗する場合は、項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 項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
権限テーブルを生成することです。このスクリプトがその他のデータに影響を及ぼすことはありません。
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 項1.7.1.3. 「バグまたは問題を報告する方法」。
mysqld
デーモンがすでに稼動している
この場合は、mysql_install_db
を実行する必要はない。mysql_install_db
は、MySQL を初めてインストールするときに 1
回だけ実行する必要がある。
mysqld
デーモンが稼動しているときに、別の
mysqld
デーモンをインストールできない
この問題は、既存の MySQL
インストールがある場合に、テストのためや、同時に
2
つのインストールを稼動させるために別の場所に新しいインストールを配置するときに発生する。一般に、2
つ目のサーバを実行するときに起きる問題は、そのサーバが既存のサーバと同じソケットやポートを使用しようとすることである。
この場合は、次のエラーメッセージが表示される。Can't
start server: Bind on TCP/IP port: Address already in
use
または Can't start server: Bind on
unix socket...
。 See
項4.2. 「同じマシン上で複数の MySQL サーバを実行する」。
デフォルトの場所(/tmp
内)にあるソケットファイルを作成するための書き込みアクセス権がない場合や、/tmp,
内にテンポラリファイルを作成するためのアクセス権がない場合に、mysql_install_db
の実行時や、mysqld
の起動時または使用時にエラーが表示される。
以下のコマンドを実行して、別のソケットとテンポラリディレクトリを指定することができる。
shell>TMPDIR=/some_tmp_dir/
shell>MYSQL_UNIX_PORT=/some_tmp_dir/mysqld.sock
shell>export TMPDIR MYSQL_UNIX_PORT
項A.4.5. 「MySQL ソケットファイル /tmp/mysql.sock
の保護または変更方法」 を参照。
some_tmp_dir
には、自分が書き込みアクセス権を持つディレクトリのパスを指定する。
See 付録?F. 環境変数。
この後、以下のコマンドを使用して、mysql_install_db
を実行し、サーバを起動できる。
shell>scripts/mysql_install_db
shell>BINDIR/mysqld_safe &
mysqld
がすぐにクラッシュする
2.0.7-5 より前のバージョンの
glibc
を備えた Red Hat
バージョン 5.0
を実行している場合、glibc
のすべてのパッチがインストールされていることを確認する必要がある。
MySQL
メールアーカイブには、これに関する大量の情報がある。メールアーカイブへのリンクは、http://lists.mysql.com/
からオンラインで利用できる。
項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 章?7. MySQL のテーブル型。
通常は、以下のいずれかの方法で
mysqld
サーバを起動します。
mysql.server
を実行する。このスクリプトは、主にシステムの起動とシャットダウンの際に使用される。詳細については、項2.4.3. 「MySQL を自動的に起動および停止する」
を参照。
mysqld_safe
を実行する。このスクリプトは、mysqld
の適切なオプションを判別し、それらのオプションを指定して
mysqld を実行する。 See
項4.8.2. 「mysqld_safe
(mysqld
のラッパ)」。
Windows NT/2000/XP の場合は、項2.1.1.7. 「Windows NT、2000、または XP での MySQL の起動」 を参照。
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
ポートは他のプログラムによって使用されています。
項2.4.1. 「mysql_install_db
の実行に関する問題」 および
項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 項E.1.2. 「トレースファイルの作成」。
InnoDB テーブルを使用している場合は、項7.5.3. 「InnoDB 起動オプション」 を参照してください。
BDB(Berkeley
DB)テーブルを使用している場合は、項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
パッケージの詳細については、項2.1.2. 「Linux への MySQL のインストール」
を参照してください。
Mac OS X では、別の MySQL Startup Item パッケージをインストールして、システムブートアップ時に MySQL が自動的に起動できるようにすることができます。 詳細については、項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]
グループを使用するようにオプション設定ファイルを更新する必要があります。
アップグレードを行う前に、既存のデータベースをバックアップする必要があります。
同じベースバージョンの 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
を使用する。
すべてのテーブルと文字列カラムがキャラクタセットを持つようになった。
See 章?9. 各国キャラクタセットと Unicode。
キャラクタセット情報は、SHOW CREATE
TABLE
と mysqldump
によって表示される (MySQL バージョン 4.0.6
以降は、新しいダンプファイルを読み取ることはできる。これより前のバージョンは、新しいダンプファイルを読み取ることはできない)。
4.1 では、.frm
ファイルで使用されるテーブル定義形式が少し変更されている。4.0.11
以降の MySQL 4.0 バージョンは、この新しい
.frm
形式を直接読読み取ることができるが、これより前のバージョンは新しい形式を読み取ることはできない。
バージョン 4.1 のテーブルを 4.0.11
より前のバージョンに移動する必要がある場合は、mysqldump
を使用する。 See 項4.9.7. 「mysqldump
(テーブル構造とデータのダンプ)」。
同一の Windows
マシン上で複数のサーバを実行する場合は、すべてのマシン上で異なる
--shared_memory_base_name
オプションを使用する必要がある。
UDF
関数へのインタフェースが少し変更された。集約関数
XXX()
ごとに
xxx_clear()
関数を宣言しなければならなくなった。
一般に、以前の MySQL バージョンから 4.1 にアップグレードする場合は、以下のステップを実行する必要がある。
前述の変更点をチェックして、使用しているアプリケーションに影響を及ぼすような変更があるかどうかを確認する。
項D.2. 「Changes in release 4.1.x (Alpha)」 を読んで、4.1 で使用できる重要な新機能を確認する。
Windows 上で MySQL サーバを実行する場合は、項2.5.8. 「Windows 上での MySQL のアップグレード」 も参照。
アップグレード後に、パスワードを安全に処理するために必要な、長くなった新しい
Password
カラムを生成するように権限テーブルを更新する。テーブルの更新は、mysql_fix_privilege_tables
を使用して行う。手順については、項2.5.6. 「権限テーブルのアップグレード」
を参照。
4.1 では、より強力なセキュリティを実現するようにパスワードのハッシュメカニズムが変更されています。ただし、4.0 以前のクライアントライブラリを使用するクライアントがある場合に、互換性の問題が発生することがあります(4.1 にアップグレードされていないリモートホストからクライアントが接続するような状況では 4.0 クライアントがある可能性が非常に高いです)。考えられるいくつかのアップグレード方針を以下に示します。旧バージョンのクライアントとの互換性の目標とセキュリティの目標の間でさまざまなトレードオフが存在します。
4.1 にアップグレードしない。動作は変化しないが、当然ながら 4.1 クライアント/サーバプロトコルによって提供される新機能も一切使用できない(MySQL 4.1 には、プリペアドステートメントや複数結果セットなどの機能を提供する拡張クライアント/サーバプロトコルが組み込まれている)。 See 項11.1.4. 「C API のプリペアドステートメント」。
4.1
にアップグレードして、mysql_fix_privilege_tables
スクリプトを実行して、長いパスワードハッシュを格納できるように
user
テーブルの
Password
カラムを拡張する。ただし、--old-passwords
オプションを指定してサーバを実行して、4.1
より前のバージョンのクライアントが引き続き短いハッシュのクライアントアカウントに接続できるようにして下位互換性を実現する
すべてのクライアントが 4.1
にアップグレードされたら、最終的に
--old-passwords
サーバオプションの使用を中止できるまた、MySQL
アカウントのパスワードを、より安全で新しい形式を使用するように変更することもできる
4.1
にアップグレードして、mysql_fix_privilege_tables
スクリプトを実行して、user
テーブルの Password
カラムを拡張する。すべてのクライアントが
4.1
にアップグレードされていることがわかっている場合は、--old-passwords
オプションを指定しないでサーバを実行する。代わりに、既存のすべてのアカウントのパスワードを、新しい形式を持つように変更する。純粋な
4.1 インストールが最も安全である。
クライアント認証とパスワード変更操作に関係するパスワードハッシュの予備知識については、項4.3.11. 「MySQL 4.1 のパスワードハッシュ」 を参照してください。
一般に、以前の MySQL バージョンから 4.0 にアップグレードする場合は、以下を実行する必要があります。
アップグレード後に、権限テーブルを更新して新しい特権と機能を追加する。テーブルの更新は、mysql_fix_privilege_tables
スクリプトを使用して行う。手順については、項2.5.6. 「権限テーブルのアップグレード」
を参照。
廃止予定のオプションを使用しないように MySQL 起動スクリプトまたはオプション設定ファイルを編集する。廃止予定のオプションについては、このセクションの後半で説明する。
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';
共有ライブラリ(Perl 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 4.0 の mysql.user
テーブルには多数の新しい権限がある。 See
項4.4.1. 「GRANT
および REVOKE
の構文」。
これらの新しい権限を機能させるためには、権限テーブルを更新する必要がある。
更新の手順については、項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
項4.3.3. 「セキュリティ関連の mysqld
スタートアップオプション」。
バージョン 4.0.2 で、新しいユーザに対して
Access denied
エラーが発生した場合は、これまでは必要のなかったいくつかの新しい権限が必要であるかどうかをチェックする。特に、新しいスレーブに対しては
FILE
の代わりに REPLICATION
SLAVE
が必要。
safe_mysqld
は、mysqld_safe
という名前に変更された。下位互換性のために、しばらくの間、バイナリディストリビューションには
mysqld_safe
へのシンボリックリンクとして
safe_mysqld
が含められている。
InnoDB
がバイナリディストリビューションにデフォルトで組み込まれるようになった。
MySQL
をソースからビルドした場合は、デフォルトで
InnoDB が組み込まれる。 InnoDB
が有効になっているサーバを起動する場合、InnoDB
を使用せずにメモリを節約したいときは、--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 変数の名前が変更された。
変更前の名前 | 変更後の名前 |
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 |
変更前の名前は、MySQL 4.0 でも機能するが、廃止予定である。
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
は無視されていた)。
MySQL 4.0.11 以降では、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 項6.3.5. 「キャスト関数」。
注意:整数値の減算でどちらか一方の整数値が
UNSIGNED
型の場合、結果の値は符号なしになる。つまり、MySQL
4.0
にアップグレードする前に、アプリケーションをチェックして、符号なしのエンティティから値を差し引いて、負の答えを得たい場合や、整数カラムから符号なしの値を差し引く場合がないかを確認する。mysqld
を起動するときに
--sql-mode=NO_UNSIGNED_SUBTRACTION
オプションを使用すると、この動作を無効にすることができる。
See 項6.3.5. 「キャスト関数」。
テーブルで MATCH ... AGAINST (... IN BOOLEAN
MODE)
を使用するには、REPAIR
TABLE table_name USE_FRM
でテーブルを再ビルドする必要がある。
LOCATE()
と INSTR()
は、いずれかの引数がバイナリ文字列である場合にケース依存となる。それ以外の場合は、ケース非依存である。
STRCMP()
は、比較を実行するときに現在のキャラクタセットを使用するようになった。つまり、デフォルトの比較動作はケース非依存になった。
HEX(string)
は、string
で 16
進数に変換された文字を返す。数値を 16
進数に変換したい場合は、必ず、数値引数を指定して
HEX()
を呼び出す。
3.23 では、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
項11.1.14. 「スレッドクライアントの作成方法」。
Perl DBD::mysql
モジュールを再コンパイルする場合は、DBD-mysql
バージョン 1.2218
以降を入手する必要がある。これは、1.2218
より前のバージョンの DBD
モジュールでは、廃止になった
mysql_drop_db()
コールが使用されるためである。
バージョン 2.1022 以降が推奨される。
4.0 では、RAND(seed)
は 3.23
の場合とは異なる乱数系を返す。この変更は、RAND(seed)
と RAND(seed+1)
をさらに明確に区別するために行われた。
IFNULL(A,B)
によって返されるデフォルトの型は、A
および B
の型のうちで、より
'総称的な'
方が設定されるようになった(総称性の度合いの高い順に並べると、文字列、REAL
、INTEGER
となる)。
Windows 上で MySQL サーバを実行する場合は、項2.5.8. 「Windows 上での MySQL のアップグレード」 も参照してください。レプリケーションを使用する場合は、項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 クライアント 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()
を使用する。
MySQL バージョン 3.22 では、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
が返されます。権限テーブルの更新の手順については、項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
オプションを使用しない場合は、以下の変更を行う必要があります。
すべてのクライアントコードを再コンパイルする。ODBC
を使用している場合は、新しい
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
項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
項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 をアップグレードする場合は、以下の手順に従って行います。
最新のWindows 用 MySQL ディストリビューションをダウンロードする。
保守のためのサーバの停止が許される、使用率の低い時間帯を選ぶ。
アクティブになっているユーザに保守のために停止することを通知する。
稼動している MySQL サーバを停止する(MySQL
をサービスとして実行している場合は
NET STOP mysql
または
Services
ユーティリティ、それ以外の場合は
mysqladmin shutdown
を使用する)。
WinMySQLAdmin
プログラムを実行している場合は、このプログラムを終了する。
現在使用中のデータ(デフォルトでは
c:\mysql\data
)
を念のためバックアップする。
WinZip の[Install]ボタンをクリックし、インストールスクリプトのインストールステップに従って、Windows ディストリビューションのインストールスクリプトを実行する。
旧バージョンの MySQL (通常は
C:\mysql
にある)を上書きするか、C:\mysql4
などの別のディレクトリにインストールする。旧バージョンを上書きすることを推奨する。ただし、data
が上書きされないように注意する。
サーバを再起動する(MySQL
をサービスとして実行している場合は
NET START
mysql
、それ以外の場合は直接
mysqld
を起動する)。
権限テーブルを更新する。更新の手順については、項2.5.6. 「権限テーブルのアップグレード」 を参照。
考えられるエラー状況は以下のとおりです。
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>
))。
使用しているマシンに SSH
クライアントをインストールする。使用してみて最も優れていた有償の
SSH
クライアントは、http://www.vandyke.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/)で検索できる。
Windows SSH クライアントを起動する。
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
を設定)を実行する。
すべてのものを保存する。保存しないと、次回も上記の設定を行わなければならなくなる。
作成した SSH セッションでサーバにログインする。
Windows マシン上で、ODBC アプリケーション(Access など)を起動する。
Windows
上に新しいファイルを作成し、通常どおりに
ODBC ドライバを使用して MySQL
にリンクする。ただし、MySQL
ホストサーバとして、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 バージョンと同じ機能が組み込まれていますが、以下の例外があります。
Windows 95 とスレッド
Windows 95 は、スレッド生成のたびに約 200
バイトのメインメモリをリークする。 MySQL
に接続するたびに新しいスレッドが生成されるため、サーバが多数の接続を処理する場合は、Windows
95 上で mysqld
を長時間実行しない。その他のバージョンの
Windows ではこのバグはない。
同時読み取り
MySQL は、pread()
呼び出しおよび pwrite()
呼び出しに依存して、INSERT
と SELECT
の混在を可能にしている。現時点では、当社は相互排他ロック(mutex)を使用して
pread()
/pwrite()
をエミュレートしている。長期的には、処理速度を向上させるためにNT/2000/XP
上で
readfile()
/writefile()
インタフェースを使用できるように、ファイルレベルのインタフェースを仮想インタフェースに置き換える予定である。
現在の実装では、MySQL
が使用できるオープンファイルの数は 1024
個に制限されている。したがって、NT/2000/XP
上では、Unix
の場合と同じ数の同時実行スレッドを実行することはできない。
ブロック読み取り
MySQL は、接続ごとにブロック読み取りを使用する。これには、以下のような意味がある。
Unix バージョンの MySQL の場合のように 8 時間後に接続が自動的に切断されるということはない。
接続がハングした場合、MySQL を強制終了しなくても切断することができる。
mysqladmin kill
はスリープ状態の接続では機能しない。
スリープ状態の接続がある限り、mysqladmin
shutdown
が中断することはない。
この問題については、当社の Windows 開発者が適切な回避策を考え出したときに修正する予定である。
DROP
DATABASE
スレッドが使用しているデータベースを破棄することはできない。
タスクマネージャから MySQL を強制終了する
タスクマネージャまたは Windows 95
のシャットダウンユーティリティを使用して
MySQL を強制終了することはできない。MySQL
を停止するには、mysqladmin
shutdown
を使用する。
ケース非依存の名前
Windows では、ファイル名はケース非依存である。したがって MySQL のデータベース名とテーブル名も Windows ではケース非依存である。唯一の制約は、所定のステートメント全体を通じて同じケースを使用してデータベース名とテーブル名を指定する必要があることである。 See 項6.1.3. 「名前におけるケース依存」。
‘\
’
ディレクトリ文字
Windows 95
のパス名の構成要素は、‘\
’
文字で区切られる。これは、MySQL
においてもエスケープ文字である。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;
パイプの問題
パイプは、Windows
のコマンドラインプロンプトでは確実には機能しない。パイプに文字
^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
エラー
最新の MySQL クライアントプログラムを組み込んだ NT 上で MySQL バージョン 3.22 サーバを使用している場合に、以下のエラーが発生することがある。
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
エラー
MySQL
クライアントプログラムを実行して、同じマシン上で稼動しているサーバへの接続を試みたときに、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
Windows では、MERGE
テーブルが使用しているテーブルに対して
DROP TABLE
を実行できない。これは、MERGE
ハンドラが実行するテーブルマッピングを
MySQL
の上位レイヤが認識しないためである。Windows
では開いているファイルを破棄できないため、対象のテーブルを破棄する前に、FLUSH
TABLES
ですべての MERGE
テーブルをフラッシュするか、MERGE
テーブルを破棄する必要がある。これについては、ビューを導入するときに修正する予定である。
DATA DIRECTORY
と INDEX DIRECTORY
Windows では、CREATE TABLE
の
DATA DIRECTORY
オプションと
INDEX DIRECTORY
オプションは無視される。これは、Windows
がシンボリックリンクをサポートしていないためである。
Windows 上の MySQL の改良に協力してくださるユーザのために、未解決の問題を以下に示す。
MySQL に使いやすい起動アイコンまたはシャットダウンアイコンを追加する。
タスクマネージャから mysqld
を強制終了できれば非常に便利である。
しばらくは、mysqladmin shutdown
を使用する必要がある。
mysql
コマンドラインツールで使用するため
Windows に readline
を移植する。
GUI バージョンの標準 MySQL
クライアント(mysql
、mysqlshow
、mysqladmin
、および
mysqldump
)があれば便利である。
net.c
のソケット読み取りおよび書き込みの関数が割り込み可能になれば便利である。これによって、Windows
で mysqladmin kill
を使用して、開いているスレッドを強制終了することができるようになる。
Windows によって提供されるより高速でスレッドセーフなインクリメント/デクリメントメソッドを使用するマクロを追加する。
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
のパフォーマンスがどれだけ向上するかについての情報を収集中です。このようなシステムにアクセスでき、何らかのベンチマークを行った場合は、結果を
Documentation
Team
にお送りください。将来、このマニュアルにそれらの結果を記載します。
特に 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 項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 項A.4.1. 「MySQL が何度もクラッシュする場合に行うこと」。
SIGSEGV
シグナルで
mysqld
が停止した場合に Linux
上でコアダンプを取得するには、--core-file
オプションを指定して mysqld
を起動します。注意: ulimit -c
1000000
を mysqld_safe
に追加するか、--core-file-size=1000000
を指定して mysqld_safe
を起動して、コアファイルのサイズを増やします。
See 項4.8.2. 「mysqld_safe
(mysqld
のラッパ)」。
独自の MySQL クライアントをリンクしているときに、以下のエラーが発生した場合
ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory
それらを実行するときに、以下のいずれかの方法で問題を回避できます。
富士通コンパイラ (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
この問題は、以下のいずれかの方法で解決できます。
MySQL ソースディストリビューション(RPM
または 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
を使用しないようにする。
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
環境変数の値に追加する必要があるということを意味します。
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 項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
項4.1.1. 「mysqld
コマンドラインオプション」。
独自の MySQL クライアントをリンクしている場合、そのクライアントを実行したときに、以下のエラーが発生することがあります。
ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory
以下のいずれかの方法でこの問題を回避できます。
configure が -lz
でリンクする際に問題が発生し、zlib
をインストールしていない場合、以下の 2
つの選択肢があります。
圧縮された通信プロトコルを使用できるようにする場合は、ftp.gnu.org から zlib を入手してインストールする必要がある。
--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
を指定してコンフィギャする。
前述のように
/usr/include/widec.h
を編集し、configure を再実行する。
config.h
ファイルから
#define HAVE_TERM
行を削除し、make
を再実行する。
クライアントプログラムをリンクしているときに、リンカが
-lz
を検出できないという問題が発生した場合は、libz.so
ファイルが /usr/local/lib
にインストールされていることが問題である可能性が高いです。この問題は、以下のいずれかの方法で解決できます。
/usr/local/lib
を
LD_LIBRARY_PATH
にコピーする。
/lib
にある
libz.so
へのリンクを追加する。
Solaris 8 を使用している場合は、Solaris 8 の CD ディストリビューションにあるオプションの zlib をインストールできる。
--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
項E.1.3. 「mysqld のデバッグ(gdb 使用)」。
ここでは、各種の BSD と、それぞれの個別のバージョンについて説明します。
スレッドパッケージがより統合されているので FreeBSD 4.x 以降を推奨します。
最も簡単な、したがって最も望ましいインストール方法は、mysql-server と mysql-client の ports(http://www.freebsd.org/ で入手できる)を使用することです。
これらの ports を使用すると以下のことを実現できます。
使用している FreeBSD に最適な MySQL 。
自動設定およびビルド。
/usr/local/etc/rc.d にインストールされた起動スクリプト。
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
項2.3.6. 「MIT-pthreads に関する注意事項」。
make install
が
/usr/include/pthreads
を検出できないというエラーを出力した場合は、configure
が MIT-pthreads
が必要なことを検出しなかったことを意味します。このエラーは、以下のコマンドを実行して修正します。
shell>rm config.cache
shell>./configure --with-mit-threads
FreeBSD
は、デフォルトのファイルハンドルの上限が非常に低く設定されていることも知られています。See
項A.2.17. 「File Not Found エラー」。
mysqld_safe
の ulimit
-n
セクションのコメントを解除するか、/etc/login.conf
で mysqld
ユーザに対する上限を増やして cap_mkdb
/etc/login.conf
で再ビルドします。
また、デフォルトの値を使用しない場合は、必ずこのユーザに適切なクラスを設定してください(chpass
mysqld-user-name
が使用できる)。 See
項4.8.2. 「mysqld_safe
(mysqld
のラッパ)」。
メモリに余裕がある場合は、MySQL が 512 MB
を超える RAM
を取得できるようにカーネルを再ビルドすることを検討してください。
詳細情報が必要な場合は、LINT 設定ファイルの
option MAXDSIZ
を調べてください。
MySQL
の現在の日付に関する問題が発生した場合は、TZ
変数を設定することでおそらく解決します。
See 付録?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 付録?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
MySQL on Mac OS X Server 1.2(別名 Rhapsody)上でMySQL をコンフィギャする前に、まず、http://www.prnet.de/RegEx/mysql.html にある pthread パッケージをインストールする必要があります。
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 のネイティブスレッドパッケージを使用してビルドすることもできます。
その他の有効な構成
HP-UX 10.20 以降を実行している HP 9000/7xx
HP-UX 10.30 以降 を実行している HP 9000/8xx
以下の構成では、ほぼ確実に正常に機能しません。
HP-UX 10.x(10.2 より前)を実行する HP 9000/7xx または 8xx
HP-UX 9.xを実行する HP 9000/7xx または 8xx
ディストリビューションをインストールするには、以下のいずれかのコマンドを使用します。この場合、/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
項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)
OpenServer 5.0.x の場合は、Skunkware の gcc-2.95.2p1 以降を使用する必要がある。gcc-2.95.2p1 を入手するには、http://www.sco.com/skunkware/ でブラウザ版の OpenServer パッケージを選択するか、ftp サイト ftp2.caldera.com のpub/skunkware/osr5/devtools/gcc ディレクトリに ftp 接続する。
この製品と開発システムのための GCC 2.5.x の移植が必要である。これらは、このバージョンの SCO Unix 上に存在する必要がある。GCC Dev システムだけを使用することはできない。
最初に、FSU Pthreads パッケージを入手して、それをインストールする必要がある。 FSU Pthreads パッケージは、http://moss.csc.ncsu.edu/~mueller/ftp/pub/PART/pthreads.tar.gz にある。 また、http://www.mysql.com/Downloads/SCO/FSU-threads-3.5c.tar.gz からプリコンパイルされたパッケージを入手することもできる。
FSU Pthreads は、SCO Unix 4.2 で tcpip を使用してコンパイルできる。あるいは、GCC 2.5.x ODT または OS 3.0 の適正な移植版を使用して SCO Development System がインストールされた、OpenServer 3.0 または Open Desktop 3.0(OS 3.0 ODT 3.0)では、GCC 2.5.x の適正な移植版が必要である。適正な移植版を使用しないと、多くの問題が発生する。この製品の移植には、SCO Unix Development system が必要である。これがないと、必要なライブラリとリンカが足りない。
FSU Pthreads をシステムにビルドするには、以下の手順で行う。
threads/src
ディレクトリで
./configure
を実行し、SCO
OpenServer
オプションを選択する。このコマンドによって、Makefile.SCO5
が Makefile
にコピーされる。
make
を実行する。
デフォルトの /usr/include
ディレクトリにインストールするには、root
としてログインして、thread/src
ディレクトリに移動し(cd
)、make
install
を実行する。
MySQL をコンパイルするときは、必ず GNU
make
を使用する。
root
として
mysqld_safe
を起動しないと、おそらくプロセス当たり
110
個(デフォルト)のオープンファイルしか取得しない。mysqld
は、これに関する注記をログファイルに書き込む。
SCO 3.2V5.0.5 では、FSU Pthreads バージョン 3.5c 以降を使用する必要がある。 また、gcc 2.95.2 以降を使用する必要もある。
以下の configure
コマンドが有効である。
shell> ./configure --prefix=/usr/local/mysql --disable-shared
SCO 3.2V4.2 では、FSU Pthreads バージョン 3.5c
以降を使用する必要がある。 以下の
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 の注意事項
MySQL は、自動的に FSU Pthreads
を検出して、-lgthreads -lsocket
-lgthreads
を使用して
mysqld
をリンクする。
SCO development ライブラリは、FSU Pthreads に再入可能である。 SCO は、自社のライブラリの関数は再入可能であるから、FSU Pthreadsでも再入可能であるはずだと公言している。OpenServer 上の FSU Pthreads は、SCO スキームを使用して再入可能なライブラリを作成する。
FSU Pthreads
(http://www.mysql.com/
にあるバージョン以降)は、GNU
malloc
でリンクされた状態で提供される。メモリ使用率に関する問題が発生した場合は、libgthreads.a
と libgthreads.so
に
gmalloc.o
がインクルードされていることを確認する。
FSU Pthreads で、pthread
対応のシステムコールは、read()
、write()
、getmsg()
、connect()
、accept()
、select()
、および
wait()
である。
CSSA-2001-SCO.35.2(このパッチは
erg711905-dscr_remap
セキュリティパッチ(バージョン
2.0.0)として「custom」にリストされている)は
FSU スレッドを破壊し、mysqld
を不安定にする。OpenServer 5.0.6 マシン上で
mysqld
を実行する場合は、このパッチを削除する必要がある。
SCO は、ftp://ftp.sco.com/pub/openserver5 (OpenServer 5.0.x 用)でオペレーティングシステムパッチを提供している。
SCO は、セキュリティ修正プログラムと libsocket.so.2 を ftp://ftp.sco.com/pub/security/OpenServer および ftp://ftp.sco.com/pub/security/sse (OpenServer 5.0.x 用)で提供している。
OSR506 より前のバージョンのセキュリティ修正プログラム。また、OSR506 より前のバージョンのシステムへのインストールに関する説明が含まれた libsocket.so.2 と libresolv.so.1 の両方として、ftp://stage.caldera.com/pub/security/openserver/ または ftp://stage.caldera.com/pub/security/openserver/CSSA-2001-SCO.10/ にある telnetd 修正プログラム。
MySQL のコンパイルや使用を試みる前に、上記のパッチをインストールすることをお勧めする。
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
SCO は、ftp://ftp.sco.com/pub/unixware7 (UnixWare 7.1.1 および 7.1.3)と ftp://ftp.sco.com/pub/openunix8 (OpenUNIX 8.0.0)で、オペレーティングシステムパッチを提供している。
SCO は、ftp://ftp.sco.com/pub/security/OpenUNIX (OpenUNIX)および ftp://ftp.sco.com/pub/security/sse (UnixWare)で、セキュリティ修正プログラムについての情報を提供している。
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 項2.1.4. 「NetWare への MySQL のインストール」。
NetWare 用の MySQL は、Metrowerks CodeWarrior for
NetWare
と特別なクロスコンパイルバージョンの GNU
autotool
の組み合わせを使用してコンパイルされています。今後、NetWare
用の MySQL
をビルドと最適化に関する詳細情報が必要になったら、このセクションをもう一度参照してください。
MySQL は、DBI
/DBD
クライアントインタフェースという形で Perl
をサポートします。See 項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://www.activestate.com/Products/ActivePerl/ から ActiveState Perl を入手してインストールする。
コンソールウィンドウ(``DOS ウィンドウ'')を開く。
必要に応じて、HTTP_proxy
変数を設定する。たとえば、以下のコマンドを使用する。
set HTTP_proxy=my.proxy.com:3128
PPM(Perl Package Module) プログラムを起動する。
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";
../mysql/mysql.so
モジュールを検出できないというメッセージが
Perl から出力された場合は、Perl
が共有ライブラリ libmysqlclient.so
を見つけることができなかったことを意味します。
この問題は、以下のいずれかの方法で解決できます。
DBD-mysql
から以下のエラーが出力された場合は、おそらく
gcc
を使用しています(または
gcc
でコンパイルされた古いバイナリを使用しています)。
/usr/bin/perl: can't resolve symbol '__moddi3' /usr/bin/perl: can't resolve symbol '__divdi3'
mysql.so
ライブラリをビルドするときに、リンクコマンドに
-L/usr/lib/gcc-lib/... -lgcc
を追加します(Perl
クライアントをコンパイルするときに、make
からの 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
の出力に、使用するコマンドが示されます。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.