Contrib のバックアップ(No.17)




提供ツール

4.1 への移行支援

ALTER char() シェルスクリプト

  • 4.0, 3.X から 4.1 に upgrade したときに、char() を ALTER しないといけない。それを自動でやってくれる shell スクリプト
  • 4.1 に上げたときに一度だけ実行できる。
  • 実行にはalter権限が必要。スクリプトにユーザー名、パスワードを引数で与えて実行
  • GNUツールで固めた環境下では問題なく動作。

体験Knoppix

  • NDBクラスター体験 Knoppix CD イメージ
    http://www.mysql.gr.jp/knoppix/ndb/
    • CD を入れてマシンをブートすれば、NDBクラスターのできあがり。
    • 1台の PC に 2 つの クラスターノード(ndbd)を起動しているので、仮想的に、クラスターの障害実験が簡単にできる。(稼働中に片方の ndbd 落とせば、障害発生と同等)
    • 細かいところは、README を読んでください。
  • 実メモリー512M以上必要。
  • 起動したら、NDBクラスター、mysqld が立ち上がる。
  • ndbd は 2つ起動する。mysqld は1つ。おかげで CPU パワーはじめとするリソースをけっこう食います。
  • cdimg_20050121_1
    • 650MB。
    • MySQL version 4.1.9
    • developper summit 2005 でサンプル出していたイメージです。




mysqlbench

  • pgbench を MySQL 用に移植したものです。
  • mysqlbench はマルチスレッドで複数のクライアントを生成しています(pgbenchと違う点)。
  • 使い方はpgbenchとだいたい同じ。いくつかオプションが違うぐらい。README 読んでください。
  • ソースの検証のご協力をお願いします。


  • 現在のところ、全てのスレッドの状態確認と同期を取るために、回りくどいことをしています。(要検証)
  • そのため、接続を含むテスト結果(includeの表記がある結果)は大きなオーバーヘッドがかかっています。exclude の方で比較してください。
  • Linux の場合、/lib/tls/ の、新しいスレッドの方ではうまく動かないことがあります(要対応)。そのため、リンクは前の LinuxThread の方を使用してください。




パッチ

ver. 4.1 用パッチ

serverとclientを違う標準キャラクタセットに

#ref(): File not found: "mysql-4.1.3-with-client-charset.patch" at page "Contrib"

#ref(): File not found: "mysql-4.1.7-with-client-charset.patch" at page "Contrib"

#ref(): File not found: "mysql-4.1.8-with-client-charset.patch" at page "Contrib"

  • コンパイル時に、server と client を違うキャラクタセットにコンパイルできるようにする
  • configure --with-client-charset= と指定
    • ./configure --with-client-charset=binary --with-charset=ujis の指定が可能
    • ./configure --with-charset=ujis の場合は、クライアントの標準もujisになる。
  • mysqldump がconfigure時のキャラクタセットを無視してutf8固定になるのを止めさせるようにもなる。(utf8固定ではなく、configureで指定したキャラクターセットを標準とするようになる)

パッチ当てた後、aclocal ; autoconf を実行のこと。(configure.in を変更するから)

mysqldump 時に、BLOB の内容を HEX で出力するパッチ

このパッチは、4.1.8 に取り込まれました。4.1.8 以上ではパッチ当ては不要です。

  • BLOB の内容が、0xABCDEF のように出力される。
  • mysqldump --hex-blob --skip-opt でダンプ


上の hex-blob が MySQL のソースに取り込まれたとき、char() binary も hex 出力するように変わっていました。
また、0バイトの BLOB を出力すると、「0x」 だけになり、SQLの構文エラーになるバグも含まれてしまいました。
このパッチは、

  • --hex-blob を指定すると BLOB のみを HEX で出力するように修正
  • --hex-char とすると CHAR() BINARY を HEX 出力するように修正
  • 0バイト時の構文エラーも修正
  • --single-transaction --master-data は REPEATABLE READ じゃないと意味がないので、TRANSACTION ISOLATION LEVEL の指定を付け足した。
  • --csv (same as --fields-terminated-by=',' --fields-optionally-enclosed-by='"' --lines-terminated-by='\r\n') 追加



余計なお世話な文字チェック機能をはずす(すべてのバイト列を CHAR() が受け付ける)パッチ

#ref(): File not found: "mysql-4.1.7-ctype-sjis.patch" at page "Contrib"

#ref(): File not found: "mysql-4.1.7-ctype-ujis.patch.1" at page "Contrib"

4.1.8用は4.1.9にもあたります。

4.1 は文字コードの範囲外のバイト列をchar()にINSERTできない仕様ですが、 このパッチをあてると、全てのバイト列が char() に入るようになります。

(4.0までは全てのバイト列がINSERTできる仕様です)

cp932, eucjpms パッチ

#ref(): File not found: "mysql-4.1.9-jp-all.patch" at page "Contrib"

これは上の -with-client-charset.patch、-ctype.patch を含みます。

cp932, eucjpms キャラクターセットの追加パッチ。5.0からのバックポート。
aclocal、 autoconf の作業が必要。


ver. 4.0 用パッチ

SJIS + BLOB

  • 4.0 の BLOB 型が、sjis バイト列を余計にエスケープしないようにする
  • バイナリファイルをただしく BLOB に入れれるはず。

mysqldump 時に、BLOB の内容を HEX で出力するパッチ

4.0.23 でパッチが取り込まれました。4.0.23以上ではパッチは不要です

  • BLOB の内容が、0xABCDEF のように出力される。
  • mysqldump --hex-blob でダンプ



上の hex-blob が MySQL のソースに取り込まれたとき、char() binary も hex 出力するように変わっていました。
また、0バイトの BLOB を出力すると、「0x」 だけになり、SQLの構文エラーになるバグも含まれてしまいました。
このパッチは、

  • --hex-blob を指定すると BLOB のみを HEX で出力するように修正
  • --hex-char とすると CHAR() BINARY を HEX 出力するように修正
  • 0バイト時の構文エラーも修正
  • --csv (same as --fields-terminated-by=',' --fields-optionally-enclosed-by='"' --lines-terminated-by='\r\n') 追加




PHP4 用 パッチ

MySQL 4.1 への対応、その他。

このパッチは PHP 4.3.10 にもあたります。

このパッチを当てると、PHP4.3.9 の mysql.so は以下の機能を持ちます。

  • php.ini ファイルに以下のキーワードが指定できます。
  • mysql.set_names = キャラクターセット名
  • mysql.load_group = my.cnfグループ名
  • mysql.compress = 0か1
       mysql.set_names = binary
               サーバーに接続したら、すぐに、「SET NAMES binary」 を実行する。
               なにも指定していないときは、SET 文は実行しない。
               指定できるキャラクターセット名は、MySQL の指定に従う。(ujis, sjis, binary, utf8, ...)
       mysql.load_group = php
               my.cnf ファイルの中の [php] グループを読み込む。
               なにも指定していないときは、なにも読み込まない。
       mysql.compress = 1
               通信を gzip 圧縮する。0 のときは圧縮しない。
  • new function:
    • string mysql_hex_string(string);
             与えられた文字列を 16進数表示します。
             ex.
             echo mysql_hex_string("あいうえお");
      この関数は、MySQL 4.0.22 以上の 4.0 および、4.1.7 以上で使用できます。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS