最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

 

前言

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

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

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

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

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

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

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’;
要開(kāi)啟多源復(fù)制功能必須需要在從庫(kù)上設(shè)置 master-info-repository 和 relay-log-info-repository 這兩個(gè)參數(shù)。
這兩個(gè)參數(shù)是用來(lái)存儲(chǔ)同步信息的,可以設(shè)置的值為 FILE 和 TABLE,5.7默認(rèn)值是 FILE。
比如 master-info 就保存在 master.info 文件中,
relay-log-info 保存在 relay-log.info 文件中,
如果服務(wù)器意外關(guān)閉,正確的 relay-log-info 沒(méi)有來(lái)得及更新到 relay-log.info 文件,這樣會(huì)造成數(shù)據(jù)丟失。
為了數(shù)據(jù)更加安全,通常設(shè)為 TABLE。這些表都是 innodb 類(lèi)型的,支持事務(wù)。
相對(duì)文件存儲(chǔ)安全得多。在 MySQL 庫(kù)下可以看見(jiàn)這兩個(gè)表信息,分別是 mysql.slave_master_info 和 mysql.slave_relay_log_info。
這兩個(gè)參數(shù)也是可以動(dòng)態(tài)調(diào)整的。
SET GLOBAL master_info_repository=‘TABLE’;
SET GLOBAL relay_log_info_repository=‘TABLE’;

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

?????? 搭建過(guò)程支持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 主庫(kù)配置

--在 3 臺(tái)主庫(kù)
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 從庫(kù)配置

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;
-- 啟動(dòng)所有 SLAVE
mysql> START SLAVE;
--主庫(kù)創(chuàng)建數(shù)據(jù)測(cè)試
mysql -uroot -proot -h192.168.1.54 -P33265
mysql> create database test;
--主庫(kù)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';
-- 也可以單獨(dú)啟動(dòng)需要同步的通道
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.測(cè)試多源復(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);
--從庫(kù)查詢
-- mysql -uroot -proot -h192.168.1.54 -P33268
show databases;
SELECT * FROM master1.test1;
SELECT * FROM master2.test2;
SELECT * FROM master3.test3;

?? 6. 注意的點(diǎn)

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

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

相關(guān)文章

  • Docker容器添加新端口映射的方法與詳細(xì)步驟

    Docker容器添加新端口映射的方法與詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于Docker容器添加新端口映射的方法與詳細(xì)步驟,Docker 端口映射即映射容器內(nèi)應(yīng)用的服務(wù)端口到本機(jī)宿主機(jī)器,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱(設(shè)計(jì)思路)

    Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱(設(shè)計(jì)思路)

    這篇文章主要介紹了Docker容器定時(shí)備份數(shù)據(jù)庫(kù)并發(fā)送到指定郵箱,文中寫(xiě)了一下shell腳本,邏輯也很簡(jiǎn)單,當(dāng)前時(shí)間與啟動(dòng)時(shí)間相同時(shí),則調(diào)用sendmail函數(shù)發(fā)送郵件,具體腳本跟隨小編一起看看吧
    2022-01-01
  • 如何查看docker-compose.yml所在位置

    如何查看docker-compose.yml所在位置

    這篇文章主要介紹了如何查看docker-compose.yml所在位置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Docker如何刪除鏡像

    Docker如何刪除鏡像

    本文詳細(xì)介紹了如何使用Docker刪除鏡像,包括查看鏡像、刪除單個(gè)鏡像、刪除多個(gè)鏡像、刪除所有鏡像以及注意事項(xiàng),刪除鏡像是一個(gè)常見(jiàn)的操作,用于清理不再需要的鏡像,以節(jié)省存儲(chǔ)空間
    2025-03-03
  • docker-compose搭建mongodb、mysql的詳細(xì)過(guò)程

    docker-compose搭建mongodb、mysql的詳細(xì)過(guò)程

    這篇文章主要介紹了docker-compose搭建mongodb、mysql的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11
  • Docker在Windows環(huán)境的搭建和使用詳解

    Docker在Windows環(huán)境的搭建和使用詳解

    這篇文章主要介紹了Docker在Windows環(huán)境的搭建和使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • docker-compose啟動(dòng)minio方式

    docker-compose啟動(dòng)minio方式

    文章介紹了創(chuàng)建文件夾、配置docker-compose.yml、開(kāi)啟防火墻以及驗(yàn)證服務(wù)的步驟,適用于新版和老版的RELEASE數(shù)據(jù)格式
    2025-01-01
  • Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解

    Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解

    這篇文章主要介紹了Docker 鏡像、容器、倉(cāng)庫(kù)的概念及應(yīng)用詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • docker入門(mén)之容器介紹

    docker入門(mén)之容器介紹

    這篇文章主要介紹了docker入門(mén)之容器介紹的相關(guān)資料,需要的朋友可以參考下
    2018-10-10
  • Docker利用DockerFile創(chuàng)建部署NVIDIA+PyTorch容器的詳細(xì)過(guò)程

    Docker利用DockerFile創(chuàng)建部署NVIDIA+PyTorch容器的詳細(xì)過(guò)程

    這篇文章主要介紹了Docker利用DockerFile創(chuàng)建部署NVIDIA+PyTorch容器的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

莫力| 策勒县| 大同县| 定州市| 民乐县| 祁东县| 永嘉县| 岐山县| 延吉市| 淳化县| 扎囊县| 巴中市| 博野县| 稻城县| 祁阳县| 阜阳市| 辽阳市| 洛川县| 金门县| 新巴尔虎右旗| 黄骅市| 罗定市| 建湖县| 福鼎市| 临泽县| 闻喜县| 凤冈县| 军事| 开化县| 施秉县| 乳源| 胶州市| 馆陶县| 丽水市| 蓝田县| 新宾| 大同市| 肥西县| 鄱阳县| 阳谷县| 普陀区|