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 の設定方法

推薦する

シェルスクリプト nginx 自動化スクリプト

このスクリプトは、nginxの起動、停止、再起動の操作を満たすことができます。 #!/bin/bas...

Docker での WSL の構成と変更の問題について

https://docs.microsoft.com/ja-jp/windows/wsl/wsl-...

一定期間の日ごと、時間ごとの統計データを取得するMySQLの詳しい説明

毎日の統計情報を取得するプロジェクトを実行する際、プロジェクト ログを分析する必要があります。要件の...

js を使用して画像をモザイク化する方法の例

この記事では、主に js を使用して画像をモザイク化する方法の例を紹介し、次のように共有します。効果...

phpstudy から Linux への MySQL の移行に関するチュートリアル

プロジェクトの目的元のWindows環境でphpstudyを使用して構築されたMySQL 5.5.5...

MySQL 8.0.12 解凍版インストールチュートリアル個人テスト!

Mysql8.0.12 解凍版のインストール方法をテストしましたので、ご参考までに1. ダウンロー...

IE6 で JS エラーが発生し、CSS が適用されない HTML エンコードの問題の解決策

テストでは、ページ定義がutf-8でエンコードされている場合、 js ファイルに中国語などのマルチバ...

Mybatisの特殊文字処理の詳細な説明

序文: Mybatis の特殊文字処理、Mybatis の xml ファイル内の特殊文字の処理、ここ...

Idea の起動速度を改善し、Tomcat ログの文字化けを解決する方法

目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...

MySQL がエラーを報告: ファイルが見つかりません: './mysql/plugin.frm' 解決策

問題を見つける最近、仕事中に問題が見つかりました。問題は、MySQL ディスクがいっぱいだったことで...

Docker で Spring-boot プロジェクトをデプロイするためのサンプル コード

1. 基本的な Spring-boot クイックスタート1.1 クイックスタート pom.xml は...

Centos7 システム上の nginx サーバーで Phalcon 環境を構築する方法の詳細な説明

この記事では、centos7 システムの nginx サーバーの下に phalcon 環境を構築する...

ハイパーリンクのWebデザイン原則

<br />関連記事: Web コンテンツ ページ作成のための 9 つの実用的なヒント、...

Reactの3つの主要属性における状態の使用の詳細な説明

目次クラスコンポーネント機能コンポーネントsetStateの落とし穴React では多くの場所でデー...

Vue は better-scroll を使用して水平スクロール方法の例を実現します

1. スクロールの実装原理better-scroll のスクロール原理は、ブラウザのネイティブスクロ...