問題に対する解決策が新しいバージョンにすでに組み込まれている可能性がありますので、バグがすでに報告/解決されているかどうかを確認してください。
このサイトhttp://dev.mysql.com/doc/でマニュアルを検索することができます。マニュアルは、常に最新の状態にしておくために、新しく見つかった問題に対する解決策によって頻繁に更新されています。問題に対する解決策が新しいバージョンにすでに組み込まれている可能性が高いので、変更履歴に関する付録(http://dev.mysql.com/doc/mysql/en/news.html)は特に便利です。
SQL
ステートメントに対するパースエラーが生じた場合は、構文を念入りにチェックしてください。その構文に問題が見当たらなければ、MySQLの最新バージョンサーバがその構文をサポートしていない可能性が高くなります。最新のバージョンでマニュアルが使用された構文をカバーしていない場合、MySQL
サーバはそのステートメントをサポートしません。この場合、ご自身でその構文を実行されるか、もしくは<licensing@mysql.com>
宛てに電子メールを送り、サポートについてお問い合わせください。
マニュアルがその構文をカバーしているにも関わらず、MySQLが旧バージョンサーバの場合、MySQLの変更履歴を調べいつその構文が実行されたのかを確認してください。この場合、MySQLサーバへ新しくアップグレードするという選択肢もあります。
一般的な問題の解決法については以下を参照してください。項B.1. 「Problems and Common Errors」。
バグデータベースhttp://bugs.mysql.com/ を検索して、バグがすでに報告/解決されているかどうかを確認します。
次の場所で MySQL メーリングリストのアーカイブを検索します。http://lists.mysql.com/.詳細は 項1.6.1. 「MySQL メーリング リスト」 を参照してください。
また、http://www.mysql.com/search/を使用して、MySQL AB Web サイトにある Web ページすべて(マニュアルを含む)を検索することもできます。
マニュアルやアーカイブで回答を見つけることができなかった場合、ローカルの MySQL の専門家とともに調べてください。それでも質問に対する回答を見つけることができなかった場合は、次のセクションに記載されているガイドラインに従って MySQL メーリングリストにメールをお送りください。
通常バグを報告する場合、バグデータベースのアドレスhttp://bugs.mysql.com/を参照してください。当社のバグデータベースは公開されているので、すべてのユーザが 参照および検索することができます。システムにログインすると、新しいレポートを入力することもできます。 Webがアクセスできる環境が整っていない場合、この章の最後に記載のmysqlbugスクリプトを使用してバグレポートを作成することができます。
http://bugs.mysql.com/にあるバグデータベースにバグが報告されると、変更履歴にてどのバージョンで修正されたか確認できます。
MySQL で重大なセキュリティ
バグを見つけた場合は、<security@mysql.com>
に電子メールをお送りください。
他のユーザと問題について話し合う場合、MySQL メーリング リストの一部を利用することもできます。 項1.6.1. 「MySQL メーリング リスト」.
正確なバグ レポートを書くのは時間がかかるものですが、レポートを一度で済ませることで、報告者と弊社、双方の時間を節約することができます。そのバグの完全なテスト ケースを含むバグ レポートを提供していただければ、次回のリリースではその問題を修正できる可能性が高くなります。このセクションでは、ユーザの時間短縮と効果的な情報提供のため、レポートの正しい書き方を紹介します。このセクションを注意深く読み、ここに記載されている全ての情報がユーザレポートに含まれているか、確認してください。
できれば、MySQL
サーバの最新の製品版または開発版を使用して問題をテストしてから投稿してください。だれもが記載されているテストケースで
mysql test <
script_file
を使用するだけでバグを再現したり、バグレポートに含まれているシェルまたは
Perl
スクリプトを実行したりすることができるようにする必要があります。弊社で再現が可能なバグであれば、次回の
MySQL
リリースで修正される可能性が高くなります。
問題に関する適切な説明がバグレポートに記載されていると、最も効果的です。そのため、問題につながったすべての操作の適切な例を挙げ、問題自体を詳細に記述してください。最も効果的なレポートは、バグや問題を再現する方法を示す詳細な例が記載されたものです。詳細は Making a Test Case If You Experience Table Corruption を参照してください。
情報が多すぎるメッセージに対応することはできますが、少なすぎるメッセージに対応することはできません。多くの場合、問題の原因がわかっていると思い、細部を重要でないと考えるため、事実を省略してしまいます。記載するかどうかを迷ったときは、記載することをお勧めします。最初に十分な情報を記載していなかったために再度質問して、回答を待たなければならなくなるよりも、レポートに数行を追加する方が、はるかに時間が節約される上に、煩わしくありません。
バグレポートで最もよくある誤りは、(a) 使用している MySQL ディストリビューションのバージョン番号を記載していない、(b) MySQL サーバがインストールされているプラットフォームの説明(プラットフォームの種類およびバージョン番号を含む)が十分でないというものです。これは非常に重要な情報なので、ほとんどの場合、この情報が記載されていないバグレポートは役に立ちません。「なぜうまく作動しないのか ? 」 という質問が頻繁に寄せられます。その場合、要求した機能がその MySQL バージョンに実装されていなかったり、レポートに記載されているバグが新しい MySQL バージョンですでに修正されていたりすることがあります。エラーがプラットフォーム依存である場合もあります。そのような場合、オペレーティングシステムやプラットフォームのバージョン番号を知らないで問題を修正することはほとんど不可能です。
また、コンパイラが問題に関連している場合は、コンパイラに関する情報も記載してください。ユーザがコンパイラのバグを見つけると、MySQL 関連の問題であると考えることがよくあります。ほとんどのコンパイラは常に開発中なので、バージョンごとに改良されています。題がコンパイラに関連するものであるかどうかを判断するには、使用しているコンパイラを知る必要があります。コンパイルに関するすべての問題はバグと見なし、適宜報告してください。
プログラムでエラーメッセージが生成された場合、そのメッセージをレポートに記載することが非常に重要です。プログラムを使用するアーカイブから情報を検索しようとする場合、報告されたエラーメッセージがプログラムで生成されたものと正確に一致している方が効果的です。(大文字小文字の違いにも注意してください。)エラーメッセージを覚えるのではなく、メッセージ全体をレポートにコピーして貼り付けてください。
MyODBC に関する問題がある場合、MyODBC トレースファイルを生成し、レポートともに送信してください。章 24. MySQL コネクタのMyODBCセクションをご参照ください。
レポートにmysqlコマンドラインツールが使用され、テストケースから長い出力クエリが含まれる場合、そのようなディスプレイの有効な幅を超える出力については、--vertical
オプション(または
\G
ステートメント終端記号)を使用する必要があります。
このセクションに後述されるEXPLAIN
SELECT
例では\G
の使用方法を詳しく述べます。
レポートには以下の情報を記載してください。
使用している MySQL
ディストリビューションのバージョン番号(MySQL
バージョン
5.0.19など)。実行しているバージョンを確認するには、mysqladmin
versionを実行します。mysqladminは、MySQL
インストールディレクトリ下の
bin
ディレクトリにあります。
問題が発生したマシンの製造元とモデル。
オペレーティングシステムの名前とバージョン。Windows
を使用している場合、名前とバージョン番号を取得するには、通常
``マイ コンピュータ''
アイコンをダブルクリックし、「ヘルプ/バージョン情報」メニューをプルダウンします。ほとんどのオペレーティングシステムでは、この情報を取得するには、Unix
コマンド uname -a
を実行します。
メモリ(実メモリと仮想メモリ)の量が関連することもあります。関連していると思われる場合は、これらの値を記載します。
MySQLソフトウェアのソースディストリビューションを使用している場合、使用しているコンパイラの名前とバージョン番号が必要です。バイナリディストリビューションを使用している場合は、ディストリビューション名が必要です。
コンパイル時に問題が発生した場合、正確なエラーメッセージ、およびエラーが発生したファイル内の問題のあるコード付近の数行のコンテキストを記載します。
mysqldが停止した場合、mysqldのクラッシュの原因となったクエリも報告する必要があります。通常、ログを有効にして mysqldを実行すると、mysqldがクラッシュした後でこれを検出することができます。 詳細は Using Server Logs to Find Causes of Errors in mysqld を参照してください。
データベーステーブルが問題に関連している場合、SHOW
CREATE TABLE
からの出力を記載します。これを行うのは非常に簡単ですが、データベース内のテーブルに関する情報を取得する強力な方法です。この情報は、発生した状況と同じ状況を再現する際に役立ちます。
db_name
.tbl_name
問題発生時のSQLモードも有効な情報になります。sql_mode
システム変数値を報告してください。
保存されたプロシージャ、ファンクション、そしてトリガオブジェクトの関連するsql_mode
値は、そのオブジェクトが作成された際に有効だったものになります。保存されたプロシージャかファンクションに関して、SHOW
CREATE PROCEDURE
またはSHOW CREATE
FUNCTION
ステートメントは有効なSQLモードを示しています。また、これに関する情報に対してはINFORMATION_SCHEMA
クエリを利用することができます。
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, SQL_MODE FROM INFORMATION_SCHEMA.ROUTINES;
トリガに対しては以下のステートメントが利用できます。
SELECT EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE, TRIGGER_NAME, SQL_MODE FROM INFORMATION_SCHEMA.TRIGGERS;
性能に関連するバグやSELECT
ステートメントに関する問題については、EXPLAIN
SELECT
...
の出力や、少なくともSELECT
ステートメントが生成する行の数も含んでください。関連する各テーブル毎に、SHOW
CREATE TABLE
からの出力もまた含んでください。状況について情報を提供できればできるほど、有効な手助けが可能となります。
tbl_name
下記はバグレポートの良い例です。mysqlコマンドラインツールを使ってステートメントが実行されています。読むのが困難なほど長い出力行に対して、\G
ステートメント終端記号がどのように使用されているか確認してください。
mysql>SHOW VARIABLES;
mysql>SHOW COLUMNS FROM ...\G
<output from SHOW COLUMNS>
mysql>EXPLAIN SELECT ...\G
<output from EXPLAIN>
mysql>FLUSH STATUS;
mysql>SELECT ...;
<A short version of the output from SELECT, including the time taken to run the query>
mysql>SHOW STATUS;
<output from SHOW STATUS>
mysqldの実行中にバグまたは問題が発生した場合、その異常を再現する入力スクリプトを提供します。このスクリプトには、必要なソースファイルを含める必要があります。スクリプトによって再現される状況が実際に発生した状況に近いほど、効果的です。再現可能なテストケースを作成できる場合は、バグレポートにアタッチメントとしてアップロードしてください。
スクリプトを提供できない場合は、少なくともmysqladmin variables extended-status processlistからの出力をメールに記載して、システムの動作に関する情報を提供する必要があります。
数行ではテストケースを再現できない場合や、テストテーブルが大きすぎてメーリングリストに送信できない場合(10
レコードを超えるテーブル)、mysqldumpを使用してテーブルをダンプし、問題を説明する
README
ファイルを作成する必要があります。
tarと gzipまたは
zipを使用してファイルの圧縮アーカイブを作成し、FTP
を使用してそのアーカイブを
ftp://ftp.mysql.com/pub/mysql/upload/に転送します。その後、バグデータベースhttp://bugs.mysql.com/に問題を入力します。
MySQL サーバでクエリによって正しくない結果が生成されたと思う場合、結果だけでなく、正しいと考える結果と、その考えの根拠を示す説明も記載します。 .
問題のサンプルを提供する際には、新しい名前を使用するよりも、実際の状況で使用している変数名やテーブル名などを使用するのが適切です。問題が、変数やテーブルの名前に関連している可能性があるためです。このようなケースはほとんどないと思われますが、後悔するよりも安全策をとるべきです。結局、実際の状況に基づいたサンプルを提供する方がユーザにとって簡単であると同時に、当社にとっても効率的です。データを他のユーザに公開したくない場合は、ftp を使用して ftp://ftp.mysql.com/pub/mysql/upload/に転送することができます。データが実際に最高機密で、当社にも公開したくない場合は、他の名前を使用したサンプルを提供することもできますが、これは最後の選択肢です。
可能な場合、関連するプログラムのすべてのオプションを記載します。たとえば、mysqldサーバを開始する際に使用したオプションや
MySQL
クライアントプログラムの実行に使用したオプションを記載します。mysqldやmysqlのようなプログラムのオプション、configureスクリプトのオプションは多くの場合、回答への手がかりとなり、非常に重要です。これらを記載することは、決して無駄ではありません。Perl
や PHP
などのモジュールを使用している場合は、それらの言語プロセッサーバジョン番号だけでなく、プログラムが使用するモジュールバージョンも同様に記載します。例えば、DBI
やDBD::mysql
を使用するPerl
スクリプトがある場合、Perl、DBI
、そしてDBD::mysql
バージョン番号を記載します。
質問が権限システムに関連する場合、mysqlaccessの出力、mysqladmin
reloadの出力、および接続しようとした際に表示されたすべてのエラーメッセージを記載します。権限をテストする際には、まず
mysqlaccessを実行します。その後、mysqladmin
reload
versionを実行し、問題が発生したプログラムに接続します。mysqlaccessは、MySQL
インストールディレクトリ下の
bin
ディレクトリにあります。
バグのパッチを作成した場合、それを含めます。ただし、当社はパッチだけを必要としているわけではありません。パッチによって修正されるバグを示すテストケースなどの必要な情報が記載されていない場合、当社はそのパッチを使用しません。当社がパッチに関連する問題を見つける場合もあれば、パッチをまったく理解できない場合もあります。そのような場合は、パッチを使用することはできません。
パッチの目的を正確に確認することができない場合、当社はそのパッチを使用しません。この場合、テストケースが役立つことになります。発生する可能性があるすべての状況がパッチによって処理されることを示す必要があります。パッチが機能しないボーダーラインケースが見つかった場合(それがまれなケースでも)、そのパッチは役に立たない可能性があります。
何がバグであるか、そのバグがなぜ発生するのか、そのバグが何に関連するのかを推測することは、通常、間違いです。MySQL チームでさえも、最初にデバッガを使用せずにそのようなことを推測して、バグの実際の原因を特定することはできません。
ユーザ自身で問題を解決しようとしたことを他のユーザがわかるように、リファレンスマニュアルやメールアーカイブを確認したことをバグレポートに記載します。
データが壊れている点が問題である場合や、特定のテーブルにアクセスした際にエラーが発生した場合、myisamchkまたは
CHECK TABLE
とREPAIR
TABLE
を使用して、まずテーブルをチェックしてから、修復を試みる必要があります。
詳細は 章 4. データベース管理
を参照してください。
Windows起動時、SHOW VARIABLES LIKE
'lower_case_table_names'
コマンドを使用してlower_case_table_names
値をベリファイしてください。
変数は、データベースおよびテーブル名の大文字/小文字をサーバがどのように扱うかに対して影響を与えます。ある値に対しての効果は項8.2.2. 「識別子の大文字/小文字区別」で説明されている通りです。
テーブルが頻繁に壊れる場合、その問題が発生する状況と理由を特定する必要があります。この場合、.err
ファイルに、発生した問題に関する情報が格納されていることがあります。詳しくは項4.11.2. 「エラー ログ」を参照してください。このファイル内の関連する情報をバグレポートに記載します。通常、更新の途中で
mysqldが停止されない限り、mysqld
によってテーブルが破壊されることはありません。
mysqldが停止した原因が特定されれば、当社はその問題の解決策をはるかに簡単に提供することができます。
詳細は 項B.1.1. 「How to Determine What Is Causing a Problem」
を参照してください。
可能な場合、最新バージョンの MySQL サーバをダウンロードしてインストールし、これによって問題が解決されるかどうかを確認します。MySQL ソフトウェアのすべてのバージョンが詳細にテストされているため、問題なく動作するはずです。すべてにおいて最大限の下位互換性が確保されているため、MySQL のバージョンを問題なく切り替えることができると当社は確信しています。 詳細は 項2.1.2. 「インストールする MySQL 配布版の選択」 を参照してください。
Webがアクセスできる環境が整っておらず、http://bugs.mysql.com/を参照してもバグレポートができない場合、この章の最後に記載のmysqlbugスクリプトを使用してバグレポート(もしくは他の問題に対するレポート)を作成することができます。mysqlbugは自動的に以下の情報を確認することでユーザのレポート作成を助けますが、大事な情報が欠如している場合は、メッセージに記載してください。mysqlbugはMySQLインストールディレクトリ(バイナリディストリビューション)内のscripts
ディレクトリ(ソースディストリビューション)とbin
ディレクトリで見つけることができます。