日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql slave是什么_创建slave的搜索结果-阿里云开发者社区

發(fā)布時間:2025/3/20 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql slave是什么_创建slave的搜索结果-阿里云开发者社区 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Rainbond部署Mysql主從集群應(yīng)用說明

Mysql主從同步原理

1)在Slave 服務(wù)器上執(zhí)行sart slave命令開啟主從復(fù)制開關(guān),開始進(jìn)行主從復(fù)制。

2)此時,Slave服務(wù)器的IO線程會通過在master上已經(jīng)授權(quán)的復(fù)制用戶權(quán)限請求連接master服務(wù)器,并請求從執(zhí)行binlog日志文件的指定位置(日志文件名和位置就是在配置主從復(fù)制服務(wù)時執(zhí)行change master命令指定的)之后開始發(fā)送binlog日志內(nèi)容。

3)Master服務(wù)器接收到來自Slave服務(wù)器的IO線程的請求后,其上負(fù)責(zé)復(fù)制的IO線程會根據(jù)Slave服務(wù)器的IO線程請求的信息分批讀取指定binlog日志文件指定位置之后的binlog日志信息,然后返回給Slave端的IO線程。返回的信息中除了binlog日志內(nèi)容外,還有在Master服務(wù)器端記錄的IO線程。返回的信息中除了binlog中的下一個指定更新位置。

4)當(dāng)Slave服務(wù)器的IO線程獲取到Master服務(wù)器上IO線程發(fā)送的日志內(nèi)容、日志文件及位置點(diǎn)后,會將binlog日志內(nèi)容依次寫到Slave端自身的Relay Log(即中繼日志)文件(Mysql-relay-bin.xxx)的最末端,并將新的binlog文件名和位置記錄到master-info文件中,以便下一次讀取master端新binlog日志時能告訴Master服務(wù)器從新binlog日志的指定文件及位置開始讀取新的binlog日志內(nèi)容。

5)Slave服務(wù)器端的SQL線程會實(shí)時檢測本地Relay Log 中IO線程新增的日志內(nèi)容,然后及時把Relay LOG 文件中的內(nèi)容解析成sql語句,并在自身Slave服務(wù)器上按解析SQL語句的位置順序執(zhí)行應(yīng)用這樣sql語句,并在relay-log.info中記錄當(dāng)前應(yīng)用中繼日志的文件名和位置點(diǎn)。

Mysql主從同步注意事項

master節(jié)點(diǎn)和slave節(jié)點(diǎn)的uuid不同

master節(jié)點(diǎn)和slave節(jié)點(diǎn)的server_id不同

slave節(jié)點(diǎn)需要自動執(zhí)行向master節(jié)點(diǎn)注冊的操作

制作Mysql容器鏡像

同一鏡像創(chuàng)建不同容器的uuid

用同一mysql鏡像創(chuàng)建mysql主從集群時,發(fā)現(xiàn)每臺mysql服務(wù)的uuid都是相同的,是因為在數(shù)據(jù)初始化時將uuid寫在了/var/lib/mysql/auto.cnf文件中,造成每個容器的uuid都是相同的。

為了解決不同容器的uuid不同問題,需要在mysql啟動生成配置文件后并在啟動前 隨機(jī)生成一個uuid寫入到/var/lib/mysql/auto.cnf,這樣就可以確保同一鏡像生成的容器的uuid都不相同。

為了達(dá)成這一目標(biāo),我們修改了mysql鏡像自帶的啟動腳本/usr/local/bin/docker-entrypoint.sh:

if [ ! -d "$DATADIR/mysql" ]; then

file_env 'MYSQL_ROOT_PASSWORD'

if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then

echo >&2 'error: database is uninitialized and password option is not specified '

echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'

exit 1

fi

mkdir -p "$DATADIR"

echo 'Initializing database'

"$@" --initialize-insecure

echo 'Database initialized'

# 位于mysql啟動腳本90行,新增如下語句

psd="/proc/sys/kernel/random/uuid"

str=$(cat $psd)

uuid="server-uuid="${str}

echo "[auto]" > /var/lib/mysql/auto.cnf

echo $uuid >> /var/lib/mysql/auto.cnf

同一服務(wù)不同實(shí)例的server_id處理

用同一MYSQL鏡像創(chuàng)建MYSQL主從集群時,如何確保每個MYSQL服務(wù)的server_id不同?

k8s在創(chuàng)建容器時,會為每個容器創(chuàng)建創(chuàng)建一個主機(jī)名( 如:gr78648d-0),創(chuàng)建多個容器后面的數(shù)字會依次遞增,所以可以利用這一特性生成不同的server_id(主機(jī)名數(shù)字部分 + 指定數(shù)字),然后在maser和slave使用不同的數(shù)字即可。

從庫自動初始化

創(chuàng)建slave數(shù)據(jù)庫時,我們希望salve應(yīng)用下的每個實(shí)例,在擴(kuò)容后,會自動向主庫注冊。

這需要salve應(yīng)用中實(shí)例初始化時,自動執(zhí)行指定的SQL腳本。這要借助于官方MYSQL鏡像所提供的特定功能:數(shù)據(jù)庫初始化時,會自動讀取/docker-entrypoint-initdb.d/中*.sql 文件并執(zhí)行。

為了實(shí)現(xiàn)上述兩個目標(biāo),我們在鏡像的自定義啟動腳本 /run/docker-entrypoint.sh進(jìn)行指定:

# define server_id and anyother cluster configuration

# 通過環(huán)境變量來區(qū)分當(dāng)前鏡像創(chuàng)建主庫或從庫

if [ ${MYSQL_ROLE} == "master" ];then

# 借助有狀態(tài)應(yīng)用主機(jī)名特點(diǎn),截取其中的數(shù)字

server_id=${HOSTNAME#*-}

# 主庫ID設(shè)置為1

MYSQLC_MYSQLD_SERVER_ID=`expr $server_id + 1`

export MYSQLC_MYSQLD_SERVER_ID

# 指定生成主庫特定的配置

export MYSQLC_MYSQLD_binlog_ignore_db=mysql

export MYSQLC_MYSQLD_log_bin=mysql-bin

else

# 借助有狀態(tài)應(yīng)用主機(jī)名特點(diǎn),截取其中的數(shù)字

server_id=${HOSTNAME#*-}

# 從庫各實(shí)例ID,從2開始排序

MYSQLC_MYSQLD_SERVER_ID=`expr $server_id + 2`

export MYSQLC_MYSQLD_SERVER_ID

# 指定生成從庫特定配置

export MYSQLC_MYSQLD_replicate_ignore_db=mysql

export MYSQLC_MYSQLD_log_bin=mysql-bin

# 將從庫所需要的初始化腳本模版拷貝到指定目錄

cp -a /tmp/init-slave.sql /docker-entrypoint-initdb.d/

# 根據(jù)實(shí)例特定的環(huán)境變量,對初始化腳本模版進(jìn)行更改

sed -i -r -e "s/MYSQL_ROOT_PASSWORD/${MYSQL_ROOT_PASSWORD}/g" \

-e "s/MYSQL_USER/${MYSQL_USER}/g" /docker-entrypoint-initdb.d/init-slave.sql

fi

關(guān)于腳本中通過環(huán)境變量生成指定配置,參考項目 env2file

制作鏡像的Dockerfile解析

FROM percona:5.7.23-stretch

LABEL creater="barnett"

ENV MYSQL_VERSION=5.7.23

ENV TZ=Asia/Shanghai

RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list; \

rm -rf /etc/apt/sources.list.d/percona.list && apt-get update; \

apt-get install -y --no-install-recommends wget net-tools vim; \

rm -rf /var/lib/apt/lists/*; \

wget -O /usr/local/bin/env2file -q https://github.com/barnettZQG/env2file/releases/download/0.1.1/env2file-linux; \

chmod +x /usr/local/bin/env2file;

# 自定義啟動腳本

ADD docker-entrypoint.sh /run/docker-entrypoint.sh

# mysql官方啟動腳本

ADD ./run/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh

ADD ./run/mysqld.cnf /etc/mysql/percona-server.conf.d/mysqld.cnf

# 拷貝slave初始化腳本模版到鏡像中,以備調(diào)用

ADD ./sql /tmp/

EXPOSE 3306

VOLUME ["/var/lib/mysql", "/var/log/mysql"]

ENV MYSQL_ROOT_PASSWORD=changeme

ENTRYPOINT [ "/run/docker-entrypoint.sh" ]

CMD [ "mysqld" ]

創(chuàng)建并配置mysql-master服務(wù)

創(chuàng)建mysql-master服務(wù)組件

代碼地址:https://github.com/goodrain-apps/percona-mysql.git?dir=5.7

代碼分支:cluster

通過Dockerfile創(chuàng)建服務(wù) 參考文檔 基于Dockerfile源碼創(chuàng)建服務(wù)

mysql-master服務(wù) 相關(guān)配置

開啟3306端口對內(nèi)服務(wù),并更改使用別名為MYSQL

配置關(guān)鍵環(huán)境變量

環(huán)境變量

說明

MYSQL_ROOT_PASSWORD

changeme(默認(rèn))自行指定

root密碼

MYSQL_USER

自行指定,如admin

mysql工作用戶

MYSQL_PASSWORD

自行指定

工作用戶密碼

MYSQL_DATABASE

自行指定

初始化生成數(shù)據(jù)庫

MYSQL_ROLE

master

指定角色

其中 除MYSQL_ROLE外,其他環(huán)境變量要在服務(wù)創(chuàng)建完成后,轉(zhuǎn)移到連接信息中去。

部署屬性中,修改應(yīng)用類型為 有狀態(tài)應(yīng)用

創(chuàng)建Slave服務(wù)

創(chuàng)建mysql-slave服務(wù)組件

創(chuàng)建方式同mysql-master服務(wù)組件一致。

mysql-slave服務(wù) 相關(guān)配置

區(qū)別于mysql-master服務(wù)組件,mysql-slave服務(wù)組件配置如下:

開啟3307端口對內(nèi)服務(wù),并更改使用別名為 MYSQL_SLAVE

配置環(huán)境變量

環(huán)境變量

說明

MYSQLC_MYSQLD_PORT

3307

mysql-slave監(jiān)聽3307端口

mysql-slave服務(wù)依賴于mysql-master服務(wù)

mysql-slave服務(wù)組件,可以隨意擴(kuò)容,腳本中寫好的邏輯會讓其自動向mysql-master注冊。

至此,一個基本的 MYSQL主從集群就已經(jīng)搭建完成,如需要發(fā)布到應(yīng)用市場供隨時下載使用,請參考應(yīng)用分享與發(fā)布

讀寫分離

機(jī)制

MYSQL主從集群的一個好處就是,可以配置master庫負(fù)責(zé)寫入,slave庫負(fù)責(zé)查詢,slave自動從master同步數(shù)據(jù)的讀寫分離結(jié)構(gòu)。

如果設(shè)置得當(dāng),這樣的結(jié)構(gòu)可以大幅度提高數(shù)據(jù)庫性能的同時,降低主庫的壓力。

使用方法

如果用戶的業(yè)務(wù)程序已經(jīng)支持讀寫分離,那么只需要設(shè)置:

數(shù)據(jù)庫寫入地址為mysql-master服務(wù)地址,如果使用Rainbond服務(wù)依賴,則可以用 ${MYSQL_HOST}:${MYSQL_PORT}的方式指定連接地址。

數(shù)據(jù)庫查詢地址為mysql-slave服務(wù)地址,如果使用Rainbond服務(wù)依賴,則可以用${MYSQL_SLAVE_HOST}:${MYSQL_SLAVE_PORT}的方式指定連接地址。

如果用戶的業(yè)務(wù)程序不支持讀寫分離,那么就要靠支持讀寫分離的中間件實(shí)現(xiàn)。

Atlas中間件

Atlas是由奇虎360開源的數(shù)據(jù)庫中間件,基于mysql官方提供的mysql-proxy改良而來。通過將mysql-proxy的LUA腳本,用C語言重新實(shí)現(xiàn),Atlas提供了比mysql-proxy更強(qiáng)大的性能。經(jīng)由中間件的代理,用戶只需要配置數(shù)據(jù)庫連接地址為 Atlas 服務(wù)地址,對于數(shù)據(jù)庫的寫入和查詢,則由 Atlas 來管理。

詳細(xì)了解Atlas

我們提供的docker化的Atlas組件,用戶可以直接基于Dockerfile源碼構(gòu)建這個項目:

Atlas-docker項目地址

Rainbond已經(jīng)發(fā)布的 Mysql主從集群 應(yīng)用,已經(jīng)集成了該中間件。

高階實(shí)現(xiàn)

當(dāng)前架構(gòu)缺點(diǎn)

目前搭建的 MYSQL主從集群,是一個master節(jié)點(diǎn),對接多個slave節(jié)點(diǎn)。這樣的架構(gòu)在小規(guī)模集群下沒有問題。但是如果集群規(guī)模很大、slave節(jié)點(diǎn)過多的時候,由master向所有slave節(jié)點(diǎn)同步數(shù)據(jù)這一過程將變成性能的瓶頸。

架構(gòu)的優(yōu)化

當(dāng)用戶完全掌握了如何基于Rainbond搭建MYSQL主從集群后,可以自己嘗試,專門創(chuàng)建一個slave節(jié)點(diǎn),作為數(shù)據(jù)同步節(jié)點(diǎn)使用。

該節(jié)點(diǎn)向上對接 master節(jié)點(diǎn),來同步數(shù)據(jù);向下對接slave集群,分發(fā)由master節(jié)點(diǎn)同步來的數(shù)據(jù)。

這樣做的好處是,master節(jié)點(diǎn)只需要對接一個數(shù)據(jù)同步節(jié)點(diǎn)來同步數(shù)據(jù),可以更加專注于數(shù)據(jù)的寫入。其他slave節(jié)點(diǎn)從數(shù)據(jù)同步節(jié)點(diǎn)來同步數(shù)據(jù)。

如果有用戶實(shí)現(xiàn)了這種優(yōu)化,歡迎將其分享到應(yīng)用市場中,供更多的人來使用。

文章

關(guān)系型數(shù)據(jù)庫 · MySQL · atlas · 數(shù)據(jù)庫 · 容器

2019-08-06

總結(jié)

以上是生活随笔為你收集整理的mysql slave是什么_创建slave的搜索结果-阿里云开发者社区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 这里只有精品视频在线观看 | 夜夜综合网 | 国产精品一二三 | www国产在线观看 | 天天爽视频 | 高潮一区二区三区乱码 | 亚洲一区二区三 | 99久久精品国产成人一区二区 | 男女av免费| 麻豆视频免费看 | 人操人爽| 国产亚洲精品美女 | 国产一区二区三区视频在线观看 | 欧美日韩aaa | 久久一区欧美 | 国产成人无码精品久久二区三 | 秋霞中文字幕 | 免费在线观看a视频 | 日韩在线免费观看视频 | 91亚洲精选 | 精品久久久久久中文字幕人妻最新 | 亚一区二区| 一二区在线观看 | 亚洲天堂第一区 | 色导航 | 亚洲精品影院在线 | 白浆影院 | 极品久久久久 | 国产夫妻性生活视频 | 亚卅色图| 亚洲天堂影院在线观看 | 免费在线观看av的网站 | 国产超碰人人 | 国产专区自拍 | 加勒比色综合 | 影音资源av | av免 | 国产视频在线观看视频 | 国产欧美久久久久 | 国产人妻久久精品一区二区三区 | 少妇做爰免费视看片 | 美女张开腿让男人操 | 国产麻豆午夜三级精品 | 我们好看的2018视频在线观看 | 亚洲女人视频 | 国产日本精品视频 | 日韩女同强女同hd | 中文字幕在线播 | 九九av| 久久一区二区三区视频 | 亚洲青涩 | 中文字幕日韩欧美一区二区 | 野花社区视频在线观看 | 亚洲欧美一区二区精品久久久 | 日韩色影院 | 波多野结衣理论片 | 三年大全国语中文版免费播放 | 亚洲精品久久久久久一区二区 | 国产在线无 | 伊人久久超碰 | 国产成年妇视频 | 黄色在线免费观看网站 | jzjzz成人免费视频 | 91.久久| 最新黄色网址在线观看 | 揉我啊嗯~喷水了h视频 | 一区二区三区日本视频 | 97人人澡人人爽人人模亚洲 | 少妇一级淫片免费观看 | 亚洲精品午夜国产va久久成人 | 淫综合网| 无码日韩人妻精品久久蜜桃 | 超碰在线香蕉 | 成人性生交大片免费卡看 | 无码熟妇αⅴ人妻又粗又大 | 欧美第一精品 | 国产成人小视频在线观看 | 性感美女福利视频 | 少妇特黄一区二区三区 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 成人漫画网站 | 亚洲高清视频一区二区 | 欧美日韩色 | 免费观看一区二区三区视频 | 五月婷婷社区 | 久久精品视频在线免费观看 | 国产日韩在线视频 | 国产欧美一区二区精品久久久 | 国产哺乳奶水91在线播放 | 久久视频在线观看 | 色黄视频在线观看 | 韩国三级视频在线 | 日韩国产欧美视频 | 玖玖视频网 | 国产美女精品视频 | 午夜日韩在线观看 | 一个人在线观看www www.97色 | 色哟哟在线视频 | 精品国产av无码一区二区三区 |