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.