一般に、以前の 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.

