亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Docker容器實現(xiàn)MySQL多源復(fù)制場景分析

 更新時間:2022年06月13日 16:40:17   作者:IT邦德  
這篇文章主要介紹了Docker容器實現(xiàn)MySQL多源復(fù)制,通過本文學(xué)習(xí)可以掌握多源復(fù)制的好處,通過使用場景分析給大家介紹的非常詳細(xì),需要的朋友可以參考下

 

前言

在 MySQL 8.0 版本中,提供了多源復(fù)制,多源復(fù)制的出現(xiàn)對于分庫分表的業(yè)務(wù)提供了極大的便利,本文做了詳細(xì)的說明

?? 1.多源復(fù)制簡介

在 MySQL 8.0 版本中,提供了多源復(fù)制,多源復(fù)制的出現(xiàn)對于分庫分表的業(yè)務(wù)提供了極大的便利,目前我們已經(jīng)部署了多套多源復(fù)制供統(tǒng)計使用。MySQL 5.7 之前只能實現(xiàn)一主一從、一主多從或者多主多從的復(fù)制。如果想實現(xiàn)多主一從的復(fù)制,只能使用 MariaDB,但是 MariaDB 又與官方的MySQL 版本不兼容。
MySQL 5.7 開始支持了多主一從的復(fù)制方式,也就是多源復(fù)制。MySQL 8.0 版本相比之前的版本,無論在功能還是性能、安全等方面都已經(jīng)有不少的提升。
拓展:MySQL之父Widenius先生離開了Sun之后,覺得依靠Sun/Oracle來發(fā)展MySQL,實在很不靠譜,于是決定另開分支,這個分支的名字叫做MariaDB。

?????? 多源復(fù)制的好處:

可以集中備份,在從庫上備份,不會影響線上的數(shù)據(jù)正常運行
節(jié)約購買從庫服務(wù)器的成本,只需要一個從庫服務(wù)器即可
數(shù)據(jù)匯總在一起,方便后期做數(shù)據(jù)統(tǒng)計
減輕DBA維護(hù)工作量。

?? 2.多源復(fù)制使用場景

Backing up multiple servers to a single server.
Merging table shards.
Consolidating data from multiple servers to a single server.

如上圖,多源復(fù)制采用多通道的模式,和普通的復(fù)制相比,就是使用 FOR CHANNEL進(jìn)行了分離。
CHANGE MASTERTO…FORCHANNEL’m1’;
CHANGE MASTERTO…FORCHANNEL’m2’;
要開啟多源復(fù)制功能必須需要在從庫上設(shè)置 master-info-repository 和 relay-log-info-repository 這兩個參數(shù)。
這兩個參數(shù)是用來存儲同步信息的,可以設(shè)置的值為 FILE 和 TABLE,5.7默認(rèn)值是 FILE。
比如 master-info 就保存在 master.info 文件中,
relay-log-info 保存在 relay-log.info 文件中,
如果服務(wù)器意外關(guān)閉,正確的 relay-log-info 沒有來得及更新到 relay-log.info 文件,這樣會造成數(shù)據(jù)丟失。
為了數(shù)據(jù)更加安全,通常設(shè)為 TABLE。這些表都是 innodb 類型的,支持事務(wù)。
相對文件存儲安全得多。在 MySQL 庫下可以看見這兩個表信息,分別是 mysql.slave_master_info 和 mysql.slave_relay_log_info。
這兩個參數(shù)也是可以動態(tài)調(diào)整的。
SET GLOBAL master_info_repository=‘TABLE’;
SET GLOBAL relay_log_info_repository=‘TABLE’;

?? 3.多源復(fù)制部署

?????? 搭建過程支持GTID復(fù)制模式和binlog+position方式復(fù)制。

? 3.1 下載鏡像

docker pull mysql:8.0.27
–docker network create --subnet=172.72.0.0/24 mysql-network
docker rm -f mysql8027M33265 mysql8027M33266 mysql8027M33267 mysql8027M33268

? 3.2 創(chuàng)建映射目錄

mkdir -p /mysqlmultiple/master1/conf.d
mkdir -p /mysqlmultiple/master1/data
mkdir -p /mysqlmultiple/master2/conf.d
mkdir -p /mysqlmultiple/master2/data
mkdir -p /mysqlmultiple/master3/conf.d
mkdir -p /mysqlmultiple/master3/data
mkdir -p /mysqlmultiple/slave/conf.d
mkdir -p /mysqlmultiple/slave/data

? 3.3 創(chuàng)建容器,安裝MySQL

docker run -d --name mysql8027M33265 \
-h master1 -p 33265:3306 --net=mysql-network --ip 172.72.0.10 \
-v /mysqlmultiple/master1/conf.d:/etc/mysql/conf.d -v /mysqlmultiple/master1/data:/var/lib/mysql/ \
-e MYSQL_ROOT_PASSWORD=jem \
mysql:8.0.27

docker run -d --name mysql8027M33266 \
-h master2 -p 33266:3306 --net=mysql-network --ip 172.72.0.11 \
-v /mysqlmultiple/master2/conf.d:/etc/mysql/conf.d -v /mysqlmultiple/master2/data:/var/lib/mysql/ \
-e MYSQL_ROOT_PASSWORD=jem \
mysql:8.0.27

docker run -d --name mysql8027M33267 \
-h master3 -p 33267:3306 --net=mysql-network --ip 172.72.0.12 \
-v /mysqlmultiple/master3/conf.d:/etc/mysql/conf.d -v /mysqlmultiple/master3/data:/var/lib/mysql/ \
-e MYSQL_ROOT_PASSWORD=jem \
mysql:8.0.27

docker run -d --name mysql8027S33268 \
-h slave1 -p 33268:3306 --net=mysql-network --ip 172.72.0.13 \
-v /mysqlmultiple/slave/conf.d:/etc/mysql/conf.d -v /mysqlmultiple/slave/data:/var/lib/mysql/ \
-e MYSQL_ROOT_PASSWORD=jem \
mysql:8.0.27

? 3.4 參數(shù)文件配置

cat > /mysqlmultiple/master1/conf.d/my.cnf << "EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=
server-id = 802733265
log-bin =
binlog_format=row
expire_logs_days = 30
max_binlog_size = 100M
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys
gtid-mode=ON
enforce-gtid-consistency=on
skip_name_resolve
report_host=172.72.0.10
EOF

cat > /mysqlmultiple/master2/conf.d/my.cnf << "EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=
server-id = 802733266
log-bin =
binlog_format=row
expire_logs_days = 30
max_binlog_size = 100M
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
report_host=172.72.0.11
EOF

cat > /mysqlmultiple/master3/conf.d/my.cnf << "EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=
server-id = 802733267
log-bin =
binlog_format=row
expire_logs_days = 30
max_binlog_size = 100M
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
report_host=172.72.0.12
EOF

cat > /mysqlmultiple/slave/conf.d/my.cnf << "EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=''
server-id = 802733268
log-bin =
binlog_format=row
expire_logs_days = 30
max_binlog_size = 100M
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-ignore-db = sys
replicate_ignore_db=information_schema
replicate_ignore_db=performance_schema
replicate_ignore_db=mysql
replicate_ignore_db=sys
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
report_host=172.72.0.13
master-info-repository = table
relay-log-info-repository = table
EOF

docker restart mysql8027M33265
docker restart mysql8027M33266
docker restart mysql8027M33267
docker restart mysql8027S33268
docker ps

?????? 登陸容器,確認(rèn)數(shù)據(jù)
docker ps --format “table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}”

? 3.5 登陸MySQL

docker exec -it mysql8027M33265 mysql -uroot -pjem
mysql -uroot -pjem -h192.168.1.54 -P33265 -e "select @@hostname,@@server_id,@@server_uuid"
mysql -uroot -pjem -h192.168.1.54 -P33266 -e "select @@hostname,@@server_id,@@server_uuid"
mysql -uroot -pjem -h192.168.1.54 -P33267 -e "select @@hostname,@@server_id,@@server_uuid"
mysql -uroot -pjem -h192.168.1.54 -P33268 -e "select @@hostname,@@server_id,@@server_uuid"

遠(yuǎn)程登陸需要修改密碼
docker exec -it mysql8027M33266 mysql -uroot -pjem
mysql> alter user root@'%' identified with mysql_native_password by 'root';   --更改密碼
mysql>  flush privileges;
docker exec -it mysql8027S33268 mysql -uroot -pjem

?? 4.主從配置

? 4.1 主庫配置

--在 3 臺主庫
mysql -uroot -proot -h192.168.1.54 -P33265
mysql -uroot -proot -h192.168.1.54 -P33266
mysql -uroot -proot -h192.168.1.54 -P33267
mysql> create user repl@'%' identified with mysql_native_password by 'root';
mysql> grant all on *.* to repl@'%' with grant option;
mysql> flush privileges;
select user,host,grant_priv,password_last_changed,authentication_string from mysql.user;
show master status \G;
show slave hosts;
select @@hostname,@@server_id,@@server_uuid;

? 4.2 從庫配置

mysql -uroot -proot -h192.168.1.54 -P33268
change master to
master_host='172.72.0.10',
master_port=3306,master_user='repl',
master_password='root',
master_auto_position=1 FOR CHANNEL 'Master1';
show slave status \G;
-- 啟動所有 SLAVE
mysql> START SLAVE;
--主庫創(chuàng)建數(shù)據(jù)測試
mysql -uroot -proot -h192.168.1.54 -P33265
mysql> create database test;
--主庫2和3
change master to
master_host='172.72.0.11',
master_port=3306,
master_user='repl',
master_password='root',
master_auto_position=1 FOR CHANNEL 'Master2';
change master to
master_host='172.72.0.12',
master_port=3306,
master_user='repl',
master_password='root',
master_auto_position=1 FOR CHANNEL 'Master3';
-- 也可以單獨啟動需要同步的通道
START SLAVE FOR CHANNEL 'master2';
START SLAVE FOR CHANNEL 'master3';
select a.master_log_pos,a.host,a.user_name,a.user_password,a.port,a.uuid,a.channel_name 
from mysql.slave_master_info a;

?? 5.測試多源復(fù)制

-- mysql -uroot -proot -h192.168.1.54 -P33265
create database master1;
use master1;
CREATE TABLE `test1` (`id` int(11) DEFAULT NULL,`count` int(11) DEFAULT NULL);
insert into test1 values(1,1);
-- mysql -uroot -proot -h192.168.1.54 -P33266
create database master2;
use master2;
CREATE TABLE `test2` (`id` int(11) DEFAULT NULL,`count` int(11) DEFAULT NULL);
insert into test2 values(2,2);
-- mysql -uroot -proot -h192.168.1.54 -P33267
create database master3;
use master3;
CREATE TABLE `test3` (`id` int(11) DEFAULT NULL,`count` int(11) DEFAULT NULL);
insert into test3 values(3,3);
--從庫查詢
-- mysql -uroot -proot -h192.168.1.54 -P33268
show databases;
SELECT * FROM master1.test1;
SELECT * FROM master2.test2;
SELECT * FROM master3.test3;

?? 6. 注意的點

1、初次配置耗時較長,需要將各個 master 的數(shù)據(jù) dump 下來,再 source 到 slave 上。
2、需要考慮各 master 數(shù)據(jù)增長頻率,slave 的數(shù)據(jù)增長頻率是這些數(shù)據(jù)的總和。如果太高,會導(dǎo)致大量的磁盤 IO,造成數(shù)據(jù)更新延遲,最嚴(yán)重的是會影響正常的查詢。
3、如果多個主數(shù)據(jù)庫實例中存在同名的庫,則同名庫的表都會放到一個庫中;
4、如果同名庫中的表名相同且結(jié)構(gòu)相同,則數(shù)據(jù)會合并到一起;如果結(jié)構(gòu)不同,則先建的有效。

到此這篇關(guān)于Docker容器實現(xiàn)MySQL多源復(fù)制的文章就介紹到這了,更多相關(guān)Docker MySQL多源復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker?鏡像構(gòu)建保姆級入門示例教程

    Docker?鏡像構(gòu)建保姆級入門示例教程

    Dockerfile?是一個用來構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明,這篇文章主要介紹了Docker?鏡像構(gòu)建保姆級入門實戰(zhàn)指南,需要的朋友可以參考下
    2022-09-09
  • Docker容器實現(xiàn)SSH遠(yuǎn)程直連

    Docker容器實現(xiàn)SSH遠(yuǎn)程直連

    在某些特殊需求下,我們想ssh直接遠(yuǎn)程連接docker 容器,本文主要介紹了Docker容器實現(xiàn)SSH遠(yuǎn)程直連,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • 在Centos7中安裝Docker1.12的詳細(xì)教程

    在Centos7中安裝Docker1.12的詳細(xì)教程

    本篇文章主要介紹了在Centos7中安裝Docker1.12的詳細(xì)教程。具有一定的參考價值,有興趣的可以了解一下。
    2017-02-02
  • 用docker運行postgreSQL的方法步驟

    用docker運行postgreSQL的方法步驟

    這篇文章主要介紹了用docker運行postgreSQL的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Docker鏡像與容器的導(dǎo)入導(dǎo)出以及常用命令總結(jié)

    Docker鏡像與容器的導(dǎo)入導(dǎo)出以及常用命令總結(jié)

    Docker是一個開源的容器引擎,基于go語言開發(fā)并遵循了apache2.0協(xié)議開源,下面這篇文章主要給大家介紹了關(guān)于Docker鏡像與容器的導(dǎo)入導(dǎo)出以及常用命令總結(jié)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Docker啟動mysql服務(wù)的實現(xiàn)步驟

    Docker啟動mysql服務(wù)的實現(xiàn)步驟

    本文主要介紹了Docker啟動mysql服務(wù)的實現(xiàn)步驟,文中根據(jù)實例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Docker 刪除及清理鏡像的方法

    Docker 刪除及清理鏡像的方法

    本文主要介紹了Docker 刪除及清理鏡像的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Docker Compose引用環(huán)境變量的方法示例

    Docker Compose引用環(huán)境變量的方法示例

    在項目中,往往需要在 docker-compose.yml 文件中使用環(huán)境變量來控制不同的條件和使用場景。本文集中介紹 docker compose 引用環(huán)境變量的方式,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 詳解使用阿里云鏡像倉庫構(gòu)建國外Docker鏡像

    詳解使用阿里云鏡像倉庫構(gòu)建國外Docker鏡像

    這篇文章主要介紹了詳解使用阿里云鏡像倉庫構(gòu)建國外Docker鏡像,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Docker如何安裝Oracle 19c

    Docker如何安裝Oracle 19c

    這篇文章主要介紹了Docker如何安裝Oracle 19c問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論