準備 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 ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
<<: jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法の詳しい説明
>>: Linux での Docker と portainer の設定方法
このスクリプトは、nginxの起動、停止、再起動の操作を満たすことができます。 #!/bin/bas...
https://docs.microsoft.com/ja-jp/windows/wsl/wsl-...
毎日の統計情報を取得するプロジェクトを実行する際、プロジェクト ログを分析する必要があります。要件の...
この記事では、主に js を使用して画像をモザイク化する方法の例を紹介し、次のように共有します。効果...
プロジェクトの目的元のWindows環境でphpstudyを使用して構築されたMySQL 5.5.5...
Mysql8.0.12 解凍版のインストール方法をテストしましたので、ご参考までに1. ダウンロー...
テストでは、ページ定義がutf-8でエンコードされている場合、 js ファイルに中国語などのマルチバ...
序文: Mybatis の特殊文字処理、Mybatis の xml ファイル内の特殊文字の処理、ここ...
目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...
問題を見つける最近、仕事中に問題が見つかりました。問題は、MySQL ディスクがいっぱいだったことで...
1. 基本的な Spring-boot クイックスタート1.1 クイックスタート pom.xml は...
この記事では、centos7 システムの nginx サーバーの下に phalcon 環境を構築する...
<br />関連記事: Web コンテンツ ページ作成のための 9 つの実用的なヒント、...
目次クラスコンポーネント機能コンポーネントsetStateの落とし穴React では多くの場所でデー...
1. スクロールの実装原理better-scroll のスクロール原理は、ブラウザのネイティブスクロ...