このページは機械翻訳したものです。
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 ユーザーおよびグループの作成 を参照)、サーバーの実行に使用する予定の別の既存のログインアカウントの名前を置き換えます。
-
場所を MySQL インストールの最上位ディレクトリ (通常は
/usr/local/mysql
) に変更します (必要に応じてシステムのパス名を調整します):cd /usr/local/mysql
このディレクトリ内には、サーバーを含む
bin
サブディレクトリ、クライアントプログラムおよびユーティリティプログラムなど、複数のファイルおよびサブディレクトリがあります。 -
secure_file_priv
システム変数は、インポートおよびエクスポート操作を特定のディレクトリに制限します。 その変数の値として場所を指定できるディレクトリを作成します:mkdir mysql-files
ディレクトリユーザーおよびグループの所有権を
mysql
ユーザーおよびmysql
グループに付与し、ディレクトリ権限を適切に設定します:chown mysql:mysql mysql-files chmod 750 mysql-files
-
サーバーを使用してデータディレクトリを初期化します。これには、ユーザーがサーバーへの接続を許可される方法を決定する初期 MySQL 付与テーブルを含む
mysql
スキーマが含まれます。 例:bin/mysqld --initialize --user=mysql
コマンドに関する重要な情報、特に使用するコマンドオプションについては、データディレクトリの初期化手順 を参照してください。 サーバーが初期化を実行する方法の詳細は、データディレクトリの初期化中のサーバーアクション を参照してください。
通常、データディレクトリの初期化は、最初に MySQL をインストールした後にのみ行う必要があります。 (既存のインストールへのアップグレードの場合は、かわりにアップグレード手順を実行します。セクション2.11「MySQL のアップグレード」 を参照してください。) ただし、データディレクトリを初期化するコマンドは既存の
mysql
スキーマテーブルを上書きしないため、どのような状況でも安全に実行できます。 -
セキュアな接続の自動サポートを使用してサーバーをデプロイする場合は、mysql_ssl_rsa_setup ユーティリティを使用してデフォルトの SSL および RSA ファイルを作成します:
bin/mysql_ssl_rsa_setup
詳細は、セクション4.4.3「mysql_ssl_rsa_setup — SSL/RSA ファイルの作成」を参照してください。
オプションファイルがない場合、サーバーはデフォルト設定で起動します。 (セクション5.1.2「サーバー構成のデフォルト値」を参照してください。) MySQL サーバーが起動時に使用するオプションを明示的に指定するには、
/etc/my.cnf
や/etc/mysql/my.cnf
などのオプションファイルに配置します。 (セクション4.2.2.2「オプションファイルの使用」を参照してください。) たとえば、オプションファイルを使用してsecure_file_priv
システム変数を設定できます。システムブート時に手動で介入せずに MySQL が起動するように配置するには、セクション2.10.5「MySQL を自動的に起動および停止する」 を参照してください。
データディレクトリの初期化では、
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 はデータディレクトリの初期化シーケンス中に次のアクションを実行します:
-
サーバーは、次のようにデータディレクトリの存在をチェックします:
データディレクトリが存在しない場合は、サーバーによって作成されます。
-
データディレクトリは存在するが空でない (つまり、ファイルまたはサブディレクトリが含まれている) 場合、サーバーはエラーメッセージを生成した後に終了します:
[ERROR] --initialize specified but the data directory exists. Aborting.
この場合、データディレクトリを削除するか名前を変更して、再試行してください。
すべてのエントリにピリオド (
.
) で始まる名前がある場合、既存のデータディレクトリは空にできません。
サーバーは、データディレクトリ内に、データディクショナリテーブル、付与テーブル、タイムゾーンテーブル、サーバー側ヘルプテーブルなどの
mysql
システムスキーマとそのテーブルを作成します。 セクション5.3「mysql システムスキーマ」を参照してください。-
サーバーは、
InnoDB
テーブルの管理に必要な system tablespace および関連データ構造を初期化します。注記mysqld で
InnoDB
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
オプションを使用してファイルの場所を指定します。 -
サーバーは、
'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 パスワードの割当て を参照してください。 -
サーバーは、
HELP
ステートメントに使用されるサーバー側のヘルプテーブルに移入します (セクション13.8.3「HELP ステートメント」 を参照)。 サーバーはタイムゾーンテーブルを移入しません。 これを手動で行うには、セクション5.1.15「MySQL Server でのタイムゾーンのサポート」 を参照してください。-
SQL ステートメントのファイルを指定するために
init_file
システム変数が指定された場合、サーバーはファイル内のステートメントを実行します。 このオプションを使用すると、カスタムブートストラップシーケンスを実行できます。サーバーがブートストラップモードで動作する場合、ファイルで許可されるステートメントを制限する一部の機能は使用できません。 これには、アカウント管理 (
CREATE USER
、GRANT
など)、レプリケーションおよびグローバルトランザクション識別子に関連するステートメントが含まれます。 サーバーが終了します。
--initialize
または --initialize-insecure
でサーバーを起動してデータディレクトリを初期化した後、サーバーを通常どおり (つまり、これらのオプションのいずれも指定せずに) 起動し、'root'@'localhost'
アカウントに新しいパスワードを割り当てます:
サーバーを起動します。 その手順は、セクション2.10.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
-
-
接続後、
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
システム変数を使用して実行されるファイルに配置できます。