Dockerの実務経験(4)Dockerにmysql8マスタースレーブレプリケーションをデプロイする

ここに画像の説明を挿入

環境への準備

MySQL5を個人的に使用したことがないため、MySQL8バージョンのMySQLが必要です。また、2つの間に機能の違いがあるかどうかもわかりません。

デフォルトでは、環境は私のものと同じです。


簡単なバージョンのインストール

最初にMySQLを1つだけインストールします。マスターとスレーブの場合、多くの詳細が混ざり合います。

docker run -d -p 3306:3306 --privileged=true -v /mysql/log:/var/log/mysql -v /mysql/data:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456  --name mysql mysql

パラメータは次のとおりです。

-p:指定内外端口映射,虚拟机为外,docker 容器为内,写在前面的为外部端口,写在后面的为内部端口。因为 MySQL 本身端口为 3306,为了不使你们混淆,我外部端口不设置为 3306。
-v:指定内外存储卷映射,Docker 实践经验(三)讲的就是这个。
-e:往容器内部传参,最后会由 MySQL 来接收。关于这个 -e 其实我也还没研究它的一个走势。

このような単純なMySQLは移動できるようになります。


パスワードを設定してください

パスワードを設定しないと、次にログインしたいときにまだログインできるかどうかわかりません。
不確実とは、入ることができるかもしれないし、入ることができないかもしれないことを意味します。

そこで、安全のために自分でパスワードを設定しました。

mysql> use mysql

mysql> update user set authentication_string='123456' where user='root' and host='localhost';

mysql> flush privileges;

コメントしないでください。


MySQLがアクティブになったので、削除されたと見なすことができ、マスタースレーブレプリケーションの作成を開始します。

使用できるように保持する場合:
my.cnfを変更し、データボリュームを介してMySQLに同期します。

cd /mysql/conf
vim my.cnf
插入以下内容:
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

MySQLを再起動します。

docker restart mysql
docker exec -it mysql bash

MySQLマスタースレーブレプリケーションを構成する

ブリッジネットワークを作成し、IP範囲を指定します

docker network create --driver bridge mysql-master-slave

デフォルトのmysql接続数では不十分です

set global max_connections=500;
set global mysqlx_max_connections=500;

データと構成ストレージディレクトリを作成します

# 创建主库数据存放目录
mkdir -p /home/docker/mysql/master/data
# 创建主库配置存放目录
mkdir -p /home/docker/mysql/master/conf
 
# 创建从库1数据存放目录
mkdir -p /home/docker/mysql/slave1/data
# 创建从库1配置存放目录
mkdir -p /home/docker/mysql/slave1/conf

構成ファイルを準備する

マスターデータベース

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
 
secure-file-priv= NULL
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
# 服务器唯一ID,默认是1
server-id=10
 
# 启用二进制日志
log-bin=mysql-bin
 
# 最大连接数 
max_connections=10000
 
# 设置默认时区
default-time_zone='+8:00'
 
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
 
!includedir /etc/mysql/conf.d/

データベースから

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
 
secure-file-priv= NULL
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
# 服务器唯一ID,默认是1
server-id=11
 
# 启用二进制日志
log-bin=mysql-bin
 
# 最大连接数 
max_connections=10000
 
# 设置默认时区
default-time_zone='+8:00'
 
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
 
!includedir /etc/mysql/conf.d/

データベースを起動します

マスターデータベースを起動します

上記の手順を完全に実行した場合、ここのコマンドでパラメーターを変更する必要はありません。

docker run -d -p 3316:3306 --name mysql_master --restart=always --network mysql-master-slave -v /home/docker/mysql/master/data:/var/lib/mysql -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql

スレーブデータベースを起動します

docker run -d -p 3326:3306 --name mysql_slave1 --restart=always --network  mysql-master-slave -v /home/docker/mysql/slave1/data:/var/lib/mysql -v /home/docker/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql

リモートアクセス構成(マスタースレーブ)

# 在容器 mysql_master 中开启一个交互模式的终端
docker exec -it mysql_master /bin/bash
 
# 在容器 mysql_slave1 中开启一个交互模式的终端
docker exec -it mysql_slave1 /bin/bash
 
# mysql 登录
mysql -u root -p
 
# 给予远程用户所有表所有权限
GRANT ALL ON *.* TO 'root'@'%';
 
# 更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
 
# 远程访问
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
 
# 刷新权限
flush privileges;

マスターライブラリはレプリケーションユーザーを作成します

CREATE USER 'woniu'@'%' IDENTIFIED WITH mysql_native_password BY 'woniu123456';
 
GRANT REPLICATION SLAVE ON *.* TO 'woniu'@'%';

flush privileges;

マスターマシンのステータスを確認する

SHOW MASTER STATUS;

ここに画像の説明を挿入


ライブラリからマスターを設定するための情報

私の手順を完全に実行する場合は、自分のホストのIPと、上の図に示されている2つのデータを入力する必要があります。

change master to master_host='192.168.190.133', master_user='woniu', master_password='woniu123456', master_port=3316, master_log_file='mysql-bin.000003', master_log_pos=2838, master_connect_retry=30;

パラメータ定義:

master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。

マスタースレーブレプリケーションを有効にする

# 开始同步
start slave;
 
# 同步状态
show slave status \;

画像の説明を追加してください

成功した場合、丸で囲まれた場所はyesである必要があり、
失敗した場合、ログが表示されます。
画像の説明を追加してください

Baiduは自分で使用できますが、Baiduの結果が当てはまらない場合があります。結局、Dockerにデプロイされており、既存の資料はほとんどありません。
それは経験次第です。

おすすめ

転載: blog.csdn.net/qq_43762191/article/details/124230823