Docker は mysql のマスター/スレーブ レプリケーションを実装します (膨大な詳細!!!)

新しいホスト サービス コンテナ インスタンスを作成する 3307

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

このコードは、Docker で mysql-master という名前の MySQL 5.7 データベース コンテナを起動し、それをホストの 3307 ポートにマップするために使用されるコマンドです。具体的なパラメータの意味は次のとおりです。

  • docker run: Docker コンテナーの作成と起動に使用される Docker コマンド。
  • -p 3307:3306: Docker コンテナの 3306 ポートをホストの 3307 ポートにマッピングします。
  • --name mysql-master: Docker コンテナの名前を指定します。
  • -v /mydata/mysql-master/log:/var/log/mysql: ホスト上のディレクトリ /mydata/mysql-master/log を、コンテナ内にデータベース ログ ファイルを保存するために使用される Docker コンテナの /var/log/mysql ディレクトリにマウントします。
  • -v /mydata/mysql-master/data:/var/lib/mysql: ホスト上のディレクトリ /mydata/mysql-master/data を、コンテナ内にデータベース ファイルを保存するために使用される Docker コンテナの /var/lib/mysql ディレクトリにマウントします。
  • -v /mydata/mysql-master/conf:/etc/mysql: ホスト上のディレクトリ /mydata/mysql-master/conf を、Docker コンテナの /etc/mysql ディレクトリにマウントします。このディレクトリは、コンテナに MySQL 構成ファイルを保存するために使用されます。
  • ` -e MYSQL_ROOT_PASSWORD=root: コンテナ内の MySQL データベースの root ユーザー パスワードを root に設定します。
  • -d mysql:5.7: Docker Hub の mysql:5.7 イメージを使用してコンテナーを作成し、バックグラウンドで実行します。

上記のパラメータに基づいて、このコマンドは mysql-master という名前の MySQL 5.7 データベース コンテナを作成し、それをホストのポート 3307 にマップします。同時に、コンテナ内のデータベースのログ ファイル、データ ファイル、構成ファイルが作成されます。指定されたホストにマウントされるディレクトリ。コンテナ内の MySQL データベースの root ユーザーのパスワードは ROOT に設定されます。コマンドはバックグラウンドで実行され、コンテナーの ID を返します。

/mydata/mysql-master/conf ディレクトリに入り、my.cnf を作成します。

cd /mydata/mysql-master/conf
vim my.cnf

[mysqld]
##同一局域网中需要唯一
server_id=101
##指定不需要同步的数据库每个in成
binlogn-ignore-db=mysql
##开启二进制日志功能
log_bin=mall-mysql-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
##二进制过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或之慈宁宫类型的错误,避免slave端复制中断
##如:1062错误是指一些主键重复,1032是指因为主从数据库数据不一致
slave_skip_errors=1062

構成を変更した後、マスター インスタンスを再起動します

docker restart mysql_master

mysql-masterコンテナに入ります

docker exec -it mysql_master /bin/bash
mysql-uroot-proot
  • mysql: MySQL クライアント プログラムを起動します。
  • -uroot: 接続ユーザー名をrootとして指定します。
  • -proot: root として接続するためのパスワードを指定します。

マスターコンテナインスタンスにデータ同期ユーザーを作成する

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*TO 'slave'@'%';

これらは、「slave」という名前のユーザーを作成し、そのユーザーにレプリケーション スレーブとレプリケーション クライアントに対する権限を付与するために使用される 2 つの MySQL データベース コマンドです。具体的なコマンドの意味は次のとおりです。

  1. CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    • CREATE USER: 新しいユーザーを作成します。
    • 'slave'@'%': 接続を許可されたユーザー名とホスト。ここで、ユーザー名は「slave」で、「%」は任意のホストからの接続を許可することを意味します。
    • IDENTIFIED BY '123456': ユーザーのパスワードを「123456」に設定します。
  2. GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    • GRANT: 指定したユーザーに権限を付与します。
    • REPLICATION SLAVE, REPLICATION CLIENT: レプリケーション スレーブとレプリケーション クライアントにアクセス許可を付与します。
    • *.*: 認可されるデータベースとテーブル。ここには、*.*すべてのデータベースとテーブルが表示されます。
    • TO 'slave'@'%': 権限を付与されたユーザーと接続を許可されたホスト。

上記のコマンドを組み合わせると、最初のコマンドは「slave」という名前のユーザーを作成し、そのパスワードを「123456」に設定して、任意のホストからの接続を許可します。2 番目のコマンドは、レプリケーション スレーブ データベースとレプリケーション クライアントに対するユーザー権限を付与し、すべてのデータベースとテーブルを承認します。このようにして、ユーザー「スレーブ」はレプリケーション スレーブとして MySQL マスター サーバーに接続し、データ レプリケーション操作を実行できます。

新しいサーバーコンテナインスタンスを作成する 3308

docker run -p 3308:3306 --name mysql_slave \
-v /mydata/mysql_slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

/mydata/mysql-slave/conf ディレクトリに入り、my.cnf を作成します。

cd /mydata/mysql-slave/conf
vim my.cnf

[mysqld]
##设置server_id,同一局域网需要唯一
server_id=102
##指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能,以备slave作为其他数据库实例的master时使用
log-bin=mall-mysql-slave1-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志模式(mixed,statement,row)
binlog_format=mixed
##二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或制动类型的错误,避免slave端复制中断
##如:1062错误是指一下主键重复,1032错误是因为主从数据不一致
slave_skip_errors=1062
##relay_log配置中继日志
relay_log=mall-mysql-relay-bin
##log_slave_updates表示slave将表示复制事件写进自己的二进制日志
log_slave_updates=1
##slave设置为只读(具有super权限的用户除外)
read_only-1

構成を変更した後、スレーブ インスタンスを再起動します

docker restart mysql-slave

マスターデータベースの同期ステータスを表示する

show master status;

mysql-slaveコンテナに入る

docker exec -it mysql-slave /bin/bsh
mysql -uroot -proot

スレーブデータベースでマスター/スレーブを構成する

change master to master_host='宿主机ip',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin,000001',master_log_pos=617,master_connect_retry=30;
  • CHANGE MASTER TO`: マスター/スレーブ レプリケーション構成を変更することを指定します。
  • MASTER_HOST='宿主机ip':メインサーバーのIPアドレス(またはホスト名)を設定します。
  • MASTER_USER='slave': メインサーバーのユーザー名を設定します。
  • MASTER_PASSWORD='123456':メインサーバーのパスワードを設定します。
  • MASTER_PORT=3307:メインサーバーのポート番号を設定します。
  • MASTER_LOG_FILE='mall-mysql-bin.000001': メインサーバーのバイナリログファイル名を設定します。
  • MASTER_LOG_POS=617: マスターサーバーのバイナリログの場所を設定します。
  • MASTER_CONNECT_RETRY=30:スレーブサーバーがマスターサーバーへの接続をリトライする間隔を設定します(単位:秒)。

このコマンドを実行すると、指定されたマスター サーバーに接続し、認証およびレプリケーション操作に指定された資格情報を使用するようにスレーブ サーバーが構成されます。'宿主机ip''slave''123456''mall-mysql-bin.000001'および を617正しいマスター サーバー情報に置き換えてください。

スレーブデータベースのマスターとスレーブの同期ステータスを確認します

show slave status \G;

ここに画像の説明を挿入します

スレーブ データベースでのマスターとスレーブの同期を有​​効にする

start slave;

データベースのステータスを確認し、同期されていることを確認します。

ここに画像の説明を挿入します

マスタースレーブレプリケーションテスト

ホスト上に新しいライブラリを作成します - ライブラリを使用します - 新しいテーブルを作成します - データを挿入します、OK
ここに画像の説明を挿入します

マシンからライブラリを使用します - レコードを表示します、OK

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_49750432/article/details/133252679