MySQL 8.0 リファレンスマニュアル


2.10.1 データディレクトリの初期化

MySQL のインストール後、mysql システムスキーマのテーブルを含め、データディレクトリを初期化する必要があります:

  • 一部の MySQL インストール方法では、セクション2.10「インストール後のセットアップとテスト」 で説明されているように、データディレクトリの初期化は自動的に行われます。

  • その他のインストール方法では、データディレクトリを手動で初期化する必要があります。 これには、Unix および Unix に似たシステムでの汎用バイナリおよびソースディストリビューションからのインストール、および Windows での ZIP アーカイブパッケージからのインストールが含まれます。

このセクションでは、データディレクトリの初期化が自動ではない MySQL のインストール方法で、データディレクトリを手動で初期化する方法について説明します。 サーバーがアクセス可能で適切に動作しているかどうかをテストできるようにする推奨コマンドについては、セクション2.10.3「サーバーのテスト」 を参照してください。

注記

MySQL 8.0 では、デフォルトの認証プラグインが mysql_native_password から caching_sha2_password に変更され、'root'@'localhost'管理アカウントはデフォルトで caching_sha2_password を使用します。 root アカウントで以前のデフォルトの認証プラグイン (mysql_native_password) を使用する場合は、caching_sha2_password および root 管理アカウント を参照してください。

データディレクトリの初期化の概要

ここに示す例では、サーバーは mysql ログインアカウントのユーザー ID で実行することを目的としています。 アカウントが存在しない場合は作成するか (mysql ユーザーおよびグループの作成 を参照)、サーバーの実行に使用する予定の別の既存のログインアカウントの名前を置き換えます。

  1. 場所を MySQL インストールの最上位ディレクトリ (通常は/usr/local/mysql) に変更します (必要に応じてシステムのパス名を調整します):

    cd /usr/local/mysql

    このディレクトリ内には、サーバーを含む bin サブディレクトリ、クライアントプログラムおよびユーティリティプログラムなど、複数のファイルおよびサブディレクトリがあります。

  2. secure_file_priv システム変数は、インポートおよびエクスポート操作を特定のディレクトリに制限します。 その変数の値として場所を指定できるディレクトリを作成します:

    mkdir mysql-files

    ディレクトリユーザーおよびグループの所有権を mysql ユーザーおよび mysql グループに付与し、ディレクトリ権限を適切に設定します:

    chown mysql:mysql mysql-files
    chmod 750 mysql-files
  3. サーバーを使用してデータディレクトリを初期化します。これには、ユーザーがサーバーへの接続を許可される方法を決定する初期 MySQL 付与テーブルを含む mysql スキーマが含まれます。 例:

    bin/mysqld --initialize --user=mysql

    コマンドに関する重要な情報、特に使用するコマンドオプションについては、データディレクトリの初期化手順 を参照してください。 サーバーが初期化を実行する方法の詳細は、データディレクトリの初期化中のサーバーアクション を参照してください。

    通常、データディレクトリの初期化は、最初に MySQL をインストールした後にのみ行う必要があります。 (既存のインストールへのアップグレードの場合は、かわりにアップグレード手順を実行します。セクション2.11「MySQL のアップグレード」 を参照してください。) ただし、データディレクトリを初期化するコマンドは既存の mysql スキーマテーブルを上書きしないため、どのような状況でも安全に実行できます。

  4. セキュアな接続の自動サポートを使用してサーバーをデプロイする場合は、mysql_ssl_rsa_setup ユーティリティを使用してデフォルトの SSL および RSA ファイルを作成します:

    bin/mysql_ssl_rsa_setup

    詳細は、セクション4.4.3「mysql_ssl_rsa_setup — SSL/RSA ファイルの作成」を参照してください。

  5. オプションファイルがない場合、サーバーはデフォルト設定で起動します。 (セクション5.1.2「サーバー構成のデフォルト値」を参照してください。) MySQL サーバーが起動時に使用するオプションを明示的に指定するには、/etc/my.cnf/etc/mysql/my.cnf などのオプションファイルに配置します。 (セクション4.2.2.2「オプションファイルの使用」を参照してください。) たとえば、オプションファイルを使用して secure_file_priv システム変数を設定できます。

  6. システムブート時に手動で介入せずに MySQL が起動するように配置するには、セクション2.10.5「MySQL を自動的に起動および停止する」 を参照してください。

  7. データディレクトリの初期化では、mysql スキーマにタイムゾーンテーブルが作成されますが、タイムゾーンテーブルは移入されません。 そのためには、セクション5.1.15「MySQL Server でのタイムゾーンのサポート」を参照してください。

データディレクトリの初期化手順

場所を MySQL インストールの最上位ディレクトリ (通常は/usr/local/mysql) に変更します (必要に応じてシステムのパス名を調整します):

cd /usr/local/mysql

データディレクトリを初期化するには、サーバーで'root'@'localhost'アカウントのランダムな初期パスワードを生成するか、パスワードなしでそのアカウントを作成するかに応じて、--initialize または --initialize-insecure オプションを指定して mysqld を起動します:

  • 「デフォルトで保護」インストールに --initialize を使用します (ランダムな初期 root パスワードの生成を含む)。 この場合、パスワードは期限切れとしてマークされるため、新しいパスワードを選択する必要があります。

  • --initialize-insecure では、root パスワードは生成されません。 これはセキュアではありません。サーバーを本番で使用する前に、適切なタイミングでアカウントにパスワードを割り当てることを想定しています。

新しい'root'@'localhost'パスワードを割り当てる手順については、初期化後の root パスワードの割当て を参照してください。

注記

サーバーは、すべてのメッセージ (初期パスワードを含む) を標準エラー出力に書き込みます。 これはエラーログにリダイレクトされる場合があるため、画面にメッセージが表示されていないかどうかを確認してください。 エラーログの場所などの詳細は、セクション5.4.2「エラーログ」 を参照してください。

Windows では、--console オプションを使用してコンソールにメッセージを送信します。

Unix および Unix に似たシステムでは、後で実行するときにサーバーが読取りおよび書込みアクセス権を持つように、データベースディレクトリおよびファイルを mysql ログインアカウントが所有することが重要です。 これを確認するには、システム root アカウントから mysqld を起動し、次に示すように --user オプションを含めます:

bin/mysqld --initialize --user=mysql
bin/mysqld --initialize-insecure --user=mysql

または、mysql としてログインしているときに mysqld を実行します。この場合、コマンドから --user オプションを省略できます。

Windows の場合は、次のいずれかのコマンドを使用します:

bin\mysqld --initialize --console
bin\mysqld --initialize-insecure --console
注記

必要なシステムライブラリがない場合、データディレクトリの初期化が失敗することがあります。 たとえば、次のようなエラーが表示される場合があります:

bin/mysqld: error while loading shared libraries:
libnuma.so.1: cannot open shared object file:
No such file or directory

この場合は、欠落しているライブラリを手動でインストールするか、システムパッケージマネージャを使用してインストールする必要があります。 次に、データディレクトリの初期化コマンドを再試行します。

mysqld がインストールディレクトリまたはデータディレクトリの正しい場所を特定できない場合は、--basedir--datadir などの他のオプションを指定する必要がある場合があります。 次に例を示します (単一行にコマンドを入力します):

bin/mysqld --initialize --user=mysql
  --basedir=/opt/mysql/mysql
  --datadir=/opt/mysql/mysql/data

または、関連するオプション設定をオプションファイルに配置し、そのファイルの名前を mysqld に渡します。 Unix および Unix に似たシステムでは、オプションファイル名が/opt/mysql/mysql/etc/my.cnf であるとします。 ファイルに次の行を挿入します:

[mysqld]
basedir=/opt/mysql/mysql
datadir=/opt/mysql/mysql/data

次に、次のように mysqld を起動します (--defaults-file オプションを最初に指定して単一行にコマンドを入力します):

bin/mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf
  --initialize --user=mysql

Windows では、C:\my.ini に次の行が含まれているとします:

[mysqld]
basedir=C:\\Program Files\\MySQL\\MySQL Server 8.0
datadir=D:\\MySQLdata

次に、次のように mysqld を起動します (--defaults-file オプションを最初に指定して単一行にコマンドを入力します):

bin\mysqld --defaults-file=C:\my.ini
   --initialize --console

データディレクトリの初期化中のサーバーアクション

注記

サーバーによって実行されるデータディレクトリの初期化シーケンスは、mysql_secure_installation および mysql_ssl_rsa_setup によって実行されるアクションのかわりにはなりません。 セクション4.4.2「mysql_secure_installation — MySQL インストールのセキュリティー改善」およびセクション4.4.3「mysql_ssl_rsa_setup — SSL/RSA ファイルの作成」を参照してください。

--initialize または --initialize-insecure オプションを指定して起動すると、mysqld はデータディレクトリの初期化シーケンス中に次のアクションを実行します:

  1. サーバーは、次のようにデータディレクトリの存在をチェックします:

    • データディレクトリが存在しない場合は、サーバーによって作成されます。

    • データディレクトリは存在するが空でない (つまり、ファイルまたはサブディレクトリが含まれている) 場合、サーバーはエラーメッセージを生成した後に終了します:

      [ERROR] --initialize specified but the data directory exists. Aborting.

      この場合、データディレクトリを削除するか名前を変更して、再試行してください。

      すべてのエントリにピリオド (.) で始まる名前がある場合、既存のデータディレクトリは空にできません。

  2. サーバーは、データディレクトリ内に、データディクショナリテーブル、付与テーブル、タイムゾーンテーブル、サーバー側ヘルプテーブルなどの mysql システムスキーマとそのテーブルを作成します。 セクション5.3「mysql システムスキーマ」を参照してください。

  3. サーバーは、InnoDB テーブルの管理に必要な system tablespace および関連データ構造を初期化します。

    注記

    mysqldInnoDB system tablespace を設定した後、テーブルスペースの特性を変更するには、新しい instance 全体を設定する必要があります。 修飾変更には、システムテーブルスペースの最初のファイルのファイル名と undo ログの数が含まれます。 デフォルト値を使用しない場合は、mysqld を実行する前に、innodb_data_file_path および innodb_log_file_size 構成パラメータの設定が MySQL configuration file に配置されていることを確認してください。 また、 innodb_data_home_dir および innodb_log_group_home_dir などの、InnoDB ファイルの作成および場所に影響するその他のパラメータを、必要に応じて指定してください。

    これらのオプションが構成ファイルにあり、そのファイルが MySQL がデフォルトで読み取る場所にない場合は、mysqld の実行時に --defaults-extra-file オプションを使用してファイルの場所を指定します。

  4. サーバーは、'root'@'localhost'スーパーユーザーアカウントおよびその他の予約済みアカウントを作成します (セクション6.2.9「予約済アカウント」 を参照)。 一部の予約済アカウントはロックされており、クライアントでは使用できませんが、'root'@'localhost'は管理用であるため、パスワードを割り当てる必要があります。

    'root'@'localhost'アカウントのパスワードに関するサーバーアクションは、その呼出し方法によって異なります:

    • --initialize では、--initialize-insecure ではなくランダムパスワードが生成され、期限切れとしてマークされ、パスワードを表示するメッセージが書き込まれます:

      [Warning] A temporary password is generated for root@localhost:
      iTag*AfrH5ej
    • --initialize-insecure では (--initialize-insecure--initialize を暗黙的に示すため、--initialize の有無にかかわらず)、サーバーはパスワードを生成したり期限切れとマークしたりせず、警告メッセージを書き込みます:

      [Warning] root@localhost is created with an empty password ! Please
      consider switching off the --initialize-insecure option.

    新しい'root'@'localhost'パスワードを割り当てる手順については、初期化後の root パスワードの割当て を参照してください。

  5. サーバーは、HELP ステートメントに使用されるサーバー側のヘルプテーブルに移入します (セクション13.8.3「HELP ステートメント」 を参照)。 サーバーはタイムゾーンテーブルを移入しません。 これを手動で行うには、セクション5.1.15「MySQL Server でのタイムゾーンのサポート」 を参照してください。

  6. SQL ステートメントのファイルを指定するために init_file システム変数が指定された場合、サーバーはファイル内のステートメントを実行します。 このオプションを使用すると、カスタムブートストラップシーケンスを実行できます。

    サーバーがブートストラップモードで動作する場合、ファイルで許可されるステートメントを制限する一部の機能は使用できません。 これには、アカウント管理 (CREATE USERGRANT など)、レプリケーションおよびグローバルトランザクション識別子に関連するステートメントが含まれます。

  7. サーバーが終了します。

初期化後の root パスワードの割当て

--initialize または --initialize-insecure でサーバーを起動してデータディレクトリを初期化した後、サーバーを通常どおり (つまり、これらのオプションのいずれも指定せずに) 起動し、'root'@'localhost'アカウントに新しいパスワードを割り当てます:

  1. サーバーを起動します。 その手順は、セクション2.10.2「サーバーの起動」を参照してください。

  2. サーバーに接続します:

    • --initialize-insecure ではなく --initialize を使用してデータディレクトリを初期化した場合は、root としてサーバーに接続します:

      mysql -u root -p

      次に、パスワードプロンプトで、サーバーが初期化シーケンス中に生成したランダムパスワードを入力します:

      Enter password: (enter the random root password here)

      このパスワードがわからない場合は、サーバーエラーログを参照してください。

    • --initialize-insecure を使用してデータディレクトリを初期化した場合は、パスワードなしで root としてサーバーに接続します:

      mysql -u root --skip-password
  3. 接続後、ALTER USER ステートメントを使用して新しい root パスワードを割り当てます:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

セクション2.10.4「初期 MySQL アカウントの保護」も参照してください。

注記

ホスト 127.0.0.1 への接続を試行すると、通常は localhost アカウントに解決されます。 ただし、サーバーが skip_name_resolve を有効にして実行されている場合、これは失敗します。 これを行う場合は、接続を受け入れることができるアカウントが存在することを確認します。 たとえば、--host=127.0.0.1 または --host=::1 を使用して root として接続できるようにするには、次のアカウントを作成します:

CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';

これらのステートメントは、データディレクトリの初期化中のサーバーアクション で説明されているように、init_file システム変数を使用して実行されるファイルに配置できます。


関連キーワード:  インストール, サーバー, ディレクトリ, データ, initialize, パスワード, アカウント, 参照, mysqld, 起動