CentOS7でMySQL5.7を一主多從構成に設定する

/usr/share/mysql/charsets/| サーバー | IPアドレス | OS | MySQLバージョン | |---|---|---|---| | Mysql_master | 192.168.188.11 | CentOS7 | 5.7 | | Mysql_slave1 | 192.168.188.12 | CentOS7 | 5.7 | | Mysql_slave2 | 192.168.188.13 | CentOS7 | 5.7 |

  1. MySQL 5.7のインストール1) YUMリポジトリを設定します。```

MySQLリポジトリのパッケージをダウンロード

shell> wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

MySQLリポジトリをインストール

shell> yum localinstall mysql57-community-release-el7-8.noarch.rpm


リポジトリが正常に追加されているか確認します。```
shell> yum repolist enabled | grep "mysql.*-community.*"
  1. MySQLをインストールします。``` shell> yum install mysql-community-server

3) MySQLサービスを起動します。```
shell> systemctl start mysqld

MySQLの状態を確認します。``` shell> systemctl status mysqld


4) システム起動時に自動起動を設定します。```
shell> systemctl enable mysqld
shell> systemctl daemon-reload
  1. ローカルログイン用のrootパスワードを変更します。インストール後、/var/log/mysqld.logファイルに初期パスワードが生成されます。以下のコマンドでパスワードを取得し、MySQLにログインして変更してください:``` shell> grep 'temporary password' /var/log/mysqld.log

shell> mysql -u root -p mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!'; 或者 mysql> set password for 'root'@'localhost'=password('NewPass123!');


注意:MySQL 5.7はデフォルトでパスワードの強度チェックプラグイン(validate_password)が有効です。このため、パスワードには大文字・小文字、数字、特殊文字を含め、少なくとも8文字以上にする必要があります。そうでない場合、エラーが発生します。6) MySQLにログインします。```
mysql -u root -p
  1. 接続可能なIPを設定します。例えば、IPアドレス192.168.188.62からの接続を許可する場合:``` GRANT ALL PRIVILEGES ON . TO 'root'@'192.168.188.62' IDENTIFIED BY 'password' WITH GRANT OPTION;

8) 変更を反映します。```
flush privileges;
  1. ファイアウォールを設定します。``` // 3306ポートを開放 firewall-cmd --zone=public --add-port=3306/tcp --permanent // ファイアウォールを再読み込み firewall-cmd --reload // 開放中のポートを確認 firewall-cmd --list-ports

上記の手順はすべてのサーバーで実施してください。 マスターサーバーの設定1) 設定内容/etc/my.cnfファイルに以下を追加します:```
# server_idをIPに設定
server_id=18811
# バックアップが必要なデータベース
binlog-do-db=dfs
# バックアップ不要なデータベース
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 二進数ログを有効化
log-bin=master-bin
  1. MySQLを再起動します。``` service mysqld restart

3) MySQLにログインし、リモート接続用のユーザーを作成します。```
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.188.12' IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.188.13' IDENTIFIED BY 'password' WITH GRANT OPTION;
flush privileges;
  1. 設定が成功したか確認します。``` mysql> select user,host from mysql.user;

5) マスターの状態を確認します。```
mysql> show master status\G;

FileとPositionの値を控えておき、スレーブの設定に使用します。6) 再設定を行う場合は、以下のコマンドで初期化できます。``` mysql> reset master;


スレーブ1の設定1) 設定内容/etc/my.cnfファイルに以下を追加します:```
# server_idをIPに設定
server_id=18812
# バックアップが必要なデータベース
binlog-do-db=dfs
# バックアップ不要なデータベース
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
# 二進数ログを有効化
log-bin=slave1-bin
  1. MySQLを再起動し、マスターに接続します。``` service mysqld restart

3) スレーブを停止します。```
mysql> stop slave;
  1. マスター情報を設定します。``` mysql> change master to master_host='192.168.188.11', master_user='root', master_password='password', master_log_file='master-bin.000002', master_log_pos=928;

5) スレーブの状態を確認します。```
mysql> show slave status\G;
  1. スレーブを開始します。``` mysql> start slave;

再度状態を確認すると、Statusがyesになるはずです。```
mysql> show slave status\G;

スレーブ2の設定スレーブ2の設定方法はスレーブ1と同じですが、いくつかの設定項目が異なります。1) 設定内容/etc/my.cnfファイルに以下を追加します:```

server_idをIPに設定

server_id=18813

バックアップが必要なデータベース

binlog-do-db=dfs

バックアップ不要なデータベース

binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=sys

二進数ログを有効化

log-bin=slave2-bin


2) MySQLを再起動し、マスターに接続します。```
service mysqld restart
  1. スレーブを停止します。``` mysql> stop slave;

4) マスター情報を設定します。```
mysql> change master to master_host='192.168.188.11', master_user='root', master_password='password', master_log_file='master-bin.000002', master_log_pos=928;
  1. スレーブの状態を確認します。``` mysql> show slave status\G;

6) スレーブを開始します。```
mysql> start slave;

再度状態を確認すると、Statusがyesになるはずです。``` mysql> show slave status\G;


これで完了です。マスターサーバーで操作を行えば、すべてのスレーブに同期されます。

タグ: MySQL CentOS Replication configuration linux

7月14日 20:51 投稿