MySQLデータベースのマスタースレーブ同期の実際のプロセスの詳細な説明

MySQLデータベースのマスタースレーブ同期の実際のプロセスの詳細な説明

この記事では、MySQL データベースのマスター スレーブ同期の実際のプロセスについて説明します。ご参考までに、詳細は以下の通りです。

前の記事の続き: MySQL データベース入門: データベースのバックアップ

インストール環境の説明

システム環境:

[root@~]# cat /etc/redhat-release 
CentOS リリース 6.5 (最終)
[root@~]# uname -r
2.6.32-431.el6.x86_64

データベース:

シミュレーション環境なので、マスターライブラリとスレーブライブラリは同じサーバー上にあり、サーバーのIPアドレスは192.168.1.7です。

  • メインライブラリはポート3306を使用します
  • ライブラリからポート3307を使用する
  • データベースデータディレクトリ/データ

MySQLデータベースサービスをインストールする

パッケージをダウンロードする

今回はバイナリインストールパッケージを使用してMySQLデータベースサービスを展開します。その他のインストールおよび展開方法については、前回の記事を参照してください。

[root@~]#wget http://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.51-linux2.6-x86_64.tar.gz

データディレクトリとソフトウェアインストールディレクトリを作成する

[root@~]#mkdir /data{3306,3307} -p
[root@~]#mkdri /アプリケーション

解凍ソフトウェア

[root@~]#tar zxf mysql-5.5.51-linux2.6-x86_64.tar.gz 
[root@~]#mv mysql-5.5.51-linux2.6-x86_64 /application/mysql-5.5.51
[root@~]#ln -s /application/mysql-5.5.51 /application/mysql

ユーザーを作成

[root@~]#groupadd mysql
[root@~]#useradd -g mysql -M mysql

データベースを初期化する

[root@~]#/application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql

[root@~]#/application/mysql/scripts/mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql

設定ファイルを作成する

[root@~]#vi /data/3306/my.cnf
[クライアント]
ポート = 3306
ソケット = /data/3306/mysql.sock

[mysql]
自動再ハッシュなし

[mysqld]
ユーザー = mysql
ポート = 3306
ソケット = /data/3306/mysql.sock
ベースディレクトリ = /application/mysql
データディレクトリ = /data/3306/data
オープンファイル制限 = 1024
バックログ = 600

最大接続数 = 800
最大接続エラー数 = 3000
テーブルキャッシュ = 614
外部ロック = FALSE
最大許容パケット = 8M
ソートバッファサイズ = 1M
結合バッファサイズ = 1M
スレッドキャッシュサイズ = 100
スレッド同時実行性 = 2
クエリキャッシュサイズ = 2M
クエリキャッシュ制限 = 1M
クエリキャッシュ最小解像度単位 = 2k
スレッドスタック = 192K
tmp_table_size = 2M
最大ヒープテーブルサイズ = 2M
長いクエリ時間 = 1

pid ファイル = /data/3306/mysql.pid
ログ bin = /data/3306/mysql-bin
#マスタースレーブ同期の重要なポイントは、スレーブがリレーログを開く必要がないことです = /data/3306/relay-bin
リレーログ情報ファイル = /data/3306/relay-log.info
binlog_cache_size = 1M
最大バイナリログキャッシュサイズ = 1M
最大バイナリログサイズ = 2M
有効期限切れログ日数 = 7
キーバッファサイズ = 16M
読み取りバッファサイズ = 1M
読み取りバッファサイズ = 1M
バルク挿入バッファサイズ = 1M
小文字のテーブル名 = 1
名前解決をスキップ
スレーブスキップエラー = 1032,1062
複製無視DB=mysql
server-id = 1 #マスターIDとスレーブIDは同じにできません [mysqldump]
素早い
最大許容パケット = 2M

[mysqld_safe]
ログエラー=/data/3306/mysql3306.err
pidファイル=/data/3306/mysqld.pid

データベース起動スクリプト:

[root@~]#vi /data/3306/mysql
#!/bin/sh
ポート=3306
ユーザー="root"
パスワード=”123456”
パス="/application/mysql/bin"
sock="/data/${port}/mysql.sock"

開始_mysql()
{
 if [ ! -e "$sock" ];then
  printf "MySQL を起動しています...\n"
  /bin/sh ${Path}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &
 それ以外
  printf "MySQL が実行中です...\n"
  出口
 フィ
}
stop_mysql()
{
 if [ ! -e "$sock" ];then
  printf "MySQL は停止しています...\n"
  出口
 それ以外
  printf "MySQL を停止しています...\n"
  ${Path}/mysqladmin -u ${user} -p${pwd} -S /data/${port}/mysql.sock シャットダウン
 フィ
}
再起動()
{
 printf "MySQL を再起動しています...\n"
 停止_mysql
 睡眠2
 開始_mysql
}
ケース$1
始める)
 開始_mysql
;;
停止)
 停止_mysql
;;
再起動)
 再起動_mysql
;;
*)
 printf "使用方法: /data/${port}/mysql {start|stop|restart}\n"
エサック

注: マスター/スレーブ ライブラリ構成ファイルは、起動ファイルと同じです。構成を完了するには、ポートとサーバー ID を変更するだけです。

ディレクトリを承認し、スタートアップファイルの実行権限を増やす

[root@~]#chown -R mysql.mysql /data
[root@~]#find /data -name mysql -exex chmod +x {} \;

データベースを起動する

[root@~]#/data/3306/mysql スタート
[root@~]#/data/3307/mysql スタート

デフォルトのデータベースパスワードを変更する

[root@~]#mysqladmin -uroot パスワード '123456' -S /data/3306/mysql.sock
[root@~]#mysqladmin -uroot パスワード '123456' -S /data/3307/mysql.sock

テストログインでは、2つのデータベースにログインしてインストールプロセス全体を完了できます。

メインライブラリを構成する

1) メインデータベースをバックアップする

mkdir /バックアップ

メインデータベースにログインしてユーザーを作成し、承認します

[root@~]#mysql -uroot -p123456 -S /data/3306/mysql.sock

mysql> '123456' で識別される rep@'192.168.1.%' に *.* のレプリケーション スレーブを許可します。

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> 権限をフラッシュします。

クエリは正常、影響を受けた行は 0 行 (0.00 秒)

テーブルロック操作を実行する

[root@~]#/application/mysql/bin/mysql -uroot -p123456 -S /data/3306/mysql.sock -e "読み取りロックでテーブルをフラッシュします。"

マスターデータベースをバックアップする

[root@~]#/application/mysql/bin/mysql -uroot -p123456 -S /data/3306/mysql.sock -e "マスターステータスを表示;" >/backup/mysql.log

[root@~]#/application/mysql/bin/mysqldump -uroot -p123456 -S /data/3306/mysql.sock -A -B |gzip >/backup/mysql.sql.gz

ロックされたテーブルの状態を解除する

[root@~]#/application/mysql/bin/mysql -uroot -p123456 -S /data/3306/mysql.sock -e "テーブルのロックを解除します。"

注意: 上記の操作は、メイン データベースにログインして実行することもできます。ただし、ロック テーブル操作を実行した後は、データをバックアップするために別のウィンドウを開く必要があることに注意してください。データが書き込まれてバックアップ データが不完全になるのを防ぐため、直接終了することはできません。非対話型操作を使用するのが最適です。

マスタースレーブ同期を実現するためにスレーブライブラリを構成する

メインライブラリのバックアップファイルを解凍し、データベースを復元します

[root@バックアップ]#gzip -d mysql.sql.gz

[root@backup ]#/application/mysql/bin/mysql -uroot -p123456 -S /data/3307/mysql.sock < mysql.sql

ログを表示

[root@バックアップ]#cat mysql.log
+------------------+----------+--------------+------------------+
| ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 424 | | |
+------------------+----------+--------------+------------------+

スレーブライブラリにログインし、次の操作を実行します。

mysql> マスターを変更する
 -> MASTER_HOST='192.168.1.7'、#サーバーIP
 -> MASTER_PORT=3306、#マスターデータベースポート-> MASTER_USER='rep'、#同期ユーザー-> MASTER_PASSWORD='123456'、#同期ユーザーパスワード-> MASTER_LOG_FILE='mysql-bin.000002'、#binlogファイル-> MASTER_LOG_POS=424; #位置ポイントmysql> start slave; #同期を開始

同期ステータスを確認するには60秒お待ちください

[root@backup ]# mysql -S /data/3307/mysql.sock -e "show slave status\G"|egrep "Seconds_Behind_Master|_Running"
   スレーブIO実行中: はい
   スレーブSQL実行中: はい
   マスターより遅れている秒数: 0

上記の状況が発生する限り、マスタースレーブ同期が成功したことを意味します。

マスタースレーブ同期をテストする

メインライブラリにデータベースを作成する

[root@backup ~]# mysql -S /data/3306/mysql.sock -e "データベース tongbuku を作成"

[root@backup ~]# mysql -S /data/3306/mysql.sock -e "データベースを表示"
+-----------------------------+
| データベース |
+-----------------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
| テスト |
|トンブク |
+-----------------------------+

スレーブライブラリの同期ステータスを確認する

[root@backup ~]# mysql -S /data/3307/mysql.sock -e "データベースを表示"
+-----------------------------+
| データベース |
+-----------------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
| テスト |
|トンブク |
+-----------------------------+

これは、マスター スレーブ同期ステータスが正常であることを示します。マスター データベースの新しいデータ テーブルにテーブルを作成し、新しいデータを挿入して、マスター スレーブ同期ステータスをテストすることもできます。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQL マスター スレーブ データベースが同期されない問題を解決する 2 つの方法
  • Mysql データベースのマスタースレーブ同期構成
  • この記事では、MySQLのマスタースレーブ同期の原理を説明します。
  • Docker環境でMySQLを実行し、Binlogを有効にしてマスタースレーブ同期を構成する方法
  • MySQL マスタースレーブ同期、トランザクションロールバックの実装原理
  • MySQL マスタースレーブ同期における server-id の例の詳細な説明
  • MySQLデータベースのマスタースレーブ同期構成と読み取り書き込み分離
  • MySQL マスタースレーブ同期の原理と応用

<<:  vueプロジェクトは特定の領域に透かしを描くことを実現する

>>:  jsBridgeの動作メカニズムを1つの記事で学ぶ

推薦する

Node.js での組み込みモジュールとカスタムモジュールの実装

1. コモンズCommonjsはNode.jsのカスタムモジュールですCommonjs 仕様は、Ja...

MySQL kill コマンドの使用ガイド

KILL [接続 | クエリ] processlist_id MySQL では、各接続は個別のスレ...

sshとは何ですか?使い方は?どのような誤解があるのでしょうか?

目次序文SSHとは何かssh は何に使用されますか? sshの使い方ssh 再修正要約する序文ssh...

Linux/Mac MySQL パスワードを忘れた場合の対処方法

Linux/Mac の MySQL パスワードを忘れた場合はどうすればいいですか?心配しないでくださ...

手書きの Vue2.0 データハイジャックの例

目次1: webpackをビルドする2. データハイジャック3: まとめ1: webpackをビルド...

nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明

序文add_header は、headers モジュールで定義されたディレクティブです。名前が示すよ...

WeChat アプレット計算機の例

WeChatアプレット計算機の例、参考までに、具体的な内容は次のとおりです。インデックス.wxml ...

MySQL システム ユーザーが開くことができるファイルの最大数に関する簡単な説明

本から学ぶことは常に浅はかで、これがさらなるダウンタイムを引き起こすことには決して気づきません......

HTML で 2 つの div タグの間に垂直線を描く方法

最近、インターフェースを描画しているときに、インターフェースに垂直線を描画し、この垂直線の高さが親 ...

カスタム Docker イメージを作成するための Dockerfile の詳細な説明と CMD と ENTRYPOINT 命令の比較

1. 概要Docker イメージを作成するには、次の 3 つの方法があります。 Docker コミッ...

CentOS サーバーに FFmpeg をインストールするための完全な手順

序文サーバーシステム環境は、CentOS 6.5 (最終) です。 FFmpeg をサーバーに正常に...

HTMLは読み取り専用のテキストボックスを実装しており、コンテンツを変更することはできません。

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 <!--方法 1: onf...

CSSスタイルの記述順序と命名規則と注意事項

書き順の重要性ブラウザのリフローを減らし、ブラウザのDOMレンダリングパフォーマンスを向上させる①:...

格納可能なセカンダリメニューを実装するための JavaScript

JavaScriptで格納可能なセカンダリメニューを実装するための具体的なコードは参考までに。具体...

ES6のシンボルデータ型について詳しく説明します

目次シンボルデータタイプシンボルが表示される理由シンボルの特徴シンボルの応用rbオブジェクトにupメ...