Docker環境でのmysqlデータベースのマスタースレーブレプリケーションの構築

Docker環境でのmysqlデータベースのマスタースレーブレプリケーションの構築

1.mysqlサーバーを2台用意する

Dicker コマンドを使用して、最初のサーバーに mysql マスター データベースをインストールします。

docker run --name mysql_master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

コマンドの説明:

通过镜像 mysql:latest 启动一个名为 mysql_master 的 MySQL 服务器,
端口号是3306,
映射的宿主机端口号是3306,
root 账号密码是123456

画像-20210813164653463

同じコマンドを使用してスレーブ データベースをインストールします。

docker run --name mysql_slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

コンテナーのインストールを表示: docker ps -a

画像-20210813182923732

コンテナ内に移動して、構成ファイル –my.cnf を変更します。

docker exec -it a448f237b877 /bin/bash
#进入到文件夹中
cd /etc/mysql
# 修改配置文件
vi my.cnf

#如果出现报错:vim: command not found
#则先安装编辑插件:先执行:
apt-get update
#再执行
apt-get install vim


構成ファイルを変更します。

[mysqld]
## 设置server_id,一般设置为IP,同一局域网内注意要唯一
server_id=100  
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=edu-mysql-bin  
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  

mysqlコンテナを終了して再起動します

dockers restart mysql_master

プライマリ データベースにデータ同期ユーザーを作成します。

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

2. スレーブサーバーの設定

構成ファイル –my.cnf も変更します

[mysqld]
## 设置server_id,一般设置为IP,注意要唯一
server_id=101  
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin  
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed  
## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## 防止改变数据(除了特殊的线程)
read_only=1  

3. マスターリンクとスレーブリンクを完了します

同期されていないデータベースを除き、他のデータベースのデータがマスターとスレーブ間で一貫していることを確認する必要があることに注意してください。
マスターで MySQL を入力し、次のコマンドを実行します。

show master status;

画像-20210813185749805

[ファイル] フィールドと [位置] フィールドの値を記録します。これは後で使用します。

次に、スレーブの mysql に移動し、次のコマンドを実行します。

change master to master_host='10.10.246.13', master_user='slave', master_password='123456', master_port=3306, master_log_file='edu-mysql-bin.000001', master_log_pos=156, master_connect_retry=30;  

コマンドの説明:

master_host: Master 的IP地址
master_user:Master 中授权的用于数据同步的用户
master_password: 同步数据的用户的密码
master_port: Master 的数据库的端口号
master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。

スレーブの MySQL ターミナルで実行して、マスターとスレーブの同期ステータスを表示します。

show slave status \G;

結果:

画像-20210813190342406

SlaveIORunning と SlaveSQLRunning は No で、スレーブがレプリケーション プロセスを開始していないことを示します。逆に、SlaveIORunning と SlaveSQLRunning は Yes であり、すでに実行しているため、それらが動作し始めていることを示しており、表示は Yes になっています。

次のコマンドを実行して、マスターとスレーブの同期を開始します。

start slave;

結果: SlaveSQLRunning が Yes になります。

画像-20210813190704477

これで完了です。

4. 実際のテスト

最後のステップは、同期できるかどうかをテストすることです。テスト方法は多数あります。データベースをマスターに追加し、スレーブに移動して同期されているかどうかを確認できます。同期されていない場合は、構成ファイルと構成プロセスを注意深く確認してください。

マスター上に新しいデータベースを作成した後、同時にスレーブ上にも新しいデータベースが作成され、構成は成功します。

画像-20210813191737937

おすすめ

転載: blog.csdn.net/SHUKAI618/article/details/119721201