Powered by SmartDoc

MySQL for Win32 memo

2000年9月9日
at
追記:PHP3/apach1.3.2/mysql3.23.19と古いですがななめ後に本家のhttp://dev.mysql.com/doc/ を読むことをおすすめします。詳細内容は参考文献を参照してください。

目次

MySQLについて

MySQLとは

MySQLは、マルチユーザ、マルチスレッドで動作するSQL問合言語をそなえたRDBMSです。高速、簡単なのをコンセプトにしています。また、DBMSでの管理作業等はほとんど意識することがありません。Windowsユーザでは、MicrosoftOfficeパーソナルを利用されている方等がExcelで管理するのは面倒な、ちょっとしたデータを管理したい場合等に向いていると考えます。

MySQLのライセンス

MySQLはversion 3.23.19以降はGNU General Public License (GPL)とのデュアルライセンスになりました。GPL下で配布が難しい場合でも日本では、ソフトエイジェンシー殿よりMySQLライセンスを購入することによりバイナリ配布等が認められます。ライセンスについてはソフトエイジェンシー殿のページに詳しく記述されています。

MySQLの日本語

ソフトエイジェンシー殿のページに日本語WINDOWSで動作するクライアント、ODBCについて記述されているので必要なツールはインストールしておいてください。ここでは記述していません。また、Windows用の3.23.19から3.23.21のバイナリはマルチバイトに対応していないそうです。

MySQL設定

MY.ini

c:\mysql\winmysqladmin.exeを起動すると、my.ini setupにて編集が行えます。変更後は、Save Modificationを必ず行ってください。

[mysqld]に

を追加しています。

(Sift_JISなerrmsg.sysを作成するとエラー表示も見えるようになりますが、標準状態ではcommand.comで使用する場合は、languageは設定しない方がよいかもしれません。)

MY.CNF

MY.CNFは絶対に必要なファイルではありませんが、下記な場合には必ず必要です。

変更した場合は、my.cnfの[mysqld]セクションでbasedirを設定する必要があります。

my.cnfで注意する点は、

くらいかと思います。

my.cnfのデフォルト設定
# Example mysql config file.
# Copy this file to c:\my.cnf to set global options
# 
# One can use all long options that the program supports.
# Run the program with --help to get a list of available options

# This will be passed to all mysql clients
[client]
#password=my_password
port=3306
#socket=MySQL

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# The MySQL server
[mysqld]
port=3306
#socket=MySQL
skip-locking
default-character-set=latin1
set-variable = key_buffer=16M
set-variable = max_allowed_packet=1M
set-variable = thread_stack=128K
set-variable = flush_time=1800

# Uncomment the following row if you move the MySQL distribution to another
# location
#basedir = d:/mysql/
[mysqldump]
quick
set-variable = max_allowed_packet=16M

[mysql]
no-auto-rehash

[isamchk]
set-variable= key=16M

[client_fltk]
help_file= c:\mysql\sql_client\MySQL.help
client_file= c:\mysql\MySQL.options
history_length=20
database = test
queries_root= c:\mysql\queries
last_database_file= c:\mysql\lastdb

MySQLの起動

Windowsでは、c:\mysql\winmysqladmin.exeを使用するのが簡単です。NTではサービスに登録することもできます。

mysqladmin.exe startでも開始することができます。サービスに登録した場合は、net start mysqlになります。

MySQLの停止

Windowsでは、c:\mysql\winmysqladmin.exeを使用するのが簡単です。NTではサービスに登録することもできます。

mysqladmin.exe shutdownでも停止することができます。サービスに登録した場合は、net stop mysqlになります。

MySQLの状態を見る

Windowsでは、c:\mysql\winmysqladmin.exeを使用するのが簡単です。接続情報、環境変数等みることができます。

mysqladmin.exe version status proc等でコマンドラインより見ることもできます。

MySQLに自分のDBを作成(mysql.exeを使ってみる)

mysql.exeとは

mysql.exeでMySQLへの操作(DB、テーブルの作成、更新、参照、削除等)が行えるコマンドです。

mysql> select version();
+--------------+
| version()    |
+--------------+
| 3.23.22-beta |
+--------------+
1 row in set (0.05 sec)

mysql> show databases;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
3 rows in set (0.00 sec)

mysql>CREATE DATABASE hoge_db;
Query OK, 1 rows affected(0.06 sec)

mysql> show databases;
+----------+
| Database |
+----------+
| hoge_db  |
| mysql    |
| test     |
+----------+
3 rows in set (0.00 sec)

mysql>GRANT ALL ON hoge_db.* TO hogeuser IDENTIFIED BY "hogesecret";
Query OK, 0 rows affected(0.06 sec)


mysql>USE hoge_db;
Database changed
mysql>DROP TABLE IF EXISTS hoge;
Query OK, 0 rows affected(0.06 sec)

mysql>CREATE TABLE hoge
    ->(
    ->   id int(10) unsigned DEFAULT '0' NOT NULL,
    ->   name char(50),
    ->   PRIMARY KEY (id)
    ->);
Query OK, 0 rows affected(0.06 sec)

mysql> desc hoge;
+-------+------------------+------+-----+---------+-------+---------------------------------+
| Field | Type             | Null | Key | Default | Extra | Privileges                      |
+-------+------------------+------+-----+---------+-------+---------------------------------+
| id    | int(10) unsigned |      | PRI | 0       |       | select,insert,update,references |
| name  | char(50)         | YES  |     | NULL    |       | select,insert,update,references |
+-------+------------------+------+-----+---------+-------+---------------------------------+
2 rows in set (0.00 sec)

mysql>DELETE FROM hoge;
Query OK, 0 rows affected(0.00 sec)

mysql> insert into hoge values(1,'テスト');
Query OK, 1 row affected (0.00 sec)

mysql> insert into hoge values(2,'表');
Query OK, 1 row affected (0.00 sec)

mysql> select * from hoge;
+----+----------+
| id | name     |
+----+----------+
|  1 | テスト      |
|  2 | 表示        |
+----+----------+
3 rows in set (0.05 sec)

mysql> LOAD DATA LOCAL INFILE "hoge.txt" INTO TABLE hoge;
Query OK, 4 rows affected (0.00 sec)
レコード数: 4  削除: 0  Skipped: 0  Warnings: 0

mysql> select * from hoge;
+----+----------+
| id | name     |
+----+----------+
|  1 | テスト      |
|  2 | 表示        |
| 10 | 北海道      |
| 12 | 青森        |
| 13 | 岩手        |
| 14 | 長野        |
+----+----------+
7 rows in set (0.00 sec)

mysql>quit
bye
hoge.txtの中身(TAB区切り)
10  北海道
12  青森
13  岩手
14  長野

ワンラインmysql.exeでコマンド実行

mysql.exe -e

C:\tmp>mysql -e "select host,db,user from db" mysql
+------+---------+-----------+
| host | db      | user      |
+------+---------+-----------+
| %    | hoge_db | hogeuser  |
| %    | test%   |           |
+------+---------+-----------+

mysql.exeをバッチ形式で使用

DBを作成するため、下記内容を記述したcreatedb.sqlを作成する。

CREATE DATABASE hoge_db;

mysql.exeに記述したSQLを流し込むのは下記方法になります。

DB作成
c:\>c:\mysql\bin\mysql.exe < c:\mysql\sql\createdb.sql

これ以降、mysql.exe hoge_dbと指定すると処理対象がhoge_dbにできます。

C:\tmp>mysql.exe hoge_db < createtb.sql

バッチコマンドで作成しておくと環境を構築が楽になります。mysqldump.exeの結果を流しこむ場合もこの方法になります。

データベースのバックアップ

mysqldump.exeを使用してバックアップを行います。

バックアップ
C:\tmp>>mysqldump hoge_db > hoge_db.bak
リストア
C:\tmp>>mysql hoge_db < hoge_db.bak

--tabオプションをつけるとSQL文と、データを分離してファイルができます。その場合は、SQL文の方はmysql.exe、データは、mysqlimport.exeを使用します。

--optオプションでよく使用するオプションが有効になります。(スタンドアロンで使用している場合は付けても付けなくてもいいかも)

MySQLの状態を見る(mysqladmin.exeを使ってみる)

mysqladmin.exeについて

c:\mysql\bin\mysqladmin.exeのオプションを指定することによりMySQLでの管理情報をみることができます。下記内容をみることができます。

mysqladmin --helpで出力されるオプション
Where command is a one or more of: (Commands may be shortened)
  create databasename   Create a new database
  drop databasename Delete a database and all its tables
  extended-status       Gives an extended status message from the server
  flush-hosts           Flush all cached hosts
  flush-logs            Flush all logs
  flush-status      Clear status variables
  flush-tables          Flush all tables
  flush-threads         Flush the thread cache
  flush-privileges      Reload grant tables (same as reload)
  kill id,id,...    Kill mysql threads
  password new-password Change old password to new-password
  ping          Check if mysqld is alive
  processlist       Show list of active threads in server
  reload        Reload grant tables
  refresh       Flush all tables and close and open logfiles
  shutdown      Take server down
  status        Gives a short status message from the server
  variables             Prints variables available
  version       Get version info from server

MySQLへの移行

Microsoft-Accessからの移行について

MySQLのContribからaccess_to_mysql.txtを使用することにより、MS-Accessで作成したテーブル情報を元にcreate tableを作成してくれます。access2000の場合は、エラーのでる型をobject型に変更すれば動作しました。出力されたSQLを手直しすれば使用できると思います。

MySQLをツールより利用

JDBC(Java)

MySQL用のJDBCドライバをMM MySQL JDBC DRIVERSより入手する。

DBI+DBD-MySQLインタフェース(Perl)

MySQL用のをDBIをActiveStateのPPMを使用して入手する。Proxy設定が必要な場合は、環境変数HTTP_PROXYに設定する。

ppmを使用した場合のインストール
C:\>set HTTP_PROXY=http://proxy_server_name:80/

C:\>ppm
PPM interactive shell (2.0) - type 'help' for available commands.
PPM> install DBI
Install package 'DBI?' (y/N): y
Retrieving package 'DBI'...
Writing C:\Perl\site\lib\auto\DBI\.packlist
PPM> install DBD-MySQL
Install package 'DBD-MySQL?' (y/N): y
Retrieving package 'DBD-MySQL'...
Installing C:\Perl\site\lib\auto\DBD\mysql\mysql.bs
Installing C:\Perl\site\lib\auto\DBD\mysql\mysql.dll
Installing C:\Perl\site\lib\auto\DBD\mysql\mysql.exp
Installing C:\Perl\site\lib\auto\DBD\mysql\mysql.lib
Installing C:\Perl\site\lib\Mysql.pm
Installing C:\Perl\site\lib\Mysql\Statement.pm
Installing C:\Perl\site\lib\DBD\mysql.pm
Installing C:\Perl\site\lib\Bundle\DBD\mysql.pm
Installing C:\Perl\bin\dbimon
Installing C:\Perl\bin\dbimon.bat
Writing C:\Perl\site\lib\auto\DBD\Mysql\.packlist
PPM> quit
Quit!

C:\>



動作確認は、ftp://ftp.SoftAgency.co.jp/mysql/japan/perl/db.plを使用してみる。

MySQL-Rubyインタフェース(ruby)

MySQL用のRubyインタフェースをMySQL - Ruby インタフェースより入手する。

MySQLをApacheより利用

Apache for Win32のインストール

www.apache.orgよりwindows32用のバイナリをテンポラリにダウンロードします。デフォルトの設定(C:\Program Files\Apache Group\Apache\へインストール)でインストールしました。

apacheのインストール
C:\temp\>apache_1_3_12_win32.exe
C:\temp\>

PHP for Win32のインストール

www.php.netよりwindows32用のバイナリをテンポラリにダウンロードします。zip形式で固められているので適当なツールでテンポラリ領域に解凍します(今回はc:\temp\php3に解凍しました。)。まずphp3.ini-distをWINDOWSのディレクトリにphp3.iniという名前でコピーします。その後で解凍した内容をApache for Win32をインストールしたディレクトリにphp3というディレクトリを作成してテンポラリーより移動させます。php3ディレクトリにある。

php3のインストール
C:\temp\php-3.0.16-win32>copy php3.ini-dist c:\windows\php3.ini
C:\temp\php-3.0.16-win32>mkdir "C:\Program Files\Apache Group\Apache\php3"
C:\temp\php-3.0.16-win32>move *.* "C:\Program Files\Apache Group\Apache\php3"

コピー先のphp3.iniの下記内容を変更しました。

php3.iniで変更した場所
doc_root        =   "C:/Program Files/Apache Group/Apache/htdocs/"
extension_dir   =   "C:/Program Files/Apache Group/Apache/php3/"

;Windows Extensions
extension=php3_mysql.dll

Apache for Win32にPHP3設定を追加する。

apacheのコンフィギュレーションファイルhttp.confへ下記を追加もしくは、コメントを外す。この設定時、phtml拡張子時、php3として処理を行われる。

http.confに追加、コメントを外す
ScriptAlias /php3/ "C:/Program Files/Apache Group/Apache/php3/"

AddType application/x-httpd-php3 .phtml
AddType application/x-httpd-php3-source .phps
Action application/x-httpd-php3 "/php3/php.exe"

本当に使う場合は、mail関係も設定する方がよい。

Apache for Win32でPHP3動作を確認する。

PHP3の動作と設定確認のため下記index.phtmlを作成してapacheのドキュメントディレクトリにおいておく。

index.phtml
<?
    phpinfo();
?>

PHP3よりMySQLへのアクセスを確認する。

mysql.phtml(エラー処理なし)
<?
    mysql_connect("localhost:3306");
    mysql_select_db("hoge_db");
    $tablename = "hoge";
    $result = mysql_query("select * from $tablename");
    $fields = mysql_num_fields($result);
    $rows = mysql_num_rows($result);
    $table = mysql_field_table($result,0);
    echo "<html>";
    echo "<head>";
    echo "<title>" . $table . " Results</title>";
    echo '<link rel="stylesheet" type="text/css" href="table-data.css">';
    echo "</head>";
    echo "Results:" . $rows . "<br>";

    echo '<table class="data"><thead><tr>';
    $i = 0;
    while( $i < $fields ) {
        $name = mysql_field_name($result,$i);
        echo "<th>" . $name . "</th>";
        $i++;
    }
    echo "</tr></thead><tbody>";

    while(($data=mysql_fetch_row($result))){
        echo "<tr>";
        $i = 0;
        while( $i < $fields ) {
            echo "<td>" . $data[$i] . "</td>";
            $i++;
        }
        echo "</tr>";
    }

    echo "</tbody></table>";

    mysql_close();
?>
table-data.css(SmartDocのcss)
table.data {
  margin-top: 10pt;
  margin-bottom: 10pt;
  background-color: green;
}

table.data caption {
  background-color: khaki;
  font-weight: bold;
}

table.data th {
  color: yellow;
  background-color: lightseagreen;
}

table.data td {
  background-color: antiquewhite;
}

table.data td.key {
  background-color: salmon;
  font-weight: bold;
}

実行された結果

PHP3よりMySQLへのアクセスを確認する。(検索条件をいれて検索する)

実践MySQLのサンプルを動作させてみる。

国際化関数部分をコメントにして、JISにしている部分をSift_JISにする。

これから

参考文献について

参考文献

  1. MySQL. MySQL付属のマニュアル. MySQL, 2000
  2. RandyJayYarger,etc. MySQL&mSQL日本語版. O'REILLY, 2000
  3. 堀田,etc. PHP徹底攻略. SOFTBANK, 1999
  4. softagency. 実践MySQL. softagency, 2000