Ubuntu 16.04 で MySQL マスター スレーブ同期を設定する方法

Ubuntu 16.04 で MySQL マスター スレーブ同期を設定する方法

準備

1. マスターとスレーブのデータベースのバージョンは一致している必要があります

2. マスターデータベースとスレーブデータベースのデータは一貫性が保たれます

プライマリ データベース: 121.199.27.227 /ubuntu 16.04 MySQL 5.7.21 (Alibaba Cloud)

データベースから: 182.254.149.39 /ubuntu 16.04 MySQL 5.7.21 (Tencent Cloud)

ファイアウォールの設定

不要な攻撃を回避するために、特定の IP アドレスのみがデータベース ポートにアクセスできるようにマスター サーバーを構成します。

メインデータベースファイアウォール構成

# iptables -A 入力 -p tcp -s スレーブIP --dport 3306 -j 受け入れる
#重複レコードを回避するために既存の設定を削除します $ sudo iptables -D INPUT -p tcp -s 182.254.149.39 --dport 3306 -j ACCEPT 
$ sudo iptables -D 入力 -p tcp -s 127.0.0.1 --dport 3306 -j 受け入れる 
$ sudo iptables -D 入力 -p tcp --dport 3306 -j ドロップ 
$ sudo iptables -D 入力 -p udp --dport 3306 -j ドロップ 
$ sudo iptables -D 入力 -p sctp --dport 3306 -j ドロップ
#特定のアドレスのみがデータベースポートにアクセスできるように設定を追加します $ sudo iptables -A INPUT -p tcp -s 182.254.149.39 --dport 3306 -j ACCEPT
$ sudo iptables -A 入力 -p tcp -s 127.0.0.1 --dport 3306 -j 受け入れる
$ sudo iptables -A 入力 -p tcp --dport 3306 -j ドロップ
$ sudo iptables -A 入力 -p udp --dport 3306 -j ドロップ
$ sudo iptables -A 入力 -p sctp --dport 3306 -j ドロップ
$ sudo iptables -L -n
#設定を保存する $ sudo apt-get install iptables-persistent
$ sudo netfilter-persistent 保存
#設定は次の 2 つのファイルに保存されます: /etc/iptables/rules.v4 /etc/iptables/rules.v6。
#特に、denyhosts などの他のセキュリティ ソフトウェアがインストールされている場合は、実際に保存された内容を確認することをお勧めします。
#冗長なルールが記録される可能性があり、ライブラリのファイアウォール構成から手動で削除する必要があります# iptables -A OUTPUT -p tcp -d master_ip --dport 3306 -j ACCEPT
#重複レコードを避けるために既存の設定を削除します$ sudo iptables -D OUTPUT -p tcp -d 121.199.27.227 --dport 3306 -j ACCEPT
#設定を追加$ sudo iptables -A OUTPUT -p tcp -d 121.199.27.227 --dport 3306 -j ACCEPT
$ sudo iptables -L -n
#設定を保存 $ sudo apt-get install iptables-persistent
$ sudo netfilter-persistent 保存
#設定は次の 2 つのファイルに保存されます: /etc/iptables/rules.v4 /etc/iptables/rules.v6。
#特に、denyhosts などの他のセキュリティ ソフトウェアがインストールされている場合は、実際に保存された内容を確認することをお勧めします。
#冗長なルールが記録される可能性があり、手動で削除する必要があります

マスターデータベースマスター構成

1. MySQLの設定を変更する

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] セクションを次のように変更します。

[mysqld]
log-bin = /var/log/mysql/mysql-bin.log #バイナリログを開きます。デフォルトではコメントアウトされています。コメントを削除します。server-id = 1 #サーバーIDを設定します
bind-address = 0.0.0.0 #デフォルトは 127.0.0.1 です。ここでは、リモート アクセスを許可するために任意のアドレスに設定します。これを行う前に、ファイアウォールが正しく設定されていることを確認してください。正しく設定されていない場合、セキュリティ上のリスクが生じます。

2. MySQLを再起動し、同期用のユーザーアカウントを作成します。

ユーザーを作成して認証します: ユーザー: repl パスワード: slavepass

$ sudo サービス mysql を再起動します
$ mysql -u root -p -e "CREATE USER 'repl'@'182.254.149.39' IDENTIFIED BY 'slavepass';" #ユーザーの作成$ mysql -u root -p -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'182.254.149.39';" #権限の割り当て$ mysql -u root -p -e "flush privileges;" #権限の更新

3. マスターのステータスを確認し、バイナリ ファイル名 (mysql-bin.000001) と場所 (333802) を記録します。

$ mysql -u root -p -e "マスターステータスを表示;"
パスワードを入力してください: 
+------------------+----------+--------------+------------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------+
| mysql-bin.000001 | 333802 | | | |
+------------------+----------+--------------+------------------+------------------+

4. スレーブデータベースの最初のデータ同期のためにマスターデータベースをバックアップしてデータを準備します。

次のスクリプトを使用してデータベースのバックアップファイルを生成します

#ここではWordPressデータベースのバックアップを例に挙げます。datadump=`which mysqldump`
mysqluser="root"
userpass="パスワード" 
wordpressdb="wordpress"
バックアップwordpress_sql=$wordpressdb.`date +%Y%m%d`.sql
$datadump -u $mysqluser --password=$userpass -h localhost --opt $wordpressdb > $backupwordpress_sql 2>&1 の場合
それから
  echo " $wordpressdb のバックアップが成功しました"
それ以外
  echo " $wordpressdb のバックアップ エラー"
  出口1
フィ
#ファイルの末尾に「-- Dump complete on」があるかどうかを確認します。存在しない場合は、バックアップが失敗したことを意味します。
if [ 0 -eq "$(sed '/^$/!h;$!d;g' $backupwordpress_sql | grep -c "ダンプが完了しました")" ]; 
それから
 echo " $wordpressdb のバックアップ エラー"
 出口1 
それ以外
 echo " $wordpressdb のバックアップが成功しました"
フィ

スクリプトを実行して、最終出力バックアップが成功したことを確認します。

$ cd ~
$ sudo bash バックアップ_wordpress.sh

スレーブサーバーの構成

1. MySQLの設定を変更する

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

サーバー ID を変更します。各データベースのサーバー ID は一意である必要があり、互いに競合してはなりません。

[mysqld]
server-id = 2 #server-idを設定します。一意である必要があります。log_bin = /var/log/mysql/mysql-bin.log #ログを開くのも最適です。

2. データベースを初めて復元します。

$ sudo サービス mysql を再起動します
$ scp -P 22 -r [email protected]:~/wordpress.*.sql ./
#データの回復を妨げる可能性のある警告行を削除します。$ sed -i "/^mysqldump: \[警告\] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります\./d" wordpress.*.sql
$ mysql -u root -p -e "データベース wordpress を削除します。"
$ mysql -u root -p -e "データベース wordpress を作成します。"
$ mysql -u root -p wordpress < wordpress.*.sql

3. MySQL を再起動し、MySQL セッションを開いて、同期 SQL ステートメントを実行します (プライマリ サーバーのホスト名、ログイン資格情報、バイナリ ファイルの名前と場所が必要です)。

$ mysql -u root -p -e "MASTER を MASTER_HOST='121.199.27.227'、MASTER_USER='repl'、MASTER_PASSWORD='slavepass'、MASTER_LOG_FILE='mysql-bin.000001'、MASTER_LOG_POS=333802 に変更します。"

4. スレーブ同期プロセスを開始します。

$ mysql -u root -p -e "スレーブを起動します。"

5. スレーブのステータスを確認します。

$ mysql -u root -p -e "スレーブステータスを表示\G;"
パスワードを入力してください:
************************** 1. 行 ****************************
        Slave_IO_State: マスターがイベントを送信するのを待機中
         マスターホスト: 121.199.27.227
         マスターユーザー: repl
         マスターポート: 3306
        接続再試行: 60
       マスターログファイル:mysql-bin.000001
     読み取りマスターログ位置: 9448236
        リレー ログ ファイル: VM-114-251-ubuntu-relay-bin.000002
        リレーログ位置: 17780
    リレーマスターログファイル: mysql-bin.000001
       スレーブIO実行中: はい
      スレーブSQL実行中: いいえ
       レプリケート_Do_DB:
     レプリケート_無視_DB:
      テーブルの複製:
    無視テーブルを複製:
   Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
    ...

Slave_IO_Running と Slave_SQL_Running の両方が YES の場合、マスターとスレーブの同期設定が成功したことを意味します。次に、いくつかの検証を行うことができます。たとえば、マスター データベースのテスト データベースのテーブルにデータを挿入し、スレーブのテスト データベースの同じデータ テーブルに新しいデータがあるかどうかを確認して、マスター スレーブ レプリケーション機能が有効かどうかを検証します。また、スレーブをシャットダウン (mysql>stop slave;) してから、マスターを変更して、スレーブもそれに応じて変更されるかどうかを確認することもできます (スレーブを停止すると、マスターの変更はスレーブに同期されません)。これにより、マスター スレーブ レプリケーション機能が検証されます。

使用できるその他の関連パラメータ:

マスターがバイナリ ログを開くと、すべてのライブラリのすべてのテーブルに対する操作がデフォルトで記録されます。指定したデータベースまたは指定したテーブルに対する操作のみを記録するように設定できます。具体的には、MySQL 構成ファイルの [mysqld] セクションで次のオプションを追加および変更できます。

# どのデータベースが同期されていないか? binlog-ignore-db = mysql 
binlog-ignore-db = テスト 
binlog-ignore-db = 情報スキーマ 
# 特定のデータベースのみを同期し、それ以外のデータベースは同期しません。binlog-do-db = game

たとえば、以前にマスターステータスを確認すると、manual ライブラリと mysql ライブラリは無視され、test ライブラリのみが記録されていることがわかります。

要約する

上記は、編集者が紹介したUbuntu 16.04でのMySQLマスタースレーブ同期の設定方法です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残してください。編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • Ubuntu システムにおける Mysql ERROR 1045 (28000): ユーザー root@localhost へのアクセスが拒否される問題の解決方法
  • UbuntuでMySQLのルートパスワードを忘れた場合の解決策
  • Ubuntu での MySQL および MySQL Workbench のインストール チュートリアル
  • Ubuntu 16.04 に MySQL 5.7.17 をインストールした後、ログイン時に発生するエラー 1045 (28000): ユーザー ''root''@''localhost'' へのアクセスが拒否される問題を解決します。
  • Ubuntuにmysql5.7.10を手動でインストールする
  • Linux (Ubuntu) での MySQL 5.7.17 のインストールと設定のチュートリアル
  • Ubuntu 16.04 サーバーで MySQL を設定し、リモート接続を有効にする方法
  • Ubuntu Server で MySQL データベースを起動/停止/再起動する 3 つの方法の詳細な説明

<<:  jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法の詳しい説明

>>:  Linux での Docker と portainer の設定方法

推薦する

CentOS 8 に Docker をインストールする詳細なチュートリアル

1. 以前のバージョン yum 削除 docker docker-client docker-cli...

preタグを自動的に折り返すためのサンプルコード

pre 要素は、フォーマット済みのテキストを定義します。 pre 要素で囲まれたテキストでは、通常、...

MySQLの整数データ型tinyintの詳細な説明

目次1.1Tinyint型の説明1.2 練習環境の説明1.3 未署名属性の追加1.3.1 SQLモー...

Docker で Node.js をデプロイする方法

序文プロジェクトでは中間層としてNodeを使用し、Nodeのデプロイにはdockerを使用します。こ...

nginxのリソースキャッシュ設定の詳細な説明

私はずっとキャッシュについて学びたいと思っていました。結局のところ、キャッシュはフロントエンドのパフ...

MySQLのスイッチングデータ保存ディレクトリの実装方法

MySQLのスイッチングデータ保存ディレクトリの実装方法今日、仕事中に、mysql が保存されている...

Linuxのバージョン情報を復号化する方法

Linux バージョンに関する情報を表示および解釈するのは、見た目よりも少し複雑です。単純なバージョ...

Linux でファイルをあいまい検索するのに適したコマンドは何ですか?

1. はじめにこの記事では、主に Linux システムでコマンドライン ツールを使用してファイルを...

VSCode と SSH を使用したリモート開発

0. リモート開発が必要な理由組み込み Linux を開発する場合、便宜上、通常は Windows ...

Ubuntu システムにおけるネットワーク構成ファイルの分析と説明

今日は奇妙なネットワーク問題に遭遇しました。調査プロセスといくつかの構成状況を記録し、Linux で...

WeChatアプレットの下部にあるタブバーがコンテンツをブロックする問題に対処する簡単な方法

WeChatアプレットでタブバーを設定すると、重要なコンテンツがブロックされ、iPhoneXなどの異...

WeChatアプレットはシンプルなチャットルームを実装します

この記事では、WeChatアプレットの具体的なコードを共有し、簡単なチャットルームを実装します。具体...

CentOS 7 パスワードを忘れた場合の解決プロセス図

必要Windows システムでも Linux システムでも、さまざまな理由でパスワードを忘れてしまう...

mysqlは指定された期間内の統計データを取得します

mysqlは指定された期間内の統計データを取得します年別統計 選択 カウント(*)、 DATE_FO...

require/import キーワードを使用して v-for ループでローカル画像をインポートするいくつかの方法

目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...