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


M Pieces of the manual in transit

M.1 Installing a MySQL Binary Distribution

MySQL の バイナリ配布プログラムをインストールする際は以下のツールが必要になります:

zipやtarを使った方法とは別の形式、RPM(RedHat Package Manager)を使った配布も行われています。 「2.1.1 Installing MySQL on Linux」節参照.

もしもこの問題にぶつかってしまった場合は mysqlbug を使用してください。 質問等は mysql@lists.mysql.com に送ってください。 問題点がバグに該当しなくても mysqlbug は情報を集めていますので解決の 手助けになることと思います。 mysqlbug を使用すれば問題の解決方法を得る 確率が増します。mysqlbug は解凍されたプログラムの `bin' 以下にあります。 「1.2.22.3 バグや問題を報告する方法」節参照.

バイナリ配布プログラムのインストール及び立ち上げまでに必要となる基本操作は以下の通りです。

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

新しいユーザを追加するには bin/mysql_setpermission スクリプトを 使用できます。使用の際はDBIMsql-Mysql-modulesの Perlモジュールをインストールする必要があります。

より詳細な情報をここから示します。

バイナリ配布のプログラムをインストールする際は以下に従ってください。 その後、 「2.4 インストール後の設定とテスト」節に進んでインストールの終了処理と動作試験を行ってください。

  1. バイナリ配布プログラムを解凍するためのディレクトリを用意してください。 そして、そこにバイナリ配布ファイルを置いてください。 以下の例では `/usr/local' にファイルを解凍し、`/usr/local/mysql' に MySQLをインストールします。(従って以下の例では操作するユーザが `/usr/local' に対して書き込み権限を持つことを前提としています。 もしも `/usr/local' への書き込みが禁じられている場合は rootとしてインストールを行う必要があります。
  2. プログラムの配布は以下のサイトから行ってください。 「2.2.1 MySQL を得る方法」節. MySQLのバイナリ配布は圧縮された tar 形式で行われており、 `mysql-VERSION-OS.tar.gz' のような形式の名前が付けられています。 ここで、VERSION はバージョン番号(例えば 3.21.15)を OS はプラットホームとなるOS(例えば pc-linux-gnu-i586)を示します。
  3. バイナリ配布ファイルに -max という表示があるものがありますが、 これはこのプログラムが transaction-safe 機能やその他の機能をサポート していることを示しています。 「4.7.5 mysqld-max, An extended mysqld server」節参照。 全てのバイナリプログラムは同じソースファイルからmakeされたものです。
  4. mysqldが動作するためのユーザとグループを作成してください。
    shell> groupadd mysql
    shell> useradd -g mysql mysql
    
    これらのコマンドは mysql グループと mysql ユーザを作成するものです。 useraddgroupadd というコマンドもありますが、 これらは使用プラットホームによって使い方が若干異なります。 また、adduseraddgroup と呼ばれる場合もあります。 mysql 以外のユーザやグループでも使用できます。
  5. インストール先のディレクトリを変更する場合は以下のようにします。 まずディレクトリを移動します。
    shell> cd /usr/local
    
  6. 以下のように移動したディレクトリ上でプログラムの解凍を行い インストールディレクトリを作成してください。
    shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -
    shell> ln -s mysql-VERSION-OS mysql
    
    最初のコマンドで `mysql-VERSION-OS' という名前のディレクトリを作成します。 次のコマンドはそのディレクトリへのシンボリックリンクを作成し、 ユーザに単純な `/usr/local/mysql' という名前での利用を可能にします。
  7. 以下のようにインストールディレクトリへ移動します。
    shell> cd mysql
    
    複数のファイルが mysql 以下のディレクトリに展開されているのが おわかりになると思います。 中でもインストールに重要な役目を果たすものは `bin'`scripts' のサブディレクトリにあります。
    `bin'
    このディレクトリにはサーバ本体やクライアントプログラムなどシェルから 使用するために PATH 変数に追加する必要のあるものが置いてあります。 「H Environment Variables」節参照.
    `scripts'
    このディレクトリには mysql_install_db という mysql への アクセス管理を行うデータベースを初期化するためのスクリプトが置いてあります。
  8. mysqlaccessを使う必要があり、なおかつ、標準ディレクトリとは異なる場所に インストールを行いたい場合は、mysqlaccessmysqlクライアントを 起動できるように環境設定を行う必要があります。 `bin/mysqlaccess'の18行目位にある以下のような行を変更してください。
    $MYSQL     = '/usr/local/bin/mysql';    # path to mysql executable
    
    これを実際に mysql がインストールされているディレクトリに変更してください。 これをしないと mysqlaccess を使う際に Broken pipe エラーが発生します。
  9. 以下のようにすることによりアクセス管理データベースを作ることができます(初めてMySQLをインストールする時だけ必要)。
    shell> scripts/mysql_install_db
    
    使用する MySQL のバージョンが 3.22.10 より古い場合はこの操作をする時に MySQL サーバが 立ち上がっている必要がありましたが、現在のバージョンでは必要ありません。
  10. データディレクトリ以下のファイルの所有者を mysql に、 それ以外のファイルの所有者を root にする手順は以下のようになります。
    shell> chown -R root  /usr/local/mysql
    shell> chown -R mysql /usr/local/mysql/data
    shell> chgrp -R mysql /usr/local/mysql
    
    最初のコマンドによって全てのファイルの owner 属性が root になります。 二行目のコマンドによってデータディレクトリ以下のファイル全ての owner 属性が mysql になります。 最後のコマンドによって全てのファイルの group 属性が mysql になります。
  11. PerlモジュールDBIDBDのインストールが必要なら 「M.2 Perl Installation Comments」節の項をご覧下さい。
  12. MySQL を OS のブート時に自動的に起動したい場合は support-files/mysql.server を 貴方のシステムの的確な場所にコピーして使用できます。 より詳しい情報は support-files/mysql.server のスクリプト自体や 「2.4.3 MySQL の自動起動と自動停止」節 にあります。

全てのファイルの解凍とインストールが終了したら初期化と稼動試験を行います。

以下のようにしてMySQLサーバを立ち上げることができます。

shell> bin/safe_mysqld --user=mysql &

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

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

M.2 Perl Installation Comments

M.2.1 Installing Perl on Unix

MySQLのPerlでの使用に関するサポートは DBI/DBDクライアントインターフェスの提供で行なわれます。 「8.2 MySQL Perl API」節参照. DBI/DBDはPerl5.004かそれ以上のバージョンが必要になります。 古いバージョンのPerlでは動きません

MySQL の Perl support にはここまでで既にインストールが済んでいる筈の MySQL のクライアントプログラミングサポートが必要となります。 もしも RPM ファイルからインストールをされているのならば クライアントプログラムはクライアントRPMにあるものの、 クライアントプログラミングサポートはデベロッパー RPM にあります。 まずデベロッパー RPM をインストールされたがどうかお確かめ下さい。

バージョン3.22.8からは Perl support がメインの MySQL 配布ファイルとは別になっています。 もし Perl support が必要であれば http://www.mysql.com/Downloads/Contrib/ からお取りください。

Perl関係プログラムのの配布はtar形式圧縮ファイルとして行われており、 ファイル名が `MODULE-VERSION.tar.gz' の形式になっています。 ここで、MODULEはモジュール名称、VERSIONはバージョン番号を表しています。 Data-DumperDBI、及び、Msql-Mysql-modulesを入手してインストールしてください。 インストール手順は以下に示す通りです。なお、ここではData-Dumperのみの手順が示されていますが、 他のモジュールについても同様な手順でインストールできます。

  1. 以下のようにして作業ディレクトリで配布ファイルを解凍展開してください。
    shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -
    
    This command creates a directory named `Data-Dumper-VERSION'.
  2. 解凍先のトップディレクトリーに移動します。
    shell> cd Data-Dumper-VERSION
    
  3. コンパイル&ビルドを行います。
    shell> perl Makefile.PL
    shell> make
    shell> make test
    shell> make install
    

出来上がったモジュールの動作を確認するためにmake testのコマンドは重要になってきます。 このコマンドをMsql-Mysql-modulesをインストールしている時に使ってみてください。 MySQLサーバが動いていなければ失敗することになります。

MySQLをバージョンアップした際に DBI が core ダンプした場合は 必ず Msql-Mysql-modules を再コンパイルしてインストールしなおしてください。 そうでなくても MySQL のバージョンを変更した場合は再コンパイルしたほうが賢明です。

貴方のユーザ権限ではPerlのモジュールをインストールできない場合でも 以下の例のようにしてローカルディレクトリにモジュールをインストールできます。

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

Installing New Modules that Require Locally Installed Modules.という見出しの文書をご覧下さい。

M.2.2 Installing ActiveState Perl on Windows

DBDモジュールとActiveState Perlをインストールするには以下の手順で行います。

以上で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";

M.2.3 Installing the MySQL Perl Distribution on Windows

MySQL Perlの配布パッケージにはDBIDBD:MySQL、そして、DBD:ODBCが含まれています。

M.2.4 Problems Using the Perl DBI/DBD Interface

Perl が "`../mysql/mysql.so'を見つけられない" というメッセージを出した場合、 それは多分 Perl のシェアードライブラリ `libmysqlclient.so' を見つけることが出来ないのでしょう。

これは以下のような方法で解決できます。

DBD-mysql が次のようなエラーを発生する場合があります。 この原因の一つは gcc(又はgccでコンパイルされた古いバイナリ配布パッケージ)をお使いのケースです。

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

`mysql.so' ライブラリをビルドする時に -L/usr/lib/gcc-lib/... -lgcc を リンクコマンドに追加してください(makeコマンド実行時の出力をチェックすれば確認できます。)。 オプション-Lで指定されるのはlibgcc.aのあるディレクトリになります。

もう一つの原因はPerlとMySQLのどちからがgccでコンパイルされており、どちらかがそうでない場合です。 この場合はどちらもgccでコンパイルし、この不一致を解消すれば解決します。

Msql-Mysql-modulesがテストで次のようなエラーを出した時、

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

これは、ファイル圧縮用ライブラリ -lz へのパスを追加すれば解決いたします。 `lib/DBD/mysql/Install.pm' に以下のような変更を行ってください。

$sysliblist .= " -lm";

to

$sysliblist .= " -lm -lz";

このあと'make realclean'を実行し、最初からインストールをやり直す必要があります。

SCOのようなダイナミックリンクが使用できないシステムで Perl モジュールを使用する際は DBIDBD-mysqlをスタティックリンクしたバージョンのPerlを作成する必要があります。 DBDをスタティックにリンクするには、Perlのインストールディレクトリに DBIのプログラムを置きDBDをリンクし、インストールします。

SCOでは以下のような環境変数をセットする必要があります。

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

DBI をスタティックにリンクしたPerlを作成するためには、 先ず以下のコマンドを DBI がインストールされているディレクトリで実行してください。

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

次に新しいPerlをインストールします。 通常 make perl でインストールに必要なファイル類を作成しますが、 SCOの場合は make -f Makefile.aperl inst_perl MAP_TARGET=perl のように行う必要があります。

次に、ここで作成された Perl で目的の DBD::mysql をスタティックにリンクされた Perl を作成するために使います。 Msql-Mysql-modules がインストールされたディレクトリで以下のようなコマンドを実行してください。

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

最後に、この新しいPerlプログラムをインストールしてください。 make perlで必要なコマンドを再確認することができます。

M.3 Functions for Use with GROUP BY Clauses

GROUP BY節を含まない文でグループ関数を使用すると 全てのレコードについてグループされたものとみなされます。

COUNT(expr)
Returns a count of the number of non-NULL values in the rows retrieved by a SELECT statement: SELECT文により選択されたレコードからNULLではないものの数を返します。
mysql> select student.student_name,COUNT(*)
           from student,course
           where student.student_id=course.student_id
           GROUP BY student_name;

COUNT(*)NULLを含むかどうかで選択されたレコードの数を返すだけです。 COUNT(*)は一つのテーブルから一つだけカラムが選択され、 尚且つWHERE節が使用されていない場合に最適化され、高速に動作します。 例えば以下のように使います。
mysql> select COUNT(*) from student;
COUNT(DISTINCT expr,[expr...])
これはNULL値では無い値を持つデータの数を区別して返すことが出来ます。
mysql> select COUNT(DISTINCT results) from student;
複数の選択されたデータ群からNULLを含まないデータの総数算出が必要な場合、 MySQLでは必要な選択リストを与えることによって得ることが出来ます。 一方でANSIのSQLではその選択一つ一つについてCODE(DISTINCT ..)を使う必要があります。
AVG(expr)
exprで得られる値の平均値を返します。
mysql> select student_name, AVG(test_score)
           from student
           GROUP BY student_name;
MIN(expr)
MAX(expr)
exprで得られる値の最大値、最小値を返します。 MIN()MAX()の引数は文字列を取ることもできます。 この際は文字列の値の大小を比較し、最大と最小を返します。 「5.4.3 MySQL はどのようにインデックスを使用するか?」節.
mysql> select student_name, MIN(test_score), MAX(test_score)
           from student
           GROUP BY student_name;
SUM(expr)
exprで得られる値の総計を返します。 もしも得られるレコードが見つからない場合はNULLが返ってきます。
STD(expr)
STDDEV(expr)
exprで得られる値の標準偏差を返します。 これはANSI SQLの格調になっています。 関数としてのSTDDEV()の形はOracleのものと互換性があります。
BIT_OR(expr)
exprで得られる値のビット和(OR)を返します。 計算は64-bit(BIGINT)の精度で行われます。
BIT_AND(expr)
exprで得られる値のビット積(AND)を返します。 計算は64-bit(BIGINT)の精度で行われます。

MySQLのGROUP BYは拡張された使い方が可能です。 SELECTで使用したフィールド名や計算式をGROUP BYには使用しない、 という使い方が可能です。 このことはグループにはどんな値も使用可能ということを表しています。 データの並べ替えやグループ分けに適さない要素を排除することによって より良好なパフォーマンスを得ることが出来ます。 例えば、次のようなクエリでcustomer.nameについてのグループ分けをする必要はありません。

mysql> select order.custid,customer.name,max(payments)
       from order,customer
       where order.custid = customer.custid
       GROUP BY order.custid;

ANSI SQLではcustomer.nameGROUP BYのところに追加する必要があります。 MySQLではANSIモードで動かしていない限り余計な記述の必要はありません。

GROUP BYで省略するフィールドはグループ内でユニークでなくてはいけません。 もしそうでない場合は結果は予想もしないようなものになるでしょう。

たとえユニークでは無くても特定のフィールドの値を得るために MIN()MAX()を使用できるケースもあります。 次の例はsortフィールド中の最小値を持つレコードから 特定のcolumnの値を取り出します。

substr(MIN(concat(rpad(sort,6,' '),column)),7)

3.5.4 The Rows Holding the Group-wise Maximum of a Certain Field」節参照.

MySQLの3.22以前のバージョンをお使いであるか、ANSI SQLに沿っての使用をされる場合は GROUP BYORDER BY内に選択表現を記述してはいけません。 この制限を守った上で作業を進めるにはエイリアスを使用します。

mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
           GROUP BY id,val ORDER BY val;

MySQLのバージョン3.23では次のようにも記述できます。

mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND();


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