一般に、以前の MySQL バージョンから 4.0 にアップグレードする場合は、以下を実行する必要があります。
アップグレード後に、権限テーブルを更新して新しい特権と機能を追加する。テーブルの更新は、mysql_fix_privilege_tables
スクリプトを使用して行う。手順については、項2.5.6. 「権限テーブルのアップグレード」
を参照。
廃止予定のオプションを使用しないように MySQL 起動スクリプトまたはオプション設定ファイルを編集する。廃止予定のオプションについては、このセクションの後半で説明する。
mysql_convert_table_format
スクリプトを使用して、旧バージョンの
ISAM
ファイルを
MyISAM
ファイルに変換する(このスクリプトは、Perl
スクリプトであるため、DBI
をインストールする必要がある)。特定のデータベース内のテーブルを変換するには、以下のコマンドを使用する。
shell> mysql_convert_table_format データベース名
注意:
このコマンドは、データベース内のすべてのテーブルが
ISAM
テーブルまたは
MyISAM
テーブルである場合にのみ使用する。他の型のテーブルを
MyISAM
に変換しないようにするには、コマンドラインのデータベース名の後ろに
ISAM
テーブルの名前を明示的に列記する。
他に、テーブルを MyISAM
に変換するための ALTER TABLE table_name
TYPE=MyISAM
ステートメントを各
ISAM
テーブルに対して発行することもできる。
特定のテーブルのテーブル型を確認するには、以下のステートメントを使用する。
mysql> SHOW TABLE STATUS LIKE 'tbl_name';
共有ライブラリ(Perl DBD-mysql
モードなど)を使用する MySQL
クライアントがないことを確認する。libmysqlclient.so
で使用されるデータ構造が変更されたので、そのようなクライアントがある場合は、それらのクライアントを再コンパイルする必要がある。
同じことは、Python MySQLdb
モジュールなどのその他の MySQL
インタフェースについても当てはまる。
上記の処理を行わなくても MySQL 4.0
は動作しますが、新しいセキュリティ特権を使用できないため、後で
MySQL 4.1
以降にアップグレードするときに問題が発生することがあります。ISAM
ファイル形式は、MySQL 4.0
では引き続き機能しますが、廃止予定であり、MySQL
4.1
では無効化されます(デフォルトではコンパイルされない)。代わりに、MyISAM
テーブルが使用されます。
旧バージョンのクライアントは、バージョン 4.0 サーバと支障なく連携して動作します。
上記の処理を行った場合でも、MySQL 4.0
シリーズで問題が発生したときは、MySQL 3.23.52
以降にダウングレードできます。その場合、mysqldump
を使用して、フルテキストインデックスを使用するすべてのテーブルをダンプし、ダンプファイルを
3.23 サーバに再ロードする必要があります。
これは、4.0
ではフルテキストインデックス作成に新しい形式が使用されるためです。
以下では、バージョン 4.0 にアップグレードするときに注意する必要のある点についてさらに詳しく説明します。
MySQL 4.0 の mysql.user
テーブルには多数の新しい権限がある。 See
項4.4.1. 「GRANT
および REVOKE
の構文」。
これらの新しい権限を機能させるためには、権限テーブルを更新する必要がある。
更新の手順については、項2.5.6. 「権限テーブルのアップグレード」
を参照。
権限テーブルを更新するまでは、すべてのユーザが
SHOW DATABASES
権限、CREATE
TEMPORARY TABLES
権限、および LOCK
TABLES
権限を持つ。SUPER
権限と EXECUTE
権限は、PROCESS
から自身の値を取得する。 REPLICATION
SLAVE
権限と REPLICATION
CLIENT
権限は、FILE
から自身の値を取得する。
新しいユーザを作成するスクリプトがある場合は、新しい権限を使用するようにそれらのスクリプトを変更する必要がある。それらのスクリプトで
GRANT
コマンドを使用していない場合は、権限テーブルを直接変更する代わりに
GRANT
を使用するようにスクリプトを変更するよい機会である。
4.0.2 以降では、オプション
--safe-show-database
は廃止され、何の動作もしない。 See
項4.3.3. 「セキュリティ関連の mysqld
スタートアップオプション」。
バージョン 4.0.2 で、新しいユーザに対して
Access denied
エラーが発生した場合は、これまでは必要のなかったいくつかの新しい権限が必要であるかどうかをチェックする。特に、新しいスレーブに対しては
FILE
の代わりに REPLICATION
SLAVE
が必要。
safe_mysqld
は、mysqld_safe
という名前に変更された。下位互換性のために、しばらくの間、バイナリディストリビューションには
mysqld_safe
へのシンボリックリンクとして
safe_mysqld
が含められている。
InnoDB
がバイナリディストリビューションにデフォルトで組み込まれるようになった。
MySQL
をソースからビルドした場合は、デフォルトで
InnoDB が組み込まれる。 InnoDB
が有効になっているサーバを起動する場合、InnoDB
を使用せずにメモリを節約したいときは、--skip-innodb
サーバ起動オプションを使用する。InnoDB
を組み込まないで MySQL
をコンパイルするには、--without-innodb
オプションを指定して configure
を実行する。
起動パラメータ
myisam_max_extra_sort_file_size
および
myisam_max_extra_sort_file_size
は、バイト単位で指定されるようになった(4.0.3
より前のバージョンではメガバイト単位で指定されていた)。
MyISAM
/ISAM
ファイルの外部システムロックは、デフォルトでオフに設定されるようになった。これは、--external-locking
を実行してオンにすることができる(ただし、通常はオンにする必要はない)。
以下の起動変数および起動オプションの名前が変更された。
変更前の名前 | 変更後の名前 |
myisam_bulk_insert_tree_size |
bulk_insert_buffer_size |
query_cache_startup_type |
query_cache_type |
record_buffer |
read_buffer_size |
record_rnd_buffer |
read_rnd_buffer_size |
sort_buffer |
sort_buffer_size |
warnings |
log-warnings |
--err-log |
--log-error (mysqld_safe 用) |
record_buffer
、sort_buffer
、および
warnings
の各起動オプションは、MySQL 4.0
でも機能するが、廃止予定である。
以下の SQL 変数の名前が変更された。
変更前の名前 | 変更後の名前 |
SQL_BIG_TABLES |
BIG_TABLES |
SQL_LOW_PRIORITY_UPDATES |
LOW_PRIORITY_UPDATES |
SQL_MAX_JOIN_SIZE |
MAX_JOIN_SIZE |
SQL_QUERY_CACHE_TYPE |
QUERY_CACHE_TYPE |
変更前の名前は、MySQL 4.0 でも機能するが、廃止予定である。
SET SQL_SLAVE_SKIP_COUNTER=#
の代わりに SET GLOBAL
SQL_SLAVE_SKIP_COUNTER=#
を使用する必要がある。
mysqld
起動オプション
--skip-locking
および
--enable-locking
は、それぞれ、--skip-external-locking
および --external-locking
という名前に変更された。
SHOW MASTER STATUS
は、バイナリログが有効になっていない場合は空のセットを返すようになった。
SHOW SLAVE STATUS
は、スレーブが初期化されていない場合は空のセットを返すようになった。
mysqld
の --temp-pool
オプションはデフォルトで有効になるようになった。このオプションを使用すると、一部のオペレーティングシステム(最も顕著なのは
Linux)でパフォーマンスが向上するためである。
DOUBLE
カラムと
FLOAT
カラムは、UNSIGNED
フラグを受け付けるようになった(以前は、これらのカラムでは
UNSIGNED
は無視されていた)。
MySQL 4.0.11 以降では、ORDER BY col_name
DESC
は、NULL
値を最後にする。3.23 と 4.0.11 より前の 4.0
バージョンでは、場合によって異なっていた。
SHOW INDEX
のカラムは 3.23 よりも
2 つ増えている(Null
と
Index_type
)。
CHECK
、LOCALTIME
、および
LOCALTIMESTAMP
は予約語になった。
ビットごとの演算子(|
、&
、<<
、>>
、および
~
)の結果は、符号なしになった。符号付きの結果が必要なコンテキストでこれらを使用すると、問題を引き起こすことがある。
See 項6.3.5. 「キャスト関数」。
注意:整数値の減算でどちらか一方の整数値が
UNSIGNED
型の場合、結果の値は符号なしになる。つまり、MySQL
4.0
にアップグレードする前に、アプリケーションをチェックして、符号なしのエンティティから値を差し引いて、負の答えを得たい場合や、整数カラムから符号なしの値を差し引く場合がないかを確認する。mysqld
を起動するときに
--sql-mode=NO_UNSIGNED_SUBTRACTION
オプションを使用すると、この動作を無効にすることができる。
See 項6.3.5. 「キャスト関数」。
テーブルで MATCH ... AGAINST (... IN BOOLEAN
MODE)
を使用するには、REPAIR
TABLE table_name USE_FRM
でテーブルを再ビルドする必要がある。
LOCATE()
と INSTR()
は、いずれかの引数がバイナリ文字列である場合にケース依存となる。それ以外の場合は、ケース非依存である。
STRCMP()
は、比較を実行するときに現在のキャラクタセットを使用するようになった。つまり、デフォルトの比較動作はケース非依存になった。
HEX(string)
は、string
で 16
進数に変換された文字を返す。数値を 16
進数に変換したい場合は、必ず、数値引数を指定して
HEX()
を呼び出す。
3.23 では、INSERT INTO ... SELECT
は、常に IGNORE
が有効になっていた。 4.0.1
では、IGNORE
が指定されていない限り、MySQL
はエラーが発生するとデフォルトで停止する(そして、場合によってロールバックする)。
CFLAGS=-DUSE_OLD_FUNCTIONS
を指定して MySQL
をコンパイルしていない限り、旧バージョンの
C API 関数
mysql_drop_db()
、mysql_create_db()
、および
mysql_connect()
はサポートされなくなった。ただし、代わりに新しい
4.0 API
を使用するようにクライアントプログラムを変更する方が望ましい。
MYSQL_FIELD
構造体の
length
および
max_length
は、unsigned
int
から unsigned long
に変更された。関数の printf()
クラスの引数としてこれらを使用した場合に、警告メッセージが生成されることがある以外は、この変更によって問題が発生することはない。
テーブルからすべてのレコードを削除する場合や、削除されたレコードの数のカウントを取得する必要のない場合は、TRUNCATE
TABLE
を使用する必要がある(4.0 では
DELETE FROM table_name
がレコードカウントを返し、TRUNCATE
TABLE
は速度が上がった)。
TRUNCATE TABLE
または DROP
DATABASE
を実行するときに、アクティブな LOCK
TABLES
またはトランザクションがあると、エラーが発生する。
整数を使用して BIGINT
カラムに値を格納する必要がある(MySQL 3.23
では文字列を使用していた)。引き続き文字列を使用することもできるが、整数を使用する方が効率的である。
SHOW OPEN TABLES
の形式が変更された。
マルチスレッド化されたクライアントは、mysql_thread_init()
および mysql_thread_end()
を使用する必要がある。 See
項11.1.14. 「スレッドクライアントの作成方法」。
Perl DBD::mysql
モジュールを再コンパイルする場合は、DBD-mysql
バージョン 1.2218
以降を入手する必要がある。これは、1.2218
より前のバージョンの DBD
モジュールでは、廃止になった
mysql_drop_db()
コールが使用されるためである。
バージョン 2.1022 以降が推奨される。
4.0 では、RAND(seed)
は 3.23
の場合とは異なる乱数系を返す。この変更は、RAND(seed)
と RAND(seed+1)
をさらに明確に区別するために行われた。
IFNULL(A,B)
によって返されるデフォルトの型は、A
および B
の型のうちで、より
'総称的な'
方が設定されるようになった(総称性の度合いの高い順に並べると、文字列、REAL
、INTEGER
となる)。
Windows 上で MySQL サーバを実行する場合は、項2.5.8. 「Windows 上での MySQL のアップグレード」 も参照してください。レプリケーションを使用する場合は、項4.11.2. 「レプリケーション実装の概要」 も参照してください。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.