第2章 MySQL のインストール

目次

2.1. 標準 MySQL のクイックインストール
2.1.1. Windows への MySQL のインストール
2.1.2. Linux への MySQL のインストール
2.1.3. Mac OS X への MySQL のインストール
2.1.4. NetWare への MySQL のインストール
2.2. インストール関連の一般的な問題
2.2.1. MySQL の入手方法
2.2.2. MD5 チェックサムまたは GnuPG によるパッケージ完全性の検証
2.2.3. MySQL がサポートしているオペレーティングシステム
2.2.4. 使用すべき MySQL のバージョン
2.2.5. インストールレイアウト
2.2.6. リリースの方法と時期
2.2.7. リリース理念 - リリースに既知のバグがない
2.2.8. MySQL AB がコンパイルした MySQL バイナリ
2.2.9. MySQL バイナリディストリビューションのインストール
2.3. MySQL ソースディストリビューションのインストール
2.3.1. クイックインストールの概要
2.3.2. パッチの適用
2.3.3. 一般的な configure オプション
2.3.4. 開発ソースツリーからのインストール
2.3.5. MySQL のコンパイルに関する問題への対処
2.3.6. MIT-pthreads に関する注意事項
2.3.7. Windows 上でソースから MySQL をインストールする
2.4. インストール後の設定とテスト
2.4.1. mysql_install_db の実行に関する問題
2.4.2. MySQL サーバの起動に関する問題
2.4.3. MySQL を自動的に起動および停止する
2.5. MySQL のアップグレードとダウングレード
2.5.1. バージョン 4.0 から 4.1 へのアップグレード
2.5.2. バージョン 3.23 から 4.0 へのアップグレード
2.5.3. バージョン 3.22 から 3.23 へのアップグレード
2.5.4. バージョン 3.21 から 3.22 へのアップグレード
2.5.5. バージョン 3.20 から 3.21 へのアップグレード
2.5.6. 権限テーブルのアップグレード
2.5.7. 別のアーキーテクチャへの移行
2.5.8. Windows 上での MySQL のアップグレード
2.6. オペレーティングシステム固有の注意事項
2.6.1. Windows の注意事項
2.6.2. Linux の注意事項(すべての Linux バージョン)
2.6.3. Solaris の注意事項
2.6.4. BSD の注意事項
2.6.5. Mac OS X の注意事項
2.6.6. その他の Unix の注意事項
2.6.7. OS/2 の注意事項
2.6.8. Novell NetWare の注意事項
2.6.9. BeOS の注意事項
2.7. Perl インストールについてのコメント
2.7.1. Unix への Perl のインストール
2.7.2. Windows への ActiveState Perl のインストール
2.7.3. Perl DBI/DBD インタフェース使用時の問題

この章では、MySQL の入手方法とインストール方法について説明します。

2.1. 標準 MySQL のクイックインストール

この章では、それぞれのプラットフォームのネイティブパッケージ化形式を使用してパッケージが提供されているプラットフォームへの MySQL のインストールについて説明します。ただし、その他のさまざまなプラットフォーム用の MySQL バイナリディストリビューションも用意されています。すべてのプラットフォームに適用されるパッケージの一般インストール手順については、項2.2.9. 「MySQL バイナリディストリビューションのインストール」 を参照してください。

入手できるその他のバイナリディストリビューションとその入手方法の詳細については、項2.2. 「インストール関連の一般的な問題」 を参照してください。

2.1.1. Windows への MySQL のインストール

Windows での MySQL のインストールは、以下のステップになります。

  1. ディストリビューションのインストール

  2. オプション設定ファイルの設定(必要時)

  3. 使用するサーバの選択

  4. サーバの起動

Windows 用 MySQL は、以下の2種類の形式で提供されます。

  • バイナリディストリビューション。セットアッププログラムが含まれており、このプログラムによって必要なものがすべてインストールされるので、サーバを直ちに起動できる。

  • ソースディストリビューション。VC++ 6.0 コンパイラを使用して実行ファイルをビルドするためのすべてのコードとサポートファイルが含まれている。 See 項2.3.7. 「Windows 上でソースから MySQL をインストールする」

一般的には、バイナリディストリビューションを使用することをお勧めします。このディストリビューションの方が単純で、MySQL のセットアップと実行に追加のツールを必要としないからです。

2.1.1.1. Windows システム要件

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_ROWSAVG_ROW_LENGTH を必ず使用する。 See 項6.5.3. 「CREATE TABLE 構文」

2.1.1.2. Windows バイナリディストリビューションのインストール

バイナリディストリビューションを使用して Windows に MySQL をインストールするには、以下の手順に従って行います。

  1. Windows NT、2000、または XP が搭載されたマシンで作業する場合は、必ず管理者権限を持つユーザとしてログインする。

  2. 旧バージョンの 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
    
  3. WinMySQLAdmin プログラムを実行している場合は、このプログラムを終了する。

  4. テンポラリディレクトリにディストリビューションファイルを展開する。

  5. setup.exe プログラムを実行して、インストールプロセスを開始する。 デフォルトのディレクトリ(C:\mysql)以外の場所に MySQL をインストールする場合は、Browse ボタンを使用して、目的のディレクトリを指定する。MySQL をデフォルト以外の場所にインストールすると、サーバを起動するたびにその場所を指定しなければならなくなる。これを行う最も簡単な方法は、項2.1.1.3. 「Windows MySQL 環境の準備」 で説明するように、オプション設定ファイルを使用することである。

  6. インストールプロセスを終了する。

2.1.1.3. Windows MySQL 環境の準備

サーバを実行するときに起動オプションを指定する必要がある場合は、コマンドラインで起動オプションを指定するか、オプション設定ファイルに起動オプションを配置します。サーバを起動するたびに使用されるオプションの場合、オプション設定ファイルを使用して MySQL のオプションを指定する方が便利です。この方法は、以下のような場合に特に便利です。

  • インストールディレクトリまたはデータディレクトリの場所がデフォルトの場所(C:\mysqlC:\mysql\data)と異なる場合。

  • サーバの設定を調整する必要がある場合。 たとえば、MySQL バージョン 3.23 の InnoDB トランザクションテーブルを使用するには、InnoDB のデータファイルとログファイルを格納するための 2 つのディレクトリ(C:\ibdataC:\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:\WINDOWSC:\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 に変更して事実上無効にする。

これで、サーバの起動をテストする準備ができました。

2.1.1.4. Windows サーバの選択

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-ntmysqld-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 では、これらのサーバを使用することはできない。

2.1.1.5. サーバを初めて起動する

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 拡張子を持つファイルです。

2.1.1.6. Windows 95、98、または Me での MySQL の起動

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 が認識できるすべてのオプションが表示されます。

2.1.1.7. Windows NT、2000、または XP での MySQL の起動

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\ControlWaitToKillServiceTimeout の値を編集して、このデフォルト値を増やすことができます。デフォルト値より大きい新しい値をミリ秒単位で指定します(たとえば、値 120000 を指定すると、Windows NT は最大で 120 秒間待機します)。

mysqld をサービスとして起動しない場合は、NT ベース以外の Windows のバージョンの場合と同様にコマンドラインから起動することができます。手順については、項2.1.1.6. 「Windows 95、98、または Me での MySQL の起動」 を参照してください。

2.1.1.8. Windows での 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 上にコンパイルされ、限られたテキスト編集機能を提供する。
mysqlcCygnus 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 の構文」

2.1.2. Linux への MySQL のインストール

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 バイナリディストリビューションのインストール」

2.1.3. Mac OS X への 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 の変数 MYSQLMYSQL=-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 ディレクトリも削除してください。

2.1.4. NetWare への MySQL のインストール

バージョン 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 では解決されています。

2.1.4.1. NetWare 用 MySQL バイナリのインストール

  1. 既存のインストールからアップグレードする場合は、MySQL サーバを停止する。 MySQL サーバの停止は、サーバコンソールから以下のコマンドを使用して行う。

    SERVER:  mysqladmin -u root shutdown
    
  2. MySQL のインストール場所にアクセスできるクライアントマシンから目的のサーバにログオンする。

  3. バイナリパッケージ zip ファイルをサーバに抽出する。必ず、zip ファイルのパスを使用できるようにする。ファイルを単純に SYS:\ に抽出しても問題はない。

    既存のインストールからアップグレードする場合は、ここで my.cnf のほかにデータディレクトリ(SYS:MYSQL\DATA など)をコピーする必要がある場合がある(データディレクトリをカスタマイズしている場合)。その後、旧バージョンの MySQL のコピーを削除することができる。

  4. 必要に応じて、ディレクトリの名前をより一貫性のある使いやすい名前に変更する。SYS:MYSQL という名前の使用をお勧めする(このマニュアルの例では、一般にインストールディレクトリを指すのにこの名前を使用している)。

  5. サーバコンソールで、MySQL NLM が格納されているディレクトリの検索パスを追加する。たとえば、以下のように入力する。

    SERVER:  SEARCH ADD SYS:MYSQL\BIN
    
  6. 必要に応じて、サーバコンソールで mysql_install_db を実行して初期データベースをインストールする。

  7. サーバコンソールで mysqld_safe を使用して MySQL サーバを起動する。

  8. インストールを完了するには、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 起動コマンドがないかチェックして、必要に応じてそれらの起動コマンドを編集または削除する。

2.2. インストール関連の一般的な問題

2.2.1. MySQL の入手方法

最新のバージョンとダウンロード手順については、MySQL のホームページ(http://www.mysql.com/)を参照してください。

主要ミラーは、http://mirrors.sunsite.dk/mysql/ にあります。

MySQL Web/ダウンロードミラーの最新の完全な一覧については、http://www.mysql.com/downloads/mirrors.html を参照してください。 このサイトでは、MySQL ミラーサイトになる方法と不適切なミラーや無効なミラーの報告方法についての情報も提供しています。

2.2.2. MD5 チェックサムまたは GnuPG によるパッケージ完全性の検証

目的に合った MySQL パッケージをダウンロードした後、インストールする前に、そのパッケージが破損していないこと、そして改ざんされていないことを確認する必要があります。

MySQL AB は、MD5 checksums と、GnuPG による暗号化署名である GNU Privacy Guard の 2 種類の完全性チェック手段を提供しています。

MD5 Checksum の検証

パッケージをダウンロードした後、MD5 チェックサムが MySQL ダウンロードページに記載されているものと一致しているかどうかを確認してください。各パッケージには個別のチェックサムがあります。以下のコマンドを使用してチェックサムを検証することができます。

shell> md5sum <package>

注意: オペレーティングシステムによっては、md5sum コマンドがサポートされていないことがあります。一部のオペレーティングシステムでは、このコマンドを md5 という名前で呼んでいます。また、このコマンドをまったく提供していないオペレーティングシステムもあります。Linux では、このコマンドはさまざまなプラットフォームで使用できる GNU Text Utilities パッケージに組み込まれています。http://www.gnu.org/software/textutils/ からソースコードを入手することもできます。OpenSSL をインストールしている場合は、このコマンドの代わりに openssl md5 <package> コマンドを使用することもできます。md5 コマンドの DOS/Windows 実装は、http://www.fourmilab.ch/md5/ から入手できます。

例:

shell> md5sum mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz
155836a7ed8c93aee6728a827a6aa153
                mysql-standard-4.0.10-gamma-pc-linux-i686.tar.gz

結果のチェックサムが、ダウンロードページで各パッケージの直下に記載されているものと一致しているかどうかを確認します。

GnuPG による署名チェック

パッケージの完全性を検証するためのより信頼性の高い方法は、暗号化署名を使用する方法です。MySQL AB は、GNU Privacy GuardGnuPG)を使用します。これは、Phil Zimmermann が開発した非常に有名な Pretty Good PrivacyPGP)に代わる オープンソースのソフトウェアです。 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 ビルドキー のコピーを入手する必要があります。以下に記載したものを直接カットアンドペーストするか、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 署名が一致しない場合は、まず別のミラーサイトからパッケージをもう一度ダウンロードしてみてください。再度、パッケージの完全性を検証できなかった場合は、そのパッケージの完全名と利用したダウンロードサイトを記載して、電子メールで当社にお知らせください(アドレスは または )。

2.2.3. MySQL がサポートしているオペレーティングシステム

当社では GNU Autoconf を使用しているので、正常に機能する Posix スレッドおよび C++ コンパイラによってすべての最新のシステムに MySQL を移植することができます(クライアントコードだけをコンパイルする場合は、C++ コンパイラは必要ですがスレッドは不要です)。当社では、主に Linux(SuSE および Red Hat)、FreeBSD、および Sun Solaris (バージョン 8 および 9)上で MySQL ソフトウェアを使用および開発しています

多くのオペレーティングシステムでは、ネイティブスレッドは最新バージョンのOSでのみ有効であることに注意してください。MySQL は、以下のオペレーティングシステムとスレッドパッケージの組み合わせで正常にコンパイルすることが報告されています。

注意: すべてのシステムが、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 を使用するプラットフォームを決定する際に参考にしていただけるように当社の所見を述べているにすぎません。

2.2.4. 使用すべき 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 ギガバイトを超える処理用データがあります。

2.2.5. インストールレイアウト

ここでは、バイナリディストリビューションおよびソースディストリビューションのインストールによって作成されるディレクトリのデフォルトレイアウトについて説明します。

バイナリディストリビューションは、選択したインストール場所(通常は /usr/local/mysql)でアンパックすることでインストールされ、その場所に以下のディレクトリを作成します。

ディレクトリディレクトリの内容
binクライアントプログラムと mysqld サーバ
dataログファイル、データベース
docsドキュメント、変更ログ
includeインクルード(ヘッダ)ファイル
libライブラリ
scriptsmysql_install_db
share/mysqlエラーメッセージファイル
sql-benchベンチマーク

ソースディストリビューションは、コンフィギャしてコンパイルした後にインストールされます。デフォルトでは、インストールステップによって、以下のサブディレクトリ内の /usr/local の下にファイルがインストールされます。

ディレクトリディレクトリの内容
binクライアントプログラムとスクリプト
include/mysqlインクルード(ヘッダ)ファイル
infoInfo 形式のマニュアル
lib/mysqlライブラリ
libexecmysqld サーバ
share/mysqlエラーメッセージファイル
sql-benchベンチマークと crash-me テスト
varデータベースとログファイル

インストールディレクトリ内では、ソースインストールのレイアウトは、バイナリインストールのレイアウトとは以下のように異なります。

  • mysqld サーバは、bin ディレクトリではなく、libexec ディレクトリにインストールされる。

  • データディレクトリは data ではなく var である。

  • mysql_install_db は、/usr/local/mysql/scripts ディレクトリではなく、/usr/local/bin ディレクトリにインストールされる。

  • ヘッダファイルとライブラリのディレクトリは、includelib ではなく、include/mysqllib/mysql である。

スクリプト scripts/make_binary_distribution を実行して、コンパイルされたソースディストリビューションから独自のバイナリインストールを作成できます。

2.2.6. リリースの方法と時期

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 のバージョン」

2.2.7. リリース理念 - リリースに既知のバグがない

当社は、リリースにバグがないようにするために多くの時間と労力を費やしています。 当社の知る限り、既知の '重大な' 再現可能なバグがある 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/ でバイナリを公開した後、mysqlannounce のメーリングリストで告知メールを送信する。 See 項1.7.1.1. 「MySQL メーリングリスト」。 告知メッセージには、リリースに対するすべての変更と、リリースに関する既知の問題の一覧が記載される (リリースノートに「既知の問題」のセクションが必要であったのは、ほんの一握りのリリースだけである)。

  • ユーザが MySQL の最新の機能に迅速にアクセスできるように、4 ? 8 週間ごとに新しい MySQL リリースを行う。 ソースコードのスナップショットは毎日作成され、http://downloads.mysql.com/snapshots.php で公開される。

  • リリース後に、特定のプラットフォーム上のビルドに(それでも)重大な問題があったというバグレポートを受けた場合は、バグを直ちに修正し、そのプラットフォーム用の新しい 'a' リリースをビルドする。当社の巨大なユーザ基盤のおかげで、問題は迅速に発見される。

  • 当社は、優れたリリースを作成することに関して高い実績を持つ。過去の 150 リリースにおいて、新しいビルドを行う必要があったのは 10 リリース未満である(そのうちの 3 つは、当社のビルドマシンの 1 つで glibc ライブラリに欠陥があったためであった。これを突き止めるのに長い時間を要した)。

2.2.8. MySQL AB がコンパイルした MySQL バイナリ

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 のインストール」 を参照してください。

2.2.9. 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_safebin/safe_mysqld に置き換えてください。

DBI および DBD-mysql Perl モジュールをインストールしている場合は、bin/mysql_setpermission スクリプトを使用して新しいユーザを追加できます。

以下に詳細な説明を示します。

バイナリディストリビューションをインストールするには、以下のステップに従って処理を行った後、項2.4. 「インストール後の設定とテスト」 に進み、インストール後の設定とテストを行います。

  1. ディストリビューションのアンパック先とするディレクトリを決め、そのディレクトリに移動する。以下の例では、ディストリビューションは /usr/local にアンパックされる(したがって、以降の操作説明は、/usr/local 内にファイルおよびディレクトリを作成するためのアクセス権をユーザが持っていることを前提として書かれている。 そのディレクトリが保護されている場合は、root としてインストールを実行する必要がある)。

  2. 項2.2.1. 「MySQL の入手方法」 に記載されているいずれかのサイトからディストリビューションファイルを入手する。

    MySQL バイナリディストリビューションは、圧縮された tar アーカイブとして提供され、mysql-VERSION-OS.tar.gz などの名前が付いている。この場合、VERSION はバージョン番号(3.21.15 など)を表し、OS はそのディストリビューションが対象とするオペレーティングシステムを示す(pc-linux-gnu-i586 など)。 注意: すべてのバイナリは、同じ MySQL ソースディストリビューションからビルドされている

  3. mysqld の実行時に使用するユーザとグループを追加する。

    shell> groupadd mysql
    shell> useradd -g mysql mysql
    

    上記のコマンドで、mysql グループと mysql ユーザが追加される。useraddgroupadd の構文は、Unix のバージョンの種類によって少し異なる。これらのコマンドは、それぞれ、adduser および addgroup と呼ばれることもある。 ユーザとグループを mysql 以外の名前にしてもかまわない。

  4. 以下のコマンドで、目的のインストールディレクトリに移動する。

    shell> cd /usr/local
    
  5. ディストリビューションをアンパックする。これによって、インストールディレクトリが作成される。 次に、そのディレクトリへのシンボリックリンクを作成する。

    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 としてより簡単に参照できるようになる。

  6. 以下のコマンドで、インストールディレクトリに移動する。

    shell> cd mysql
    

    mysql ディレクトリ内には、いくつかのファイルとサブディレクトリがある。 インストールのために最も重要なのは、bin サブディレクトリと scripts サブディレクトリである。

    • bin

      このディレクトリにはクライアントプログラムとサーバが格納されている。 シェルが MySQL プログラムを正しく検索するように、PATH 環境変数にこのディレクトリの完全パス名を追加する必要がある。 See 付録?F. 環境変数

    • scripts

      このディレクトリには、サーバアクセス権を保存する権限テーブルが格納された mysql データベースの初期化に使用する mysql_install_db スクリプトが格納されている。

  7. mysqlaccess を使用する場合、標準以外の場所に MySQL ディストリビューションがあるときは、mysqlaccessmysql クライアントを検索する場所を変更する必要がある。18 行目ぐらいにある bin/mysqlaccess スクリプトを編集する。以下のような行を検索する。

    $MYSQL     = '/usr/local/bin/mysql';    # path to mysql executable
    

    mysql が実際に格納されているシステム内の場所を反映するようにパスを変更する。この処理を行わないと、mysqlaccess を実行したときに Broken pipe というエラーが表示される。

  8. 以下のコマンドで、MySQL 権限テーブルを作成する(初めて MySQL をインストールする場合にのみ必要)。

    shell> scripts/mysql_install_db
    

    注意: バージョン 3.22.10 より前の MySQL バージョンでは、mysql_install_db を実行すると MySQL サーバが起動されていた。現バージョンでは、MySQL サーバは起動されない。

  9. バイナリの所有者を 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 グループに変更される。

  10. Perl の DBI/DBD インタフェースのサポートをインストールする場合は、項2.7. 「Perl インストールについてのコメント」 を参照。

  11. マシンのブート時に 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_safebin/safe_mysqld に置き換えてください。

次に、項4.8.2. 「mysqld_safemysqld のラッパ)」 に進み、See 項2.4. 「インストール後の設定とテスト」 を参照してください。

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

ソースのインストールに進む前に、使用しているプラットフォーム用のバイナリが入手可能かどうかと、それが自分のシステムでうまく機能するかどうかをまず確認します。当社は、バイナリを最適なオプションでビルドするよう尽力しています。

ソースから MySQL ビルドしてインストールするためには以下のツールが必要です。

  • ディストリビューションを伸長するための GNU gunzip

  • ディストリビューションをアンパックするための適切な tar プログラム。GNU tar は、有効であることで知られている。オペレーティングシステムにプリインストールされている tar 実装の中には、長いファイル名などに関する問題が発生することが知られているものがある(Sun tar など)。その場合は、まず GNU tar をインストールする。

  • 正しく機能する ANSI C++ コンパイラ。正しく機能することが知られているコンパイラとしては、2.95.2 以降の gcc、1.0.2 以降の egcsegcs 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. 「バグまたは問題を報告する方法」

2.3.1. クイックインストールの概要

MySQL ソースディストリビューションをインストールするために実行する必要のある基本的なコマンドは、以下のとおりです。

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

バージョン 4.0 より前の MySQL を使用している場合は、最後のコマンドの bin/mysqld_safebin/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. 「インストール後の設定とテスト」 に進み、ポストインストール初期化とテストを行います。

  1. ディストリビューションのアンパック先とするディレクトリを決め、そのディレクトリに移動する。

  2. 項2.2.1. 「MySQL の入手方法」 に記載されているいずれかのサイトからディストリビューションファイルを入手する。

  3. MySQL で Berkeley DB テーブルを使用することを考えている場合は、Berkeley DB ソースコードのパッチ適用済みバージョンを入手する必要がある。次に進む前に、Berkeley DB テーブルに関する章を読むことをお勧めする。 See 項7.6. 「BDB または BerkeleyDB テーブル」

    MySQL ソースディストリビューションは、tar 形式の圧縮アーカイブとして提供され、mysql-VERSION.tar.gz などの名前が付いている。この場合、VERSION は、5.0.6-beta などのバージョン番号である。

  4. mysqld の実行時に使用するユーザとグループを追加する。

    shell> groupadd mysql
    shell> useradd -g mysql mysql
    

    上記のコマンドで、mysql グループと mysql ユーザが追加される。useraddgroupadd の構文は、Unix のバージョンの種類によって少し異なる。これらのコマンドは、それぞれ、adduser および addgroup と呼ばれることもある。 ユーザとグループを mysql 以外の名前にしてもかまわない。

  5. ディストリビューションをカレントディレクトリにアンパックする。

    shell> gunzip < /path/to/mysql-VERSION.tar.gz | tar xvf -
    

    このコマンドによって、mysql-VERSION という名前のディレクトリが作成される。

  6. アンパックしたディストリビューションの最上位ディレクトリに移動する。

    shell> cd mysql-VERSION
    

    注意: 現時点では、最上位ディレクトリから MySQL をコンフィギャしてビルドする。他のディレクトリで MySQL をビルドすることはできない。

  7. コンフィギャして、コンパイルする。

    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 のコンパイルに関する問題への対処」 で、数多くの一般的な問題に関するヘルプを参照。

  8. 以下のコマンドで、すべてのものをインストールする。

    shell> make install
    

    このコマンドは、root として実行する必要がある場合がある。

  9. 以下のコマンドで、MySQL 権限テーブルを作成します(初めて MySQL をインストールする場合にのみ必要)。

    shell> scripts/mysql_install_db
    

    注意: バージョン 3.22.10 より前の MySQL バージョンでは、mysql_install_db を実行すると MySQL サーバが起動されていた。現バージョンでは、MySQL サーバは起動されない。

  10. バイナリの所有者を root に変更し、データディレクトリの所有者を mysqld の実行時に使用するユーザに変更する。

    shell> chown -R root  /usr/local/mysql
    shell> chown -R mysql /usr/local/mysql/var
    shell> chgrp -R mysql /usr/local/mysql
    

    最初のコマンドでファイルの owner 属性が root ユーザに変更され、2 番目のコマンドでデータディレクトリの owner 属性が mysql ユーザに変更される。3 番目のコマンドで、group 属性が mysql グループに変更される。

  11. Perl の DBI/DBD インタフェースのサポートをインストールする場合は、項2.7. 「Perl インストールについてのコメント」 を参照。

  12. マシンのブート時に 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_safesafe_mysqld に置き換えてください。

そのコマンドが、mysqld daemon ended というエラーですぐに失敗した場合は、ファイル mysql-data-directory/'hostname'.err に何らかの情報が記述されています。 原因としては、すでに別の mysqld サーバを実行していることが考えられます。 See 項4.2. 「同じマシン上で複数の MySQL サーバを実行する」

次に、項2.4. 「インストール後の設定とテスト」 に進みます。

2.3.2. パッチの適用

パッチは、メーリングリストまたは 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 を使用します)。一部のシステムでは、新しいバージョンのプログラムが現在実行されているバージョンを置き換える場合は、新しいバージョンのインストールが許可されないことがあります。

2.3.3. 一般的な configure オプション

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.1CC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors"
    egcs 1.0.3aCC=gcc CXX=gcc CXXFLAGS="-O3 -felide-constructors -fno-exceptions -fno-rtti"
    gcc 2.95.2CFLAGS="-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 は、big5cp1251cp1257czechdanishdec8doseuc_krgb2312gbkgerman1hebrewhp8hungariankoi8_rukoi8_ukrlatin1latin2sjisswe7tis620ujisusa7、または 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. 「オペレーティングシステム固有の注意事項」

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

注意:このセクションは、当社の新しいコードのテストに協力することに関心のある場合にのみお読みください。MySQL をビルドしてシステム上で稼動させるだけの場合は、標準のリリースディストリビューション(ソースディストリビューションまたはバイナリディストリビューション)を使用してください。

最新の開発ソースツリーを入手するには、以下の説明に従ってください。

  1. http://www.bitmover.com/cgi-bin/download.cgi から BitKeeper をダウンロードする。当社のリポジトリにアクセスするには、Bitkeeper 3.0 以降が必要である。

  2. 指示に従って、ダウンロードした BitKeeper をインストールする。

  3. 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
    

    接続の速度によって、ソースツリーの初期ダウンロードには多少時間がかかることがある。

  4. 次の一連のコマンドを実行するには、GNU makeautoconf 2.53 (以降)automake 1.5libtool 1.4、および m4 が必要である。多くのオペレーティングシステムには独自の make 実装が搭載されているが、未知のエラーメッセージが出力されてコンパイルが失敗する可能性が高い。したがって、必ず GNU makegmake と呼ばれることもある)を使用する。

    幸い、多くのオペレーティングシステムは 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 固有のフラグを削除して修正する。

  5. ビルドが完了したら、make install を実行する。実稼動マシン上でこれを行う場合は、このコマンドによって稼動中のリリースインストールが上書きされるという点に注意する。別の MySQL がインストールされている場合は、prefixwith-tcp-portunix-socket-path の各オプションに実稼動サーバで使用している値と異なる値を設定して、./configure を実行することをお勧めする。

  6. 新しいインストールを酷使して、新しい機能をクラッシュさせてみる。make test の実行から始める。 See 項13.1.2. 「MySQL テストスイート」

  7. make の段階に到達しても、ディストリビューションがコンパイルできない場合は、http://bugs.mysql.com/ にあるバグデータベースに報告をお願いしたい。必要な GNU ツールの最新バージョンがインストールされていて、それらのツールが設定ファイルの処理中にクラッシュする場合も同様である。 ただし、aclocal を実行して command not found というエラーや類似の問題が発生した場合は、報告は不要である。代わりに、必要なツールがすべてインストールされているかどうかと、シェルがそれらのツールを検出できるように PATH 変数が正しく設定されているかどうかを確認する。

  8. ソースツリーを取得するための最初の bk clone 操作の後、定期的に bk pull を実行して更新を入手する。

  9. bk sccstool を使用して、ツリーの変更履歴ですべての diff を調べることができる。不明な diff やコードがあった場合は、MySQL の内部メーリングリストにメールをお送りいただきたい。 See 項1.7.1.1. 「MySQL メーリングリスト」。 また、何かに関する修正案がある場合も、同じアドレスにパッチを添付したメールをお送りいただきたい。 bk diffs は、ユーザがソースを変更するとパッチを作成してくれる。アイデアをコードにする時間がない場合は、説明だけでもお送りいただきたい。

  10. BitKeeper には、bk helptool を使用してアクセスできる便利なヘルプユーティリティがある。

  11. 注意: いずれのコミット(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

2.3.5. MySQL のコンパイルに関する問題への対処

すべての 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 のコンパイル時に以下に示すようなエラーが発生した場合は、configureaccept()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
    

    使用しているオペレーティングシステムに応じて、XXXsize_t または int に変更する(注意: configureconfig.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 を再実行する必要があります。

2.3.6. MIT-pthreads に関する注意事項

ここでは、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 はまだない(これは、必要のないものであるが、興味のあるユーザもいるかもしれない)。

2.3.7. Windows 上でソースから MySQL をインストールする

ここでは、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 とおりです。

  1. 関心のあるバージョンの MySQL の MySQL AB がパッケージ化したソースディストリビューションを入手する。プリパッケージされたソースディストリビューションは、MySQL のリリース済みバージョン用のものが用意されており、http://www.mysql.com/downloads/ から入手できる。

  2. 最新の 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 メーリングリスト」

2.3.7.1. VC++ を使用した MySQL のビルド

注意: MySQL 4.1 以降の VC++ ワークスペースファイルは、Microsoft Visual Studio 6.0 以降(7.0/.NET)のバージョンと互換性があり、リリース前に MySQL AB のスタッフによってテストされています。

MySQL のビルドは、以下の手順で行います。

  1. 作業ディレクトリを作成する(workdir など)。

  2. WinZip か、.zip ファイルを読み取ることのできるその他の Windows ツールを使用して、上記のディレクトリにソースディストリビューションをアンパックする。

  3. VC++ 6.0 コンパイラを起動する。

  4. File]メニューで、[Open Workspace]を選択する。

  5. 作業ディレクトリにある mysql.dsw ワークスペースを開く。

  6. Build]メニューで、[Set Active Configuration]メニューを選択する。

  7. 画面上でクリックして、[mysqld - Win32 Debug]を選択し、[OK]をクリックする。

  8. F7 キーを押し、デバッグサーバ、ライブラリ、およびクライアントアプリケーションのビルドを開始する。

  9. 同様に、必要なリリースバージョンをコンパイルする。

  10. プログラムおよびライブラリのデバッグバージョンは、client_debug ディレクトリおよび lib_debug ディレクトリにある。 プログラムおよびライブラリのリリースバージョンは、client_release ディレクトリおよび lib_release ディレクトリにある。 注意: デバッグバージョンとリリースバージョンの両方をビルドする場合は、[Build]メニューで[build all]オプションを選択する。

  11. サーバをテストする。上記の手順でビルドしたサーバでは、デフォルトで MySQL ベースディレクトリとデータディレクトリが C:\mysql および C:\mysql\data であると想定される。ソースツリーのルートディレクトリとそのデータディレクトリをベースディレクトリおよびデータディレクトリとして使用してサーバをテストする場合は、サーバにそれらのパス名を通知する必要がある。この処理を行うには、コマンドラインで --basedir オプションと --datadir オプションを指定するか、オプション設定ファイル(Windows ディレクトリにある C:\my.cnf ファイルまたは my.ini ファイル)に適切なオプションを配置する。使用したい既存のデータディレクトリが別の場所にある場合は、そのパス名を指定する。

  12. 使用するサーバに応じて、client_release ディレクトリまたは client_debug ディレクトリからサーバを起動する。一般的なサーバの起動手順については、項2.1.1. 「Windows への MySQL のインストール」 を参照。 別のベースディレクトリまたはデータディレクトリを使用する場合は、それに合わせて手順を変更する必要がある。

  13. 設定に基づいてサーバがスタンドアロンまたはサービスとして稼動しているときに、client_release ディレクトリまたは client_debug ディレクトリにある mysql の対話型コマンドラインユーティリティからそのサーバに接続する。

ビルドしたプログラムが正しく動作することを確認したら、サーバを停止します。次に、以下の手順で MySQL をインストールします。

  1. 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 が必要である。

  2. 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 のインストール」

2.3.7.2. 最新の開発ソースから Windows ソースパッケージを作成する

現在の BitKeeper ソースツリーから最新の Windows ソースパッケージをビルドするには、以下の手順で行います。 注意: この手順は、Unix または Unix ライクなオペレーティングシステムを実行しているシステム上で行う必要があります(この手順は、Linux などの場合に有効であることが知られています)。

  1. MySQL の BitKeeper ソースツリーをコピーする(必要に応じて、バージョン 4.1 以降)。ソースツリーのコピー方法の詳細については、項2.3.4. 「開発ソースツリーからのインストール」の説明を参照。

  2. サーババイナリが必要なため、ディストリビューションをコンフィギャしてビルドする。これを行う 1 つの方法は、ソースツリーの最上位ディレクトリで以下のコマンドを実行することである。

    shell> ./BUILD/compile-pentium-max
    
  3. ビルドプロセスが正常に完了したことを確認したら、ソースツリーの最上位ディレクトリから以下のユーティリティスクリプトを実行する。

    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 ソースツリーのバージョンを表す。

  4. 作成した Windows ソースパッケージを Windows マシンにコピーまたはアップロードする。ソースパッケージのコンパイルは、項2.3.7.1. 「VC++ を使用した MySQL のビルド」 に記載されている手順で行う。

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

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 ソースツリーのメインディレクトリです。

以下の各項に示されるコマンドでは、BINDIRmysqladminmysqld_safe などのプログラムがインストールされている場所のパスを表します。バイナリディストリビューションの場合、BINDIR はディストリビューション内の bin ディレクトリです。ソースディストリビューションの場合、configure を実行したときに /usr/local 以外のインストールディレクトリを指定していない限り、BINDIR は通常は /usr/local/bin です。 EXECDIR は、mysqld サーバがインストールされている場所です。バイナリディストリビューションの場合、これは BINDIR と同じです。ソースディストリビューションの場合、EXECDIR は通常は /usr/local/libexec です。

テストについて詳細に説明します。

  1. 必要に応じて、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 つのテーブル(userdbhosttables_privcolumns_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_safemysqld のラッパ)」

    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 権限の初期設定」 を参照。

  2. 以下のように MySQL サーバを起動する。

    shell> cd mysql_installation_directory
    shell> bin/mysqld_safe &
    

    バージョン 4.0 より前の MySQL を使用している場合は、最後のコマンドの bin/mysqld_safebin/safe_mysqld に置き換える。

    サーバの起動時に問題が発生した場合は、項2.4.2. 「MySQL サーバの起動に関する問題」 を参照。

  3. mysqladmin を使用して、サーバが稼動していることを確認する。以下のコマンドによって、サーバが稼動しており接続に応答していることをチェックするための簡単なテストが実行される。

    shell> BINDIR/mysqladmin version
    shell> BINDIR/mysqladmin variables
    

    mysqladmin version からの出力は、使用しているプラットフォームと MySQL のバージョンによって少し異なるが、以下に示したものと類似した内容となる。

    shell> BINDIR/mysqladmin version
    mysqladmin  Ver 8.14 Distrib 3.23.32, for linux on i586
    Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
    This software comes with ABSOLUTELY NO WARRANTY. This is free software,
    and you are welcome to modify and redistribute it under the GPL license.
    
    Server version          3.23.32-debug
    Protocol version        10
    Connection              Localhost via Unix socket
    TCP port                3306
    UNIX socket             /tmp/mysql.sock
    Uptime:                 16 sec
    
    Threads: 1  Questions: 9  Slow queries: 0
    Opens: 7  Flush tables: 2  Open tables: 0
    Queries per second avg: 0.000
    Memory in use: 132K  Max memory used: 16773K
    

    BINDIR/mysqladmin を使用するとほかにどのようなことが行えるのかを把握するには、--help オプションを指定して起動する。

  4. サーバをシャットダウンできるかどうかを確認する。

    shell> BINDIR/mysqladmin -u root shutdown
    
  5. サーバを再起動できるかどうかを確認します。この確認は、mysqld_safe を使用するか、直接 mysqld を起動して行う。以下に例を示す。

    shell> BINDIR/mysqld_safe --log &
    

    mysqld_safe が失敗した場合は、MySQL のインストールディレクトリから実行する(インストールディレクトリ以外のディレクトリに移動している場合)。それでも失敗する場合は、項2.4.2. 「MySQL サーバの起動に関する問題」 を参照。

  6. いくつかの簡単なテストを実行して、サーバが稼動していることを確認する。 出力は、以下に示すものと類似した内容になる。

    shell> BINDIR/mysqlshow
    +-----------+
    | Databases |
    +-----------+
    | mysql     |
    +-----------+
    
    shell> BINDIR/mysqlshow mysql
    Database: mysql
    +--------------+
    |    Tables    |
    +--------------+
    | columns_priv |
    | db           |
    | func         |
    | host         |
    | tables_priv  |
    | user         |
    +--------------+
    
    shell> BINDIR/mysql -e "SELECT host,db,user FROM db" mysql
    +------+--------+------+
    | host | db     | user |
    +------+--------+------+
    | %    | test   |      |
    | %    | test_% |      |
    +------+--------+------+
    

    また、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 ファイルに出力される。

2.4.1. mysql_install_db の実行に関する問題

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

権限テーブルを作成し直す場合は、mysqld サーバを停止して(サーバが稼動している場合)、以下のようなコマンドを実行します。

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

ここでは、mysql_install_db の実行時に発生する可能性のある問題について説明します。

  • mysql_install_db が権限テーブルをインストールしない

    mysql_install_db が権限テーブルのインストールに失敗し、以下のメッセージを表示した後に終了することがある。

    starting mysqld daemon with databases from XXXXXX
    mysql daemon ended
    

    この場合は、ログファイルを詳しく調べる必要がある。ログは、エラーメッセージに表示されている XXXXXX ディレクトリにある。ログには mysqld が起動しない原因が示される。何が起きたかわからない場合は、mysqlbug を使用してバグレポートを投稿するときにこのログを含める。 See 項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 内)にあるソケットファイルを作成するための書き込みアクセス権がない場合や、/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 を実行してサーバに権限テーブルの再ロードを指示する。

2.4.2. MySQL サーバの起動に関する問題

トランザクション(InnoDB、BDB)をサポートするテーブルを使用する場合は、最初に my.cnf ファイルを作成して、使用する予定のテーブル型用の起動オプションを設定しておく必要があります。 See 章?7. 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.errhost_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 13Permission 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 起動オプション」 をよく理解しておいてください。

2.4.3. MySQL を自動的に起動および停止する

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 スクリプトは、datadirbasedir、および pid-file の各オプションを認識します。.

以下の表に、各起動スクリプトが、オプション設定ファイルから読み取るオプショングループを示します。

スクリプトオプショングループ
mysqld[mysqld][server]、および [mysqld-major-version]
mysql.server[mysql.server][mysqld]、および [server]
mysqld_safe[mysqld][server]、および [mysqld_safe]

下位互換性のために、mysql.server[mysql_server] グループも読み取り、mysqld_safe[safe_mysqld] グループも読み取ります。しかし、これらの代わりに [mysql.server] グループと [mysqld_safe] グループを使用するようにオプション設定ファイルを更新する必要があります。

See 項4.1.2. 「my.cnf オプション設定ファイル」

2.5. MySQL のアップグレードとダウングレード

アップグレードを行う前に、既存のデータベースをバックアップする必要があります。

同じベースバージョンの 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 インタフェースについても当てはまります。

2.5.1. バージョン 4.0 から 4.1 へのアップグレード

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 TABLEmysqldump によって表示される (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 にアップグレードする場合は、以下のステップを実行する必要がある。

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 のパスワードハッシュ」 を参照してください。

2.5.2. バージョン 3.23 から 4.0 へのアップグレード

一般に、以前の 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_sizebulk_insert_buffer_size
    query_cache_startup_typequery_cache_type
    record_bufferread_buffer_size
    record_rnd_bufferread_rnd_buffer_size
    sort_buffersort_buffer_size
    warningslog-warnings
    --err-log--log-errormysqld_safe 用)

    record_buffersort_buffer、および warnings の各起動オプションは、MySQL 4.0 でも機能するが、廃止予定である。

  • 以下の SQL 変数の名前が変更された。

    変更前の名前変更後の名前
    SQL_BIG_TABLESBIG_TABLES
    SQL_LOW_PRIORITY_UPDATESLOW_PRIORITY_UPDATES
    SQL_MAX_JOIN_SIZEMAX_JOIN_SIZE
    SQL_QUERY_CACHE_TYPEQUERY_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 つ増えている(NullIndex_type)。

  • CHECKLOCALTIME、および 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 の型のうちで、より '総称的な' 方が設定されるようになった(総称性の度合いの高い順に並べると、文字列、REALINTEGER となる)。

Windows 上で MySQL サーバを実行する場合は、項2.5.8. 「Windows 上での MySQL のアップグレード」 も参照してください。レプリケーションを使用する場合は、項4.11.2. 「レプリケーション実装の概要」 も参照してください。

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

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 では、configurereadlink() システムコールの使用可能性を検出しないので、これは行われなかった)。

  • 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 テーブルでは、テーブルからレコードを削除した場合でも、古い番号は再利用されなくなった。

  • CASEDELAYEDELSEENDFULLTEXTINNERRIGHTTHEN、および 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 引数より長い場合に、その文字列を短くするようになった。

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

バージョン 3.21 とバージョン 3.22 の間では互換性に影響するような変更は行われていません。 唯一の落とし穴は、DATE 型カラムで作成された新しいテーブルでは、新しい方法で日付が格納されることです。旧バージョンの mysqld からこれらの新しいカラムにアクセスすることはできません。

MySQL バージョン 3.22 をインストールした後に、新しいサーバを起動して、mysql_fix_privilege_tables スクリプトを実行する必要があります。このスクリプトによって、GRANT コマンドを使用するために必要な新しい権限が追加されます。この処理をしないと、ALTER TABLECREATE 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 という名前に変更されました。ただし、起動ファイルでは以前の名前を引き続き使用することができます。

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

バージョン 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() 関数の引数です。 新しい引数は、hostdatabaseuser、および password です(注意: user 引数と password 引数は順序が入れ替わりました)。 See 項11.5.2. 「DBI インタフェース」

以下の変更は、旧バージョンのアプリケーションのクエリに影響を及ぼすことがあります。

  • HAVINGORDER BY 節の前に指定しなければならなくなった。

  • LOCATE() のパラメータの順序が入れ替えられた。

  • いくつかの新しい予約語がある。最も注目すべきものは、DATETIME、および TIMESTAMP である。

2.5.6. 権限テーブルのアップグレード

一部のリリースでは、権限テーブル(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 の手順の場合と同様に、mysqlmysql_fix_privilege_tables.sql スクリプトのステートメントを処理しているときにいくつかの Duplicate column name 警告が表示されることがあります。これらの警告は、無視してかまいません。

スクリプトの実行後に、サーバを停止してから、再起動します。

2.5.7. 別のアーキーテクチャへの移行

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

また、mysqldumpmysqlimport を使用してデータベースを転送することもできます。 大きなテーブルの場合、この方法を使用すると、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 データベースも忘れずにコピーしてください。このデータベースには、権限テーブル (userdbhost) が格納されているためです。mysql データベースを配置するまでは、移動先のマシン上で MySQL root ユーザとしてコマンドを実行する必要があります。

mysql データベースを移動先のマシンにデータベースをインポートしたら、mysqladmin flush-privileges を実行して、サーバに権限テーブル情報を再ロードさせます。

2.5.8. Windows 上での MySQL のアップグレード

Windows 上で MySQL をアップグレードする場合は、以下の手順に従って行います。

  1. 最新のWindows 用 MySQL ディストリビューションをダウンロードする。

  2. 保守のためのサーバの停止が許される、使用率の低い時間帯を選ぶ。

  3. アクティブになっているユーザに保守のために停止することを通知する。

  4. 稼動している MySQL サーバを停止する(MySQL をサービスとして実行している場合は NET STOP mysql または Services ユーティリティ、それ以外の場合は mysqladmin shutdown を使用する)。

  5. WinMySQLAdmin プログラムを実行している場合は、このプログラムを終了する。

  6. 現在使用中のデータ(デフォルトでは c:\mysql\data ) を念のためバックアップする。

  7. WinZip の[Install]ボタンをクリックし、インストールスクリプトのインストールステップに従って、Windows ディストリビューションのインストールスクリプトを実行する。

  8. 旧バージョンの MySQL (通常は C:\mysql にある)を上書きするか、C:\mysql4 などの別のディレクトリにインストールする。旧バージョンを上書きすることを推奨する。ただし、data が上書きされないように注意する。

  9. サーバを再起動する(MySQL をサービスとして実行している場合は NET START mysql、それ以外の場合は直接 mysqld を起動する)。

  10. 権限テーブルを更新する。更新の手順については、項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 つのパートを移動するたびにサーバを再起動します)。

2.6. オペレーティングシステム固有の注意事項

2.6.1. Windows の注意事項

ここでは、Windows 上で MySQL を使用する場合に固有の問題について説明します。

2.6.1.1. SSH を使用して Windows から MySQL にリモート接続する

ここでは、SSH を使用してリモートの MySQL サーバとの安全な接続を確立するための接続方法について説明します(David Carlson 記())。

  1. 使用しているマシンに SSH クライアントをインストールする。使用してみて最も優れていた有償の SSH クライアントは、http://www.vandyke.com/SecureCRT である。 もう 1 つは、http://www.f-secure.com/f-secure である。フリーソフトウェアについては、Googlehttp://directory.google.com/Top/Computers/Security/Products_and_Tools/Cryptography/SSH/Clients/Windows/)で検索できる。

  2. Windows SSH クライアントを起動する。 Host_Name = yourmysqlserver_URL_or_IP を設定する。 userid=your_userid を設定して、サーバにログインする。この userid 値は、MySQL アカウントのユーザ名と同じでなくてもかまわない。

  3. ポート転送を設定する。リモート転送(local_port: 3306remote_host: yourmysqlservername_or_ipremote_port: 3306 を設定)か、ローカル転送(port: 3306host: localhostremote port: 3306 を設定)を実行する。

  4. すべてのものを保存する。保存しないと、次回も上記の設定を行わなければならなくなる。

  5. 作成した SSH セッションでサーバにログインする。

  6. Windows マシン上で、ODBC アプリケーション(Access など)を起動する。

  7. Windows 上に新しいファイルを作成し、通常どおりに ODBC ドライバを使用して MySQL にリンクする。ただし、MySQL ホストサーバとして、yourmysqlservername ではなく localhost を入力する。

これで、SSH を使用して暗号化された、MySQL への ODBC 接続が確立されました。

2.6.1.2. Windows 上での MySQL クライアントのコンパイル

ソースファイル内では、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 クライアントライブラリはスレッド化されたライブラリとしてコンパイルされるので、コードもマルチスレッド化されるようにコンパイルする必要があります。

2.6.1.3. Windows 上の MySQL と Unix 上の MySQL の比較

Windows 用の MySQL は、非常に安定していることを自ら証明しました。Windows バージョンの MySQL には、それに対応する Unix バージョンと同じ機能が組み込まれていますが、以下の例外があります。

  • Windows 95 とスレッド

    Windows 95 は、スレッド生成のたびに約 200 バイトのメインメモリをリークする。 MySQL に接続するたびに新しいスレッドが生成されるため、サーバが多数の接続を処理する場合は、Windows 95 上で mysqld を長時間実行しない。その他のバージョンの Windows ではこのバグはない。

  • 同時読み取り

    MySQL は、pread() 呼び出しおよび pwrite() 呼び出しに依存して、INSERTSELECT の混在を可能にしている。現時点では、当社は相互排他ロック(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 DIRECTORYINDEX DIRECTORY

    Windows では、CREATE TABLEDATA DIRECTORY オプションと INDEX DIRECTORY オプションは無視される。これは、Windows がシンボリックリンクをサポートしていないためである。

Windows 上の MySQL の改良に協力してくださるユーザのために、未解決の問題を以下に示す。

  • MySQL に使いやすい起動アイコンまたはシャットダウンアイコンを追加する。

  • タスクマネージャから mysqld を強制終了できれば非常に便利である。 しばらくは、mysqladmin shutdown を使用する必要がある。

  • mysql コマンドラインツールで使用するため Windows に readline を移植する。

  • GUI バージョンの標準 MySQL クライアント(mysqlmysqlshowmysqladmin、および mysqldump)があれば便利である。

  • net.c のソケット読み取りおよび書き込みの関数が割り込み可能になれば便利である。これによって、Windows で mysqladmin kill を使用して、開いているスレッドを強制終了することができるようになる。

  • Windows によって提供されるより高速でスレッドセーフなインクリメント/デクリメントメソッドを使用するマクロを追加する。

2.6.2. Linux の注意事項(すべての Linux バージョン)

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.hPTHREAD_THREADS_MAX を 4096 に増やし、linuxthreads/internals.hSTACK_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.patchlinuxthreads ディレクトリでパッチを適用する必要があります。 glibc-2.2 の将来のリリースに何らかの形でこのパッチが組み込まれることが望まれます。いずれにしても、glibc-2.2.2 にリンクしている場合は、STACK_SIZEPTHREAD_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 1000000mysqld_safe に追加するか、--core-file-size=1000000 を指定して mysqld_safe を起動して、コアファイルのサイズを増やします。 See 項4.8.2. 「mysqld_safemysqld のラッパ)」

独自の MySQL クライアントをリンクしているときに、以下のエラーが発生した場合

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

それらを実行するときに、以下のいずれかの方法で問題を回避できます。

  • -Lpath の代わりに、以下のフラグを設定してクライアントをリンクする。 -Wl,r/path-libmysqlclient.so

  • libmysqclient.so/usr/lib にコピーする。

  • クライアントを実行する前に、libmysqlclient.so が配置されているディレクトリのパス名を LD_RUN_PATH 環境変数に追加する。

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

fcc/FCC を使用する場合は、以下の configure 行が有効です。

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

2.6.2.1. Linux の注意事項 (バイナリディストリビューション)

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_dbresolveip テストは実行されません。この方法の弱点は、権限テーブルでホスト名を使用できないため、代わりに IP 番号を使用しなくてはならないことです(localhost の場合は除く)。--force をサポートしていない旧バージョンの MySQL リリースを使用している場合、エディタを使用して mysql_installresolveip テストを削除する必要があります。

  • --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 カーネルでこの問題が修正されることが望まれます。

2.6.2.2. Linux x86 の注意事項

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 を使用してください)。このオプションを使用しないと、mysqldgethostbyaddr() で停止します。これは、新しい 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

2.6.2.3. Linux SPARC の注意事項

一部の実装で、readdir_r() が壊れています。SHOW DATABASES が常に空のセットを返すという現象が発生します。この問題は、設定した後、コンパイルする前に、config.h から HAVE_READDIR_R を削除することで修正できます。

2.6.2.4. Linux Alpha の注意事項

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 を使用しないようにする。

2.6.2.5. Linux PowerPC の注意事項

MySQL は、最新の glibc パッケージを備えた MkLinux 上で正常に動作します(glibc 2.0.7 でテスト済み)。

2.6.2.6. Linux MIPS の注意事項

Qube2(Linux Mips)上で MySQL を機能させるには、最新の glibc ライブラリが必要です(glibc-2.0.7-29C2 は正常に機能することが知られています)。また、egcs C++ コンパイラ(egcs-1.0.2-9、または gcc 2.95.2 以降)を使用する必要もあります。

2.6.2.7. Linux IA-64 の注意事項

Linux IA-64 上でMySQL をコンパイルさせるには、以下の compile 行を使用します (gcc-2.96 を使用)。

CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql \
"--with-comment=Official MySQL binary" --with-extra-charsets=complex

IA-64 では、MySQL クライアントバイナリは共有ライブラリを使用します。これは、/usr/local/mysql 以外の場所にバイナリディストリビューションをインストールした場合は、libmysqlclient.so をインストールしたディレクトリのパスを、/etc/ld.so.conf ファイルまたは LD_LIBRARY_PATH 環境変数の値に追加する必要があるということを意味します。

See 項A.3.1. 「MySQL クライアントライブラリにリンク時の問題」

2.6.3. Solaris の注意事項

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 targtar)を使用して、ディストリビューションをアンパックする必要があります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

以下のいずれかの方法でこの問題を回避できます。

  • -Lpath の代わりに、以下のフラグを設定してクライアントをリンクする。 -Wl,r/full-path-to-libmysqlclient.so

  • libmysqclient.so/usr/lib にコピーする。

  • クライアントを実行する前に、libmysqlclient.so が配置されているディレクトリのパス名を LD_RUN_PATH 環境変数に追加する。

configure が -lz でリンクする際に問題が発生し、zlib をインストールしていない場合、以下の 2 つの選択肢があります。

  • 圧縮された通信プロトコルを使用できるようにする場合は、ftp.gnu.org から zlib を入手してインストールする必要がある。

  • --with-named-z-libs=no を指定してコンフィギャする。

gcc を使用していて、ユーザ定義関数(UDF)を MySQL にロードする際に問題が発生した場合は、その UDF をリンクする行に -lgcc を追加してみてください。

MySQL を自動的に起動させる場合は、/etc/init.dsupport-files/mysql.server をコピーして、/etc/rc3.d/S99mysql.server という名前でそのディレクトリへのシンボリックリンクを作成します。

Solaris では setuid() アプリケーションのコアファイルがサポートされていないので、--user オプションを指定している場合、mysqld からコアファイルを取得することはできません。

2.6.3.1. Solaris 2.7 および 2.8 の注意事項

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 を実行したときに以下のようなエラーが発生した場合は、configurecurses.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/libLD_LIBRARY_PATH にコピーする。

  • /lib にある libz.so へのリンクを追加する。

  • Solaris 8 を使用している場合は、Solaris 8 の CD ディストリビューションにあるオプションの zlib をインストールできる。

  • --with-named-z-libs=no オプションを指定して、MySQL をコンフィギャする。

2.6.3.2. Solaris x86 の注意事項

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 使用)」

2.6.4. BSD の注意事項

ここでは、各種の BSD と、それぞれの個別のバージョンについて説明します。

2.6.4.1. FreeBSD の注意事項

スレッドパッケージがより統合されているので 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_safeulimit -n セクションのコメントを解除するか、/etc/login.confmysqld ユーザに対する上限を増やして cap_mkdb /etc/login.conf で再ビルドします。 また、デフォルトの値を使用しない場合は、必ずこのユーザに適切なクラスを設定してください(chpass mysqld-user-name が使用できる)。 See 項4.8.2. 「mysqld_safemysqld のラッパ)」

メモリに余裕がある場合は、MySQL が 512 MB を超える RAM を取得できるようにカーネルを再ビルドすることを検討してください。 詳細情報が必要な場合は、LINT 設定ファイルの option MAXDSIZ を調べてください。

MySQL の現在の日付に関する問題が発生した場合は、TZ 変数を設定することでおそらく解決します。 See 付録?F. 環境変数

安全で安定したシステムにするには、-RELEASE と指定された FreeBSD カーネルだけを使用してください。

2.6.4.2. NetBSD の注意事項

NetBSD 上でコンパイルするには、GNU make が必要です。GNU make がないと、make が C++ ファイルで lint を実行したときにクラッシュします。

2.6.4.3. OpenBSD 2.5 の注意事項

OpenBSD バージョン 2.5 では、ネイティブスレッドを使用して以下のオプションを指定して MySQL をコンパイルできます。

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

2.6.4.4. OpenBSD 2.8 の注意事項

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 &

2.6.4.5. BSD/OS バージョン 2.x の注意事項

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 を切り替えてみてください。bashulimit に関する問題が BSDI ユーザから報告されています。

gcc を使用している場合は、sql_yacc.cc のコンパイルを可能にするために configure--with-low-memory フラグを使用する必要もあるかもしれません。

MySQL の現在の日付に関する問題が発生した場合は、TZ 変数を設定することで解決すると考えられます。 See 付録?F. 環境変数

2.6.4.6. BSD/OS バージョン 3.x の注意事項

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 を切り替えてみてください。bashulimit に関する問題が BSDI ユーザから報告されています。

2.6.4.7. BSD/OS バージョン 4.x の注意事項

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 上で、データベースディレクトリを別のデータベースディレクトリにシンボリックリンクすることも、テーブルを別のデータベースにシンボリックリンクすることもできないことを意味します(別のディスクへのシンボリックリンクを作成することはできます)。

2.6.5. Mac OS X の注意事項

2.6.5.1. Mac OS X 10.x

MySQL は Mac OS X 10.x(Darwin)上で問題なく機能します。この OS 用の pthread パッチは必要ありません。

このことは、Mac OS X 10.x Server にも当てはまります。サーバプラットフォーム用のコンパイルは、クライアントバージョンの Mac OS X の場合と同じです。ただし、MySQL は、サーバ にプリインストールされていることに注意してください。

当社の Mac OS X 用バイナリは、以下の configure 行で Darwin 6.3 上でコンパイルされます。

CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \
CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \
-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql \
--with-extra-charsets=complex --enable-thread-safe-client \
--enable-local-infile --disable-shared

See 項2.1.3. 「Mac OS X への MySQL のインストール」

2.6.5.2. Mac OS X Server 1.2(Rhapsody)

MySQL on Mac OS X Server 1.2(別名 Rhapsody)上でMySQL をコンフィギャする前に、まず、http://www.prnet.de/RegEx/mysql.html にある pthread パッケージをインストールする必要があります。

See 項2.1.3. 「Mac OS X への MySQL のインストール」

2.6.6. その他の Unix の注意事項

2.6.6.1. バイナリディストリビューションの場合の HP-UX の注意事項

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 がなければなりません。

2.6.6.2. HP-UX バージョン 10.20 の注意事項

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

2.6.6.3. HP-UX バージョン 11.x の注意事項

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.hmysql/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 のパッチのレベルをチェックしてください。

2.6.6.4. IBM-AIX の注意事項

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.hinclude/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

2.6.6.5. SunOS 4 の注意事項

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 という警告が表示されます。これらの警告は無視してかまいません。

2.6.6.6. Alpha-DEC-UNIX(Tru64)の注意事項

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_safemysqld のラッパ)」

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

2.6.6.7. Alpha-DEC-OSF/1 の注意事項

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 オプションがない場合は、-O0gcc の直後に追加します)。この処理が終わったら、最上位のディレクトリに戻って、make を再実行します。

2.6.6.8. SGI Irix の注意事項

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_ALLOCHAVE_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

2.6.6.9. SCO の注意事項

現行の移植版は、``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)
  1. 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 接続する。

  2. この製品と開発システムのための GCC 2.5.x の移植が必要である。これらは、このバージョンの SCO Unix 上に存在する必要がある。GCC Dev システムだけを使用することはできない。

  3. 最初に、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 からプリコンパイルされたパッケージを入手することもできる。

  4. 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 が必要である。これがないと、必要なライブラリとリンカが足りない。

  5. FSU Pthreads をシステムにビルドするには、以下の手順で行う。

    1. threads/src ディレクトリで ./configure を実行し、SCO OpenServer オプションを選択する。このコマンドによって、Makefile.SCO5Makefile にコピーされる。

    2. make を実行する。

    3. デフォルトの /usr/include ディレクトリにインストールするには、root としてログインして、thread/src ディレクトリに移動し(cd)、make install を実行する。

  6. MySQL をコンパイルするときは、必ず GNU make を使用する。

  7. root として mysqld_safe を起動しないと、おそらくプロセス当たり 110 個(デフォルト)のオープンファイルしか取得しない。mysqld は、これに関する注記をログファイルに書き込む。

  8. SCO 3.2V5.0.5 では、FSU Pthreads バージョン 3.5c 以降を使用する必要がある。 また、gcc 2.95.2 以降を使用する必要もある。

    以下の configure コマンドが有効である。

    shell> ./configure --prefix=/usr/local/mysql --disable-shared
    
  9. 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.alibgthreads.sogmalloc.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 でコンパイルされると最もよく機能します。

2.6.6.10. SCO UnixWare バージョン 7.1.x の注意事項

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
  1. SCO は、ftp://ftp.sco.com/pub/unixware7 (UnixWare 7.1.1 および 7.1.3)と ftp://ftp.sco.com/pub/openunix8 (OpenUNIX 8.0.0)で、オペレーティングシステムパッチを提供している。

  2. SCO は、ftp://ftp.sco.com/pub/security/OpenUNIX (OpenUNIX)および ftp://ftp.sco.com/pub/security/sse (UnixWare)で、セキュリティ修正プログラムについての情報を提供している。

2.6.7. OS/2 の注意事項

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";

2.6.8. Novell NetWare の注意事項

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 をビルドと最適化に関する詳細情報が必要になったら、このセクションをもう一度参照してください。

2.6.9. BeOS の注意事項

当社は、過去に MySQL を BeOS に 80% 移植すると語る BeOS の開発者と話したことがありますが、その後連絡はありません。

2.7. Perl インストールについてのコメント

2.7.1. Unix への Perl のインストール

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-DumperDBIDBD-mysql の各ディストリビューションを入手して、この順番でそれらをインストールする必要があります。インストール手順については、以下を参照してください。 ここでは、Data-Dumper モジュールの場合の例で説明しますが、3 つのディストリビューションすべてで手順は同じです。

  1. ディストリビューションをカレントディレクトリにアンパックする。

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

    このコマンドによって、Data-Dumper-VERSION という名前のディレクトリが作成される。

  2. アンパックしたディストリビューションの最上位ディレクトリに移動する。

    shell> cd Data-Dumper-VERSION
    

  3. ディストリビューションをビルドして、すべてのものをコンパイルする。

    shell> perl Makefile.PL
    shell> make
    shell> make test
    shell> make install
    

make test コマンドは、モジュールが正常に機能することを確認するので重要です。注意: 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 という見出しの下を調べてください。

2.7.2. Windows への ActiveState Perl のインストール

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";

2.7.3. Perl DBI/DBD インタフェース使用時の問題

../mysql/mysql.so モジュールを検出できないというメッセージが Perl から出力された場合は、Perl が共有ライブラリ libmysqlclient.so を見つけることができなかったことを意味します。

この問題は、以下のいずれかの方法で解決できます。

  • perl Makefile.PL ではなく perl Makefile.PL -static -config を使用して、DBD-mysql をコンパイルする。

  • 他の共有ライブラリが配置されているディレクトリ(おそらく、/usr/lib または/lib)に libmysqlclient.so をコピーする。

  • Linux では、libmysqlclient.so が配置されているディレクトリのパス名を /etc/ld.so.conf ファイルに追加できる。

  • libmysqlclient.so が配置されているディレクトリのパス名を LD_RUN_PATH 環境変数に追加する。

DBD-mysql から以下のエラーが出力された場合は、おそらく gcc を使用しています(または gcc でコンパイルされた古いバイナリを使用しています)。

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

mysql.so ライブラリをビルドするときに、リンクコマンドに -L/usr/lib/gcc-lib/... -lgcc を追加します(Perl クライアントをコンパイルするときに、make からの mysql.so に関する出力をチェックしてください)。-L オプションによって、システム内の libgcc.a が配置されているディレクトリのパス名が指定されます。

この問題のもう 1 つの原因は、Perl と MySQL の両方が gcc でコンパイルされていないことです。この場合、両方を gcc でコンパイルすることでこの不一致を解消できます。

テストを実行したときに、DBD-mysql から以下のエラーが出力されることがあります。

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

その場合は、-lz 圧縮ライブラリをリンク行に追加する必要があります。これは、lib/DBD/mysql/Install.pm ファイルの以下の行を変更して行います。

$sysliblist .= " -lm";

この行を以下のように変更します。

$sysliblist .= " -lm -lz";

この後、必ず make realclean を実行して、最初からインストールを行います。

動的リンク(SCO など)をサポートしていないシステム上で Perl モジュールを使用する場合は、DBIDBD-mysql が組み込まれた静的バージョンの Perl を作成します。これがうまくいく方法は、DBI コードがリンクされた Perl のバージョンを作成して、現在の Perl の上にインストールすることです。次に、それを使用して、DBD コードが追加でリンクされた Perl のバージョンをビルドして、インストールします。

SCO では、以下の環境変数が設定されている必要があります。

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

最初に、DBI ディストリビューションが配置されているディレクトリで以下のコマンドを実行して、静的にリンクされた 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.

アダルトレンタルサーバー