7.3. MySQL の使用
MySQL サーバーは、オープンソースの高速で堅牢なデータベースサーバーです。MySQL は、データを構造化情報に変換して、データにアクセスする SQL インターフェイスを提供するリレーショナルデータベースです。これには、複数のストレージエンジンとプラグインに加え、地理情報システム (GIS) と JavaScript Object Notation (JSON) 機能も含まれています。
RHEL システムに MySQL をインストールして設定する方法、MySQL データをバックアップする方法、MySQL の以前のバージョンから移行する方法、および MySQL を複製する方法を説明します。
7.3.1. MySQL のインストール リンクのコピーリンクがクリップボードにコピーされました!
RHEL 8 では、MySQL 8.0 サーバーは mysql:8.0 モジュールストリームとして利用できます。
RPM パッケージが競合しているため、RHEL 8 では MySQL および MariaDB データベースサーバーを同時にインストールすることはできません。コンテナー内では、MySQL および MariaDB データベースサーバーを並行して使用できます。コンテナー内で複数の MySQL および MariaDB バージョンを実行する を参照してください。
MySQL をインストールするには、以下の手順に従います。
手順
mysqlモジュールから8.0ストリーム (バージョン) を選択し、serverプロファイルを指定して、MySQL サーバーパッケージをインストールします。yum module install mysql:8.0/server
# yum module install mysql:8.0/serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysqldサービスを開始します。systemctl start mysqld.service
# systemctl start mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysqldサービスを有効にして、起動時に起動するようにします。systemctl enable mysqld.service
# systemctl enable mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 推奨手順: MySQL のインストール時にセキュリティーを強化するには、次のコマンドを実行します。
mysql_secure_installation
$ mysql_secure_installationCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、完全にインタラクティブなスクリプトを起動して、プロセスの各ステップのプロンプトを表示します。このスクリプトを使用すると、次の方法でセキュリティーを改善できます。
- root アカウントのパスワードの設定
- 匿名ユーザーの削除
- リモート root ログインの拒否 (ローカルホスト外)
7.3.2. コンテナー内で複数の MySQL および MariaDB バージョンを実行する リンクのコピーリンクがクリップボードにコピーされました!
MySQL と MariaDB の両方を同じホストで実行するには、コンテナー内で実行します。これは、RPM パッケージが競合し、これらのデータベースサーバーを並行してインストールできないためです。
この手順では、例として MySQL 8.0 と MariaDB 10.5 を記載していますが、Red Hat Ecosystem Catalog で利用可能な任意の MySQL または MariaDB コンテナーバージョンを使用できます。
前提条件
-
container-toolsモジュールがインストールされている。
手順
Red Hat カスタマーポータルアカウントを使用して、
registry.redhat.ioレジストリーに認証します。podman login registry.redhat.io
# podman login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow すでにコンテナーレジストリーにログインしている場合は、このステップをスキップしてください。
コンテナー内で MySQL 8.0 を実行します。
podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mysql_root_password> -p <host_port_1>:3306 rhel8/mysql-80
$ podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mysql_root_password> -p <host_port_1>:3306 rhel8/mysql-80Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコンテナーイメージの使用方法の詳細は、Red Hat Ecosystem Catalog を 参照してください。
コンテナー内で MariaDB 10.5 を実行します。
podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mariadb_root_password> -p <host_port_2>:3306 rhel8/mariadb-105
$ podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mariadb_root_password> -p <host_port_2>:3306 rhel8/mariadb-105Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコンテナーイメージの使用方法の詳細は、Red Hat Ecosystem Catalog を 参照してください。
コンテナー内で MariaDB 10.11 を実行します。
podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mariadb_root_password> -p <host_port_3>:3306 rhel8/mariadb-1011
$ podman run -d --name <container_name> -e MYSQL_ROOT_PASSWORD=<mariadb_root_password> -p <host_port_3>:3306 rhel8/mariadb-1011Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコンテナーイメージの使用方法の詳細は、Red Hat Ecosystem Catalog を 参照してください。
注記2 つのデータベースサーバーのコンテナー名とホストポートが異なっている必要があります。
クライアントがネットワーク上のデータベースサーバーにアクセスできるように、ファイアウォールでホストポートを開きます。
firewall-cmd --permanent --add-port={<host_port>/tcp,<host_port>/tcp,...} firewall-cmd --reload# firewall-cmd --permanent --add-port={<host_port>/tcp,<host_port>/tcp,...} # firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
実行中のコンテナーに関する情報を表示します。
podman ps
$ podman psCopy to Clipboard Copied! Toggle word wrap Toggle overflow データベースサーバーに接続し、root としてログインします。
mysql -u root -p -h localhost -P <host_port> --protocol tcp
# mysql -u root -p -h localhost -P <host_port> --protocol tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.3. MySQL の設定 リンクのコピーリンクがクリップボードにコピーされました!
MySQL サーバーをネットワーク用に設定するには、以下の手順に従います。
手順
/etc/my.cnf.d/mysql-server.cnfファイルの[mysqld]セクションを編集します。以下の設定ディレクティブを設定できます。bind-address: サーバーがリッスンするアドレスです。設定可能なオプションは以下のとおりです。- ホスト名
- IPv4 アドレス
- IPv6 アドレス
skip-networking: サーバーが TCP/IP 接続をリッスンするかどうかを制御します。以下の値が使用できます。- 0 - すべてのクライアントをリッスンする
- 1 - ローカルクライアントのみをリッスンする
-
port: MySQL が TCP/IP 接続をリッスンするポート。
mysqldサービスを再起動します。systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.4. MySQL サーバーでの TLS 暗号化の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、MySQL は暗号化されていない接続を使用します。安全な接続のために、MySQL サーバーで TLS サポートを有効にし、暗号化された接続を確立するようにクライアントを設定します。
7.3.4.1. MySQL サーバーに CA 証明書、サーバー証明書、および秘密鍵を配置する リンクのコピーリンクがクリップボードにコピーされました!
MySQL サーバーで TLS 暗号化を有効にする前に、認証局 (CA) 証明書、サーバー証明書、および秘密鍵を MySQL サーバーに保存します。
前提条件
Privacy Enhanced Mail(PEM) 形式の以下のファイルがサーバーにコピーされています。
-
サーバーの秘密鍵:
server.example.com.key.pem -
サーバー証明書:
server.example.com.crt.pem -
認証局 (CA) 証明書:
ca.crt.pem
秘密鍵および証明書署名要求 (CSR) の作成や、CA からの証明書要求に関する詳細は、CA のドキュメントを参照してください。
-
サーバーの秘密鍵:
手順
CA およびサーバー証明書を
/etc/pki/tls/certs/ディレクトリーに保存します。mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ mv <path>/ca.crt.pem /etc/pki/tls/certs/
# mv <path>/server.example.com.crt.pem /etc/pki/tls/certs/ # mv <path>/ca.crt.pem /etc/pki/tls/certs/Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL サーバーがファイルを読み込めるように、CA およびサーバー証明書にパーミッションを設定します。
chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pem
# chmod 644 /etc/pki/tls/certs/server.example.com.crt.pem /etc/pki/tls/certs/ca.crt.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書は、セキュアな接続が確立される前は通信の一部であるため、任意のクライアントは認証なしで証明書を取得できます。そのため、CA およびサーバーの証明書ファイルに厳密なパーミッションを設定する必要はありません。
サーバーの秘密鍵を
/etc/pki/tls/private/ディレクトリーに保存します。mv <path>/server.example.com.key.pem /etc/pki/tls/private/
# mv <path>/server.example.com.key.pem /etc/pki/tls/private/Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーの秘密鍵にセキュアなパーミッションを設定します。
chmod 640 /etc/pki/tls/private/server.example.com.key.pem chgrp mysql /etc/pki/tls/private/server.example.com.key.pem
# chmod 640 /etc/pki/tls/private/server.example.com.key.pem # chgrp mysql /etc/pki/tls/private/server.example.com.key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 承認されていないユーザーが秘密鍵にアクセスできる場合は、MySQL サーバーへの接続は安全ではなくなります。
SELinux コンテキストを復元します。
restorecon -Rv /etc/pki/tls/
# restorecon -Rv /etc/pki/tls/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.4.2. MySQL サーバーでの TLS の設定 リンクのコピーリンクがクリップボードにコピーされました!
セキュリティーを強化するには、MySQL サーバーで TLS サポートを有効にします。その結果、クライアントは TLS 暗号化を使用してサーバーでデータを送信できます。
前提条件
- MySQL サーバーをインストールしている。
-
mysqldサービスが実行されている。 Privacy Enhanced Mail(PEM) 形式の以下のファイルがサーバー上にあり、
mysqlユーザーが読み取りできます。-
サーバーの秘密鍵:
/etc/pki/tls/private/server.example.com.key.pem -
サーバー証明書:
/etc/pki/tls/certs/server.example.com.crt.pem -
認証局 (CA) 証明書
/etc/pki/tls/certs/ca.crt.pem
-
サーバーの秘密鍵:
- サーバー証明書のサブジェクト識別名 (DN) またはサブジェクトの別名 (SAN) フィールドは、サーバーのホスト名と一致します。
手順
/etc/my.cnf.d/mysql-server-tls.cnfファイルを作成します。以下の内容を追加して、秘密鍵、サーバー、および CA 証明書へのパスを設定します。
[mysqld] ssl_key = /etc/pki/tls/private/server.example.com.key.pem ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem ssl_ca = /etc/pki/tls/certs/ca.crt.pem
[mysqld] ssl_key = /etc/pki/tls/private/server.example.com.key.pem ssl_cert = /etc/pki/tls/certs/server.example.com.crt.pem ssl_ca = /etc/pki/tls/certs/ca.crt.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 証明書失効リスト (CRL) がある場合は、それを使用するように MySQL サーバーを設定します。
ssl_crl = /etc/pki/tls/certs/example.crl.pem
ssl_crl = /etc/pki/tls/certs/example.crl.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 暗号化なしの接続試行を拒否します。この機能を有効にするには、以下を追加します。
require_secure_transport = on
require_secure_transport = onCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: サーバーがサポートする必要がある TLS バージョンを設定します。たとえば、TLS 1.3 のみをサポートするには、次を追加します。
tls_version = TLSv1.3
tls_version = TLSv1.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは、サーバーは TLS 1.2 と TLS 1.3 をサポートします。
mysqldサービスを再起動します。systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
トラブルシューティングを簡素化するには、ローカルクライアントが TLS 暗号化を使用するように設定する前に、MySQL サーバーで以下の手順を実行します。
MySQL で TLS 暗号化が有効になっていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL サーバーが特定の TLS バージョンのみをサポートするように設定している場合は、
tls_version変数を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーが正しい CA 証明書、サーバー証明書、および秘密鍵ファイルを使用していることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.4.3. 特定のユーザーアカウントに TLS で暗号化された接続を要求する リンクのコピーリンクがクリップボードにコピーされました!
機密データにアクセスできるユーザーは、ネットワーク上で暗号化されていないデータ送信を回避するために、常に TLS で暗号化された接続を使用する必要があります。
すべての接続にセキュアなトランスポートが必要なサーバーで設定できない場合は (require_secure_transport = on)、TLS 暗号化を必要とするように個別のユーザーアカウントを設定します。
前提条件
- MySQL サーバーで TLS サポートが有効になっている。
- セキュアなトランスポートを必要とするように設定するユーザーが存在する。
- CA 証明書がクライアントに保存されている。
手順
管理ユーザーとして MySQL サーバーに接続します。
mysql -u root -p -h server.example.com
# mysql -u root -p -h server.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 管理ユーザーがリモートでサーバーにアクセスする権限を持たない場合は、MySQL サーバーでコマンドを実行し、
localhostに接続します。REQUIRE SSL句を使用して、ユーザーが TLS 暗号化接続を使用して接続する必要があるよう強制します。MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;
MySQL [(none)]> ALTER USER 'example'@'%' REQUIRE SSL;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
TLS 暗号化を使用して、
exampleユーザーとしてサーバーに接続します。mysql -u example -p -h server.example.com
# mysql -u example -p -h server.example.com ... MySQL [(none)]>Copy to Clipboard Copied! Toggle word wrap Toggle overflow エラーが表示されず、インタラクティブな MySQL コンソールにアクセスできる場合は、TLS との接続は成功します。
デフォルトでは、サーバーが TLS 暗号化を提供している場合、クライアントは自動的にその TLS 暗号化を使用します。したがって、
--ssl-ca=ca.crt.pemおよび--ssl-mode=VERIFY_IDENTITYオプションは必須ではありません。ただし、これらのオプションを使用するとクライアントはサーバーの ID を検証するため、セキュリティーが向上します。TLS を無効にして、
exampleユーザーとして接続を試みます。mysql -u example -p -h server.example.com --ssl-mode=DISABLED
# mysql -u example -p -h server.example.com --ssl-mode=DISABLED ERROR 1045 (28000): Access denied for user 'example'@'server.example.com' (using password: YES)Copy to Clipboard Copied! Toggle word wrap Toggle overflow このユーザーには TLS が必要なのにもかかわらず無効になっているため、サーバーはログインの試行を拒否しました (
--ssl-mode=DISABLED)。
7.3.5. MySQL クライアントで CA 証明書の検証を使用して TLS 暗号化をグローバルで有効にする リンクのコピーリンクがクリップボードにコピーされました!
MySQL サーバーが TLS 暗号化に対応している場合は、安全な接続のみを確立し、サーバー証明書を検証するようにクライアントを設定します。この手順では、サーバー上のすべてのユーザーで TLS サポートを有効にする方法を説明します。
7.3.5.1. デフォルトで TLS 暗号化を使用するように MySQL クライアントを設定する リンクのコピーリンクがクリップボードにコピーされました!
RHEL では、MySQL クライアントが TLS 暗号化を使用するようにグローバルに設定でき、サーバー証明書の Common Name (CN) が、ユーザーが接続するホスト名と一致することを検証します。これにより、man-in-the-middle 攻撃 (中間者攻撃) を防ぎます。
前提条件
- MySQL サーバーで TLS サポートが有効になっている。
-
CA 証明書は、クライアントの
/etc/pki/tls/certs/ca.crt.pemファイルに保存されます。
手順
以下の内容で
/etc/my.cnf.d/mysql-client-tls.cnfファイルを作成します。[client] ssl-mode=VERIFY_IDENTITY ssl-ca=/etc/pki/tls/certs/ca.crt.pem
[client] ssl-mode=VERIFY_IDENTITY ssl-ca=/etc/pki/tls/certs/ca.crt.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定は、MySQL クライアントが TLS 暗号化を使用すること、およびクライアントがホスト名をサーバー証明書の CN と比較すること (
ssl-mode=VERIFY_IDENTITY) を定義します。さらに、CA 証明書 (ssl-ca) へのパスも指定します。
検証
ホスト名を使用してサーバーに接続し、サーバーの状態を表示します。
mysql -u root -p -h server.example.com -e status
# mysql -u root -p -h server.example.com -e status ... SSL: Cipher in use is TLS_AES_256_GCM_SHA384Copy to Clipboard Copied! Toggle word wrap Toggle overflow SSLエントリーにCipher in use is…が含まれている場合、接続は暗号化されています。このコマンドで使用するユーザーには、リモートで認証するパーミッションがあることに注意してください。
接続するホスト名がサーバーの TLS 証明書のホスト名と一致しない場合、
ssl-mode=VERIFY_IDENTITYパラメーターにより接続が失敗します。たとえば、localhostに接続する場合は、以下のようになります。mysql -u root -p -h localhost -e status
# mysql -u root -p -h localhost -e status ERROR 2026 (HY000): SSL connection error: error:0A000086:SSL routines::certificate verify failedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.6. MySQL データのバックアップ リンクのコピーリンクがクリップボードにコピーされました!
MySQL データベースからデータをバックアップするには、主に 2 つの方法があります。
- 論理バックアップ
論理バックアップは、データの復元に必要な SQL ステートメントで設定されます。この種類のバックアップは、情報およびレコードをプレーンテキストファイルにエクスポートします。
物理バックアップに対する論理バックアップの主な利点は、移植性と柔軟性です。データは、物理バックアップではできない他のハードウェア設定である MySQL バージョンまたはデータベース管理システム (DBMS) で復元できます。
論理バックアップは、
mysqld.serviceが実行されている場合にのみ実行できることに注意してください。論理バックアップには、ログと設定ファイルが含まれません。- 物理バックアップ
物理バックアップは、コンテンツを格納するファイルおよびディレクトリーのコピーで設定されます。
物理バックアップは、論理バックアップと比較して、以下の利点があります。
- 出力が少なくなる。
- バックアップのサイズが小さくなる。
- バックアップおよび復元が速くなる。
バックアップには、ログファイルと設定ファイルが含まれる。
mysqld.serviceが実行されていない場合、またはバックアップ中の変更を防ぐためにデータベース内のすべてのテーブルがロックされている場合は、物理バックアップを実行する必要があることに注意してください。
以下の MySQL バックアップアプローチのいずれかを使用して、MySQL データベースからデータをバックアップできます。
-
mysqldumpを使用した論理バックアップ - ファイルシステムのバックアップ
- バックアップソリューションとしてレプリケーションを使用
7.3.6.1. mysqldump を使用した論理バックアップの実行 リンクのコピーリンクがクリップボードにコピーされました!
mysqldump クライアントはバックアップユーティリティーで、バックアップ目的でデータベースまたはデータベースの集合をダンプしたり、別のデータベースサーバーに転送したりできます。通常、mysqldump の出力は、サーバーテーブル構造を再作成する、それにデータを取り込む、またはその両方の SQL ステートメントで構成されます。mysqldump は、XML および (CSV などの) コンマ区切りテキスト形式など、他の形式でファイルを生成することもできます。
mysqldump バックアップを実行するには、以下のいずれかのオプションを使用できます。
- 選択したデータベースを 1 つまたは複数バックアップ
- すべてのデータベースをバックアップする。
- あるデータベースのテーブルのサブセットのバックアップを作成する。
手順
単一のデータベースをダンプするには、以下を実行します。
mysqldump [options] --databases db_name > backup-file.sql
# mysqldump [options] --databases db_name > backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 複数のデータベースを一度にダンプするには、次のコマンドを実行します。
mysqldump [options] --databases db_name1 [db_name2 ...] > backup-file.sql
# mysqldump [options] --databases db_name1 [db_name2 ...] > backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのデータベースをダンプするには、以下を実行します。
mysqldump [options] --all-databases > backup-file.sql
# mysqldump [options] --all-databases > backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 1 つ以上のダンプされたフルデータベースをサーバーにロードし直すには、以下を実行します。
mysql < backup-file.sql
# mysql < backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow データベースをリモート MySQL サーバーにロードするには、以下を実行します。
mysql --host=remote_host < backup-file.sql
# mysql --host=remote_host < backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow あるデータベースでリテラルなテーブルのサブセットをダンプするには、
mysqldumpコマンドの末尾に、選択したテーブルのリストを追加します。mysqldump [options] db_name [tbl_name ...] > backup-file.sql
# mysqldump [options] db_name [tbl_name ...] > backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 1 つのデータベースからダンプされたリテラルなテーブルのサブセットをロードするには、次のコマンドを実行します。
mysql db_name < backup-file.sql
# mysql db_name < backup-file.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記この時点で、db_name データベースが存在している必要があります。
mysqldump がサポートするオプションのリストを表示するには、以下を実行します。
mysqldump --help
$ mysqldump --helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.6.2. ファイルシステムのバックアップの実行 リンクのコピーリンクがクリップボードにコピーされました!
MySQL データファイルのファイルシステムバックアップを作成するには、MySQL データディレクトリーの内容をバックアップ場所にコピーします。
現在の設定またはログファイルのバックアップも作成するには、以下の手順の中から任意の手順を選択します。
手順
mysqldサービスを停止します。systemctl stop mysqld.service
# systemctl stop mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow データファイルを必要な場所にコピーします。
cp -r /var/lib/mysql /backup-location
# cp -r /var/lib/mysql /backup-locationCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 設定ファイルを必要な場所にコピーします。
cp -r /etc/my.cnf /etc/my.cnf.d /backup-location/configuration
# cp -r /etc/my.cnf /etc/my.cnf.d /backup-location/configurationCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: ログファイルを必要な場所にコピーします。
cp /var/log/mysql/* /backup-location/logs
# cp /var/log/mysql/* /backup-location/logsCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysqldサービスを開始します。systemctl start mysqld.service
# systemctl start mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow バックアップされたデータをバックアップ場所から
/var/lib/mysqlディレクトリーに読み込む際は、mysql:mysqlが/var/lib/mysql内のすべてのデータの所有者であることを確認してください。chown -R mysql:mysql /var/lib/mysql
# chown -R mysql:mysql /var/lib/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.6.3. バックアップソリューションとしてレプリケーションを使用 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションは、ソースサーバー用の代替バックアップソリューションです。ソースサーバーの複製となるレプリカサーバーを作成すると、ソースに影響を与えずにレプリカでバックアップを実行できます。ソースは、レプリカをシャットダウンする間に依然として実行でき、レプリカからデータのバックアップを作成できます。
MySQLデータベースを複製する方法の手順は、MySQL の複製 を参照してください。
レプリケーション自体は、バックアップソリューションとしては十分ではありません。レプリケーションは、ハードウェア障害からソースサーバーを保護しますが、データ損失に対する保護は保証していません。この方法とともに、レプリカでその他のバックアップソリューションを使用することが推奨されます。
7.3.7. MySQL 8.0 の RHEL 8 バージョンへの移行 リンクのコピーリンクがクリップボードにコピーされました!
RHEL 7 には、MySQL データベースファミリーからのサーバーのデフォルトの実装として、MariaDB 5.5 が同梱されています。RHEL 7 用の Red Hat Software Collections オファリングは、MySQL 8.0 と MariaDB のいくつかのバージョンを提供します。RHEL 8 は、MySQL 8.0、MariaDB 10.3、および MariaDB 10.5 を提供します。
この手順では、mysql_upgrade ユーティリティーを使用した MySQL 8.0 の Red Hat Software Collections バージョンから MySQL 8.0 の RHEL8 バージョンへの移行について説明します。mysql_upgrade ユーティリティーは、mysql-server パッケージによって提供されます。
MySQLの Red Hat Software Collections バージョンでは、ソースデータディレクトリーは /var/opt/rh/rh-mysql80/lib/mysql/ です。RHEL 8 では、MySQL データは /var/lib/mysql/ ディレクトリーに保存されます。
前提条件
- アップグレードを実行する前に、MySQL データベースに保存されているすべてのデータをバックアップすること。
手順
mysql-serverパッケージが RHEL 8 システムにインストールされていることを確認します。yum install mysql-server
# yum install mysql-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow データのコピー時に、
mysqldサービスがソースシステムとターゲットシステムのどちらでも実行されていないことを確認してください。systemctl stop mysqld.service
# systemctl stop mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
RHEL 7 ソースシステムの
/var/opt/rh/rh-mysql80/lib/mysql/ディレクトリーから RHEL 8 ターゲットシステムの/var/lib/mysql/ディレクトリーにデータをコピーします。 ターゲットシステムでコピーされたファイルに適切なパーミッションと SELinux コンテキストを設定します。
restorecon -vr /var/lib/mysql
# restorecon -vr /var/lib/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysql:mysqlが、/var/lib/mysqlディレクトリー内のすべてのデータの所有者であることを確認してください。chown -R mysql:mysql /var/lib/mysql
# chown -R mysql:mysql /var/lib/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ターゲットシステムで MySQL サーバーを起動します。
systemctl start mysqld.service
# systemctl start mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意: MySQL の以前のバージョンでは、内部テーブルをチェックおよび修復するために
mysql_upgradeコマンドが必要でした。これは、サーバーの起動時に自動的に実行されるようになりました。
7.3.8. TLS 暗号化を使用した MySQL のレプリケーション リンクのコピーリンクがクリップボードにコピーされました!
MySQL には、基本的なものから高度なものまで、レプリケーション用のさまざまな設定オプションが用意されています。このセクションでは、グローバルトランザクション識別子 (GTID) を使用して、新しくインストールした MySQL サーバーに MySQL でレプリケートするトランザクションベースの方法を説明します。GTID を使用すると、トランザクションの識別と整合性の検証が簡素化されます。
MySQL でレプリケーションを設定するには、以下を行う必要があります。
レプリケーションに既存の MySQL サーバーを使用する場合は、最初にデータを同期する必要があります。詳細は、アップストリームのドキュメント を参照してください。
7.3.8.1. MySQL ソースサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
MySQL ソースサーバーを適切に実行し、TLS プロトコルを介してデータベースサーバーで行われたすべての変更をレプリケートするのに必要な設定オプションを設定できます。
前提条件
- ソースサーバーがインストールされている。
ソースサーバーに TLS が設定 されている。
重要ソース証明書とレプリカ証明書が、同じ認証局によって署名されている必要があります。
手順
[mysqld]セクションの/etc/my.cnf.d/mysql-server.cnfファイルに以下のオプションを含めます。bind-address=source_ip_adressこのオプションは、レプリカからソースへの接続に必要です。
server-id=idid は一意である必要があります。
log_bin=path_to_source_server_logこのオプションは、MySQL ソースサーバーのバイナリーログファイルへのパスを定義します。例:
log_bin=/var/log/mysql/mysql-bin.loggtid_mode=ONこのオプションは、サーバー上でグローバルトランザクション識別子 (GTID) を有効にします。
enforce-gtid-consistency=ONサーバーは、GTID を使用して安全にログに記録できるステートメントのみの実行を許可することにより、GTID の整合性を強化します。
オプション:
binlog_do_db=db_name選択したデータベースのみを複製する場合は、このオプションを使用します。選択した複数のデータベースを複製するには、各データベースを個別に指定します。
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
binlog_ignore_db=db_nameこのオプションを使用して、特定のデータベースをレプリケーションから除外します。
mysqldサービスを再起動します。systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.8.2. MySQL レプリカサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションを成功させるために MySQL レプリカサーバーに必要な設定オプションを設定できます。
前提条件
- レプリカサーバーがインストールされている。
レプリカサーバーに TLS が設定 されている。
重要ソース証明書とレプリカ証明書が、同じ認証局によって署名されている必要があります。
手順
[mysqld]セクションの/etc/my.cnf.d/mysql-server.cnfファイルに以下のオプションを含めます。server-id=idid は一意である必要があります。
relay-log=path_to_replica_server_logリレーログは、レプリケーション中に MySQL レプリカサーバーによって作成されたログファイルのセットです。
log_bin=path_to_replica_sever_logこのオプションは、MySQL レプリカサーバーのバイナリーログファイルへのパスを定義します。例:
log_bin=/var/log/mysql/mysql-bin.logこのオプションはレプリカでは必須ではありませんが、強く推奨します。
gtid_mode=ONこのオプションは、サーバー上でグローバルトランザクション識別子 (GTID) を有効にします。
enforce-gtid-consistency=ONサーバーは、GTID を使用して安全にログに記録できるステートメントのみの実行を許可することにより、GTID の整合性を強化します。
log-replica-updates=ONこのオプションにより、ソースサーバーから受信した更新がレプリカのバイナリーログに記録されます。
skip-replica-start=ONこのオプションは、レプリカサーバーの起動時に、レプリカサーバーがレプリケーションスレッドを開始しないようにします。
オプション:
binlog_do_db=db_name特定のデータベースのみを複製する場合は、このオプションを使用します。複数のデータベースを複製するには、各データベースを個別に指定します。
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
binlog_ignore_db=db_nameこのオプションを使用して、特定のデータベースをレプリケーションから除外します。
mysqldサービスを再起動します。systemctl restart mysqld.service
# systemctl restart mysqld.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.8.3. MySQL ソースサーバーでのレプリケーションユーザーの作成 リンクのコピーリンクがクリップボードにコピーされました!
レプリケーションユーザーを作成し、このユーザーにレプリケーショントラフィックに必要なパーミッションを付与する必要があります。この手順は、適切なパーミッションを持つレプリケーションユーザーを作成する方法を示しています。これらの手順は、ソースサーバーでのみ実行してください。
前提条件
- ソースサーバーは、MySQL ソースサーバーの設定 で説明されているように、インストールおよび設定されている。
手順
レプリケーションユーザーを作成します。
mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> CREATE USER 'replication_user'@'replica_server_hostname' IDENTIFIED WITH mysql_native_password BY 'password';Copy to Clipboard Copied! Toggle word wrap Toggle overflow ユーザーにレプリケーション権限を付与します。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_hostname';Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL データベースの付与テーブルを再読み込みします。
mysql> FLUSH PRIVILEGES;
mysql> FLUSH PRIVILEGES;Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソースサーバーを読み取り専用状態に設定します。
mysql> SET @@GLOBAL.read_only = ON;
mysql> SET @@GLOBAL.read_only = ON;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.8.4. レプリカサーバーをソースサーバーに接続する リンクのコピーリンクがクリップボードにコピーされました!
MySQL レプリカサーバーでは、認証情報とソースサーバーのアドレスを設定する必要があります。次の手順を使用して、レプリカサーバーを実装します。
前提条件
- ソースサーバーは、MySQL ソースサーバーの設定 で説明されているように、インストールおよび設定されている。
- レプリカサーバーは、MySQL レプリカサーバーの設定 で説明されているように、インストールおよび設定されている。
- レプリケーションユーザーを作成している。MySQL ソースサーバーでのレプリケーションユーザーの作成 を参照してください。
手順
レプリカサーバーを読み取り専用状態に設定します。
mysql> SET @@GLOBAL.read_only = ON;
mysql> SET @@GLOBAL.read_only = ON;Copy to Clipboard Copied! Toggle word wrap Toggle overflow レプリケーションソースを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow MySQL レプリカサーバーでレプリカスレッドを開始します。
mysql> START REPLICA;
mysql> START REPLICA;Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソースサーバーとレプリカサーバーの両方で、読み取り専用状態の設定を解除します。
mysql> SET @@GLOBAL.read_only = OFF;
mysql> SET @@GLOBAL.read_only = OFF;Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: デバッグの目的で、レプリカサーバーのステータスを検査します。
mysql> SHOW REPLICA STATUS\G;
mysql> SHOW REPLICA STATUS\G;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記レプリカサーバーの起動または接続に失敗した場合は、
SHOW MASTER STATUSコマンドの出力に表示されるバイナリーログファイルの位置に続く特定の数のイベントをスキップできます。たとえば、定義された位置から最初のイベントをスキップします。mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;Copy to Clipboard Copied! Toggle word wrap Toggle overflow レプリカサーバーを再起動してみてください。
オプション: レプリカサーバーでレプリカスレッドを停止します。
mysql> STOP REPLICA;
mysql> STOP REPLICA;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3.8.5. MySQL サーバーでのレプリケーションの検証 リンクのコピーリンクがクリップボードにコピーされました!
複数の MySQL サーバー間でレプリケーションを設定した後、それが機能することを確認する必要があります。
手順
ソースサーバーにサンプルデータベースを作成します。
mysql> CREATE DATABASE test_db_name;
mysql> CREATE DATABASE test_db_name;Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
test_db_nameデータベースが、レプリカサーバーで複製されていることを確認します。 ソースサーバーまたはレプリカサーバーのいずれかで以下のコマンドを実行して、MySQL サーバーのバイナリーログファイルに関するステータス情報を表示します。
mysql> SHOW MASTER STATUS;
mysql> SHOW MASTER STATUS;Copy to Clipboard Copied! Toggle word wrap Toggle overflow ソースで実行されたトランザクションの GTID のセットを示す
Executed_Gtid_Set列は、空であってはなりません。注記レプリカサーバーで
SHOW REPLICA STATUSを使用すると、同じ GTID のセットがExecuted_Gtid_Set行に表示されます。
7.3.9. MySQL クライアントアプリケーションの開発 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat では、MariaDB クライアントライブラリーに対して MySQL クライアントアプリケーションを開発することを推奨します。クライアントとサーバー間の通信プロトコルは、MariaDB と MySQL の間で互換性があります。MariaDB クライアントライブラリーは、MySQL 実装に固有の限られた数の機能を除き、ほとんどの一般的な MySQL シナリオで機能します。
MariaDB クライアントライブラリーに対してアプリケーションをビルドするために必要な開発ファイルとプログラムは、mariadb-connector-c-devel パッケージで提供されます。
直接ライブラリー名を使用する代わりに、mariadb-connector-c-devel パッケージで配布されている mariadb_config プログラムを使用します。このプログラムにより、正しいビルドフラグが確実に返されるようになります。