MySQL の バイナリ配布プログラムをインストールする際は以下のツールが必要になります:
gunzip。ソースを解凍するのに必要です。
tar。これもソースを解凍するのに必要です。
GNU tarの動作は確認されています。Sun tarの使用には問題があります。
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 スクリプトを
使用できます。使用の際はDBIとMsql-Mysql-modulesの
Perlモジュールをインストールする必要があります。
より詳細な情報をここから示します。
バイナリ配布のプログラムをインストールする際は以下に従ってください。 その後、 「2.4 インストール後の設定とテスト」節に進んでインストールの終了処理と動作試験を行ってください。
rootとしてインストールを行う必要があります。
tar 形式で行われており、
`mysql-VERSION-OS.tar.gz' のような形式の名前が付けられています。
ここで、VERSION はバージョン番号(例えば 3.21.15)を
OS はプラットホームとなるOS(例えば pc-linux-gnu-i586)を示します。
-max という表示があるものがありますが、
これはこのプログラムが transaction-safe 機能やその他の機能をサポート
していることを示しています。 「4.7.5 mysqld-max, An extended mysqld server」節参照。
全てのバイナリプログラムは同じソースファイルからmakeされたものです。
mysqldが動作するためのユーザとグループを作成してください。
shell> groupadd mysql shell> useradd -g mysql mysqlこれらのコマンドは
mysql グループと mysql ユーザを作成するものです。
useradd や groupadd というコマンドもありますが、
これらは使用プラットホームによって使い方が若干異なります。
また、adduser や addgroup と呼ばれる場合もあります。
mysql 以外のユーザやグループでも使用できます。
shell> cd /usr/local
shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf - shell> ln -s mysql-VERSION-OS mysql最初のコマンドで `mysql-VERSION-OS' という名前のディレクトリを作成します。 次のコマンドはそのディレクトリへのシンボリックリンクを作成し、 ユーザに単純な `/usr/local/mysql' という名前での利用を可能にします。
shell> cd mysql複数のファイルが
mysql 以下のディレクトリに展開されているのが
おわかりになると思います。 中でもインストールに重要な役目を果たすものは
`bin' と `scripts' のサブディレクトリにあります。
PATH 変数に追加する必要のあるものが置いてあります。
「H Environment Variables」節参照.
mysql_install_db という mysql への
アクセス管理を行うデータベースを初期化するためのスクリプトが置いてあります。
mysqlaccessを使う必要があり、なおかつ、標準ディレクトリとは異なる場所に
インストールを行いたい場合は、mysqlaccess が mysqlクライアントを
起動できるように環境設定を行う必要があります。
`bin/mysqlaccess'の18行目位にある以下のような行を変更してください。
$MYSQL = '/usr/local/bin/mysql'; # path to mysql executableこれを実際に
mysql がインストールされているディレクトリに変更してください。
これをしないと mysqlaccess を使う際に Broken pipe エラーが発生します。
shell> scripts/mysql_install_db使用する MySQL のバージョンが 3.22.10 より古い場合はこの操作をする時に MySQL サーバが 立ち上がっている必要がありましたが、現在のバージョンでは必要ありません。
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 になります。
DBI、DBDのインストールが必要なら 「M.2 Perl Installation Comments」節の項をご覧下さい。
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 インストール後の設定とテスト」節参照.
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-Dumper、DBI、及び、Msql-Mysql-modulesを入手してインストールしてください。
インストール手順は以下に示す通りです。なお、ここではData-Dumperのみの手順が示されていますが、
他のモジュールについても同様な手順でインストールできます。
shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -This command creates a directory named `Data-Dumper-VERSION'.
shell> cd Data-Dumper-VERSION
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.という見出しの文書をご覧下さい。
DBDモジュールとActiveState Perlをインストールするには以下の手順で行います。
set HTTP_proxy=my.proxy.com:3128
C:\> c:\perl\bin\ppm.pl
DBIがインストールされていなければインストールします。
ppm> install DBI
install ftp://ftp.de.uu.net/pub/CPAN/authors/id/JWIED/DBD-mysql-1.2212.x86.ppd
以上でActiveState Perlのバージョン5.6がとりあえず動くことになります。
もしも動作しない場合は次のように MyODBC ドライバーをインストールして ODBC経由でMySQLサーバに接続する必要があります。
use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") ||
die "Got error $DBI::errstr when connecting to $dsn\n";
MySQL Perlの配布パッケージにはDBI、DBD:MySQL、そして、DBD:ODBCが含まれています。
C:で配布パッケージを解凍してください。`C:\PERL'に必要なファイルが現れます。
perl -vと入力してperlの起動をチェックしてみましょう。
DBI/DBD InterfacePerl が "`../mysql/mysql.so'を見つけられない" というメッセージを出した場合、 それは多分 Perl のシェアードライブラリ `libmysqlclient.so' を見つけることが出来ないのでしょう。
これは以下のような方法で解決できます。
Msql-Mysql-modulesは通常、perl Makefile.PL とコンパイルされますが、
perl Makefile.PL -static -configとコンパイルしてください。
libmysqlclient.soをシェアードライブラリが置いてあるディレクトリにコピーしてください
(通常は`/usr/lib'や`/lib'といったディレクトリになるはずです)。
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 を
リンクコマンドに追加してください(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 モジュールを使用する際は
DBIやDBD-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で必要なコマンドを再確認することができます。
GROUP BY Clauses
GROUP BY節を含まない文でグループ関数を使用すると
全てのレコードについてグループされたものとみなされます。
COUNT(expr)
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.nameをGROUP 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 BYとORDER 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.