1つのMySQLDBサーバーから1つ以上のMySQLDBサーバーにデータを自動的に複製する必要がある場合があります。基本的に、データベース管理者は、レプリケーション、クラスタリング、自動フェイルオーバーなどのデータベース関連のタスクを実行します。 MySQLデータベースサーバーの管理とレプリケーションタスクの実行は、データベースの専門家の責任です。この記事では、Ubuntu20.04でマスタースレーブMySQLデータベースレプリケーションを設定する方法を学習します。この記事では、レプリケーションにMySQL8を使用します。
前提条件
- 2台のubuntuサーバー
- ルート特権ユーザーアカウント
- パッケージをダウンロードするためのインターネット接続
この例では、次のサーバーが使用されています。
- マスター– 192.168.178.135
- スレーブ– 192.168.178.137
両方のノードにMySQL8サーバーをインストールします
MySQLのインストールはシンプルで簡単なプロセスです。 Ubuntuシステムでは、MySQLはAPTパッケージリポジトリを使用してインストールできます。インストールする前に、次のコマンドを使用してUbuntuパッケージインデックスを更新します。
$apt update
以下のコマンドを使用してMySQLサーバーパッケージをインストールします。
$apt install mysql-server -y
MySQLサーバーを新たにインストールすると、セキュリティで保護されません。スクリプト「mysql_secure_installation」を実行します 」を使用して、リモートrootログイン、テストデータベース、サンプルユーザーなど、安全性の低いデフォルトオプションの一部を変更します。
$ mysql_secure_installation
MySQLサービスを開始して有効にします
$ systemctl start mysql
$ systemctl enable mysql
マスターDBサーバーの構成
次に、レプリケーションのためにマスターサーバーにいくつかの変更を加える必要があります。 mysqld.confを編集します ディレクトリ/etc/mysql/mysql.conf.dの下のファイル 次の行を追加します。 [mysqld]の下に構成変数を追加することを忘れないでください セクション。
$ vi /etc/mysql/mysql.conf.d/mysqld.conf
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log server-id = 1 log-bin = /var/log/mysql/mysql-bin.log tmpdir = /tmp binlog_format = ROW max_binlog_size = 800M sync_binlog = 1 expire-logs-days = 5 slow_query_log=1 slow_query_log_file=/var/lib/mysql/mysqld-slow.log
場所:
- server-id –MySQLサーバーの一意のID。このIDは、クラスター内のどのノードでも再利用できません。
- log-bin –これはすべてのレプリケーション情報が保存されているファイルです。
- max_binlog_size –binlogファイルのサイズ。
また、bind-addressに次のようにコメントします:
#bind-address =127.0.0.1
mysqlサービスを再起動します
$systemctl restart mysql
マスターノードでレプリケーションサービスの新しいユーザーを作成します
次に、接続時にスレーブが使用するデータベースユーザーをマスターノードに作成する必要があります。 rootユーザーを使用してデータベースにログインし、ユーザーを作成します。
$ mysql -u root -p
$ mysql> CREATE USER [email protected] IDENTIFIED BY '[email protected]';
注:ユーザーの作成中にIPアドレスを指定すると、指定したホストからのMySQL接続のみが受け入れられます。他のホストからの接続は拒否されます。この例では、MySQLスレーブサーバーのIPアドレスを使用しました。それに応じて、このIPアドレスをご使用の環境に変更する必要がある場合があります。
MySQLデータを複製できるようにするには、ユーザーにはREPLICATIONSLAVE特権が必要です。次のクエリを使用して、特権を付与します。
mysql> GRANT REPLICATION SLAVE on *.* to [email protected] ;
次のクエリを使用して、付与された権限を確認します。
mysql> SHOW GRANTS FOR [email protected];
スレーブDBノードの構成
前の手順でMySQLサーバーをすでにインストールしました。次に、レプリケーションプロセスを有効にするためにいくつかの構成ファイルを変更します。 mysqld.confを編集します /etc/mysql/mysql.conf.dの下のファイル ディレクトリを作成し、次のコンテンツを追加します。
$ vi /etc/mysql/mysql.conf.d/mysqld.conf
構成ファイルの内容:
[mysqld] log_bin = /var/log/mysql/mysql-bin.log server-id = 2 read_only = 1 tmpdir = /tmp binlog_format = ROW max_binlog_size = 800M sync_binlog = 1 expire-logs-days = 5 slow_query_log = 2
どこで、
- サーバーID –一意のMySQLサーバーID。
- read_only –スレーブノードが読み取り専用モードに設定されている
- log_bin –スレーブノードでバイナリロギングを有効にします
- slow_query_log –遅いクエリログを有効にします
また、bind-address行をコメントアウトします。
#bind-address =127.0.0.1
次に、MySQLサービスを再起動します
$systemctl restart mysql
スレーブサーバーをマスターサーバーに接続します
スレーブサーバーを構成する前に、マスターサーバーに移動してステータスを確認してください。
$ mysql -u root -p
mysql> SHOW MASTER STATUS\G
スレーブサーバーで使用する次のフラグに注意してください。
- ファイル:mysql-bin.000002
- 位置:156
次に、マスターサーバーの接続に使用されるスレーブサーバーのパラメーターを構成します。以下の手順に従ってください。
- ルートクレデンシャルを使用してMySQLサーバーにログインします
$ mysql -u root -p
- スレーブスレッドを停止します
mysql> STOP SLAVE;
- マスターサーバーを複製するようにスレーブサーバーをセットアップします
mysql> CHANGE MASTER TO MASTER_HOST='192.168.178.137', MASTER_USER='replication_user', MASTER_PASSWORD='[email protected]', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1050;
どこで、
- 192.168.178.137 –マスターサーバーのIPアドレス
- Replication_user –マスターサーバーのMySQLユーザー
- パスワード –レプリケーションユーザーのパスワード
- mysql-bin.000002 –マスターサーバーのログファイル
- 156 – マスターサーバーの位置をログに記録する
次に、スレーブサーバーをアクティブにします。
mysql> START SLAVE;
次のクエリを使用して、スレーブのステータスを確認します
mysql> SHOW SLAVE STATUS\G
次のフラグのステータスに注意してください。
- Slave_IO_Running:接続中
- Slave_IO_Running:接続中
マスター/スレーブレプリケーションを確認する
マスターとスレーブは複製するように構成されています。マスタースレーブレプリケーションが機能しているかどうかを確認できます。マスターサーバーで、MySQLシェルにログインし、テストデータベースを作成します。
$ mysql -u root -p
mysql> CREATE DATABASE example_db;
作成したデータベースを確認します。
mysql> SHOW DATABASES;
次に、スレーブサーバーにログインします
$ mysql -u root -p
次のクエリを実行して、データベースを一覧表示します。
mysql> SHOW DATABASES;
マスターサーバーで作成されたデータベースがスレーブサーバーに複製されていることがわかります。
結論
この記事では、Ubuntu20.04でMySQLマスターノードとスレーブノードを設定する方法を学びました。この記事に従って、Ubunutu18.04でもマスタースレーブMySQLレプリケーションを設定できます。