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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql拉荐_荐 一步一步教你MySQL主从复制读写分离

發(fā)布時間:2025/4/16 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql拉荐_荐 一步一步教你MySQL主从复制读写分离 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本次我們通過docker搭建環(huán)境

虛擬機(jī)搭建對機(jī)器配置有要求,并且安裝mysql步驟繁瑣

一臺機(jī)器上可以運(yùn)行多個Docker容器

Docker容器之間相互獨(dú)立,有獨(dú)立ip,互不沖突

Docker使用步驟簡便,啟動容器在秒級別

MySQL的主從復(fù)制

主從復(fù)制(也稱 AB 復(fù)制)允許將來自一個MySQL數(shù)據(jù)庫服務(wù)器(主服務(wù)器)的數(shù)據(jù)復(fù)制到一個或多個MySQL數(shù)據(jù)庫服務(wù)器(從服務(wù)器)。

主從復(fù)制的有好處

MySQL中復(fù)制的優(yōu)點包括:

橫向擴(kuò)展解決方案 - 在多個從站之間分配負(fù)載以提高性能。在此環(huán)境中,所有寫入和更新都必須在主服務(wù)器上進(jìn)行。但是,讀取可以在一個或多個從設(shè)備上進(jìn)行。該模型可以提高寫入性能(因為主設(shè)備專用于更新),同時顯著提高了越來越多的從設(shè)備的讀取速度。

數(shù)據(jù)安全性 - 因為數(shù)據(jù)被復(fù)制到從站,并且從站可以暫停復(fù)制過程,所以可以在從站上運(yùn)行備份服務(wù)而不會破壞相應(yīng)的主數(shù)據(jù)。

分析 - 可以在主服務(wù)器上創(chuàng)建實時數(shù)據(jù),而信息分析可以在從服務(wù)器上進(jìn)行,而不會影響主服務(wù)器的性能。

遠(yuǎn)程數(shù)據(jù)分發(fā) - 您可以使用復(fù)制為遠(yuǎn)程站點創(chuàng)建數(shù)據(jù)的本地副本,而無需永久訪問主服務(wù)器。

讀寫分離示意圖

主從復(fù)制原理

主服務(wù)器上面的任何修改都會通過自己的 I/O tread(I/O 線程)保存在二進(jìn)制日志 Binary log 里面。

從服務(wù)器上面也啟動一個 I/O thread,通過配置好的用戶名和密碼, 連接到主服務(wù)器上面請求讀取二進(jìn)制日志,然后把讀取到的二進(jìn)制日志寫到本地的一個Realy log(中繼日志)里面。

從服務(wù)器上面同時開啟一個 SQL thread 定時檢查 Realy log(這個文件也是二進(jìn)制的),如果發(fā)現(xiàn)有更新立即把更新的內(nèi)容在本機(jī)的數(shù)據(jù)庫上面執(zhí)行一遍。

一主多從

如果一主多從的話,這時主庫既要負(fù)責(zé)寫又要負(fù)責(zé)為幾個從庫提供二進(jìn)制日志。此時可以稍做調(diào)整,將二進(jìn)制日志只給某一從,這一從再開啟二進(jìn)制日志并將自己的二進(jìn)制日志再發(fā)給其它從。或者是干脆這個從不記錄只負(fù)責(zé)將二進(jìn)制日志轉(zhuǎn)發(fā)給其它從,這樣架構(gòu)起來性能可能要好得多,而且數(shù)據(jù)之間的延時應(yīng)該也稍微要好一些。

MySQL主從復(fù)制搭建步驟

由于我們依托于docker容器,所以要求大家預(yù)先有docker的知識鋪墊。

服務(wù)器規(guī)劃

服務(wù)器

軟件

用途

192.168.0.108

docker

啟動MySQL容器master

192.168.0.109

docker

啟動MySQL容器slave

192.168.0.1010

docker

啟動MySQL容器slave

主服務(wù)器搭建

步驟1:鏡像拉取

首先在192.168.0.108拉取docker鏡像,我們這里使用5.7版本的mysql

[

root@bogon ~

]

# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/mysql 5.7 e1e1680ac726 7 months ago 373 MB

創(chuàng)建目錄mysql-conf

[

root@bogon mysql-conf

]

# pwd

/usr/local/mysql-conf

在當(dāng)前目錄中創(chuàng)建配置文件my.cnf,次文件要映射到mysql的docker容器中的配置文件,文件中加入[mysqld]

[

root@bogon mysql-conf

]

# vi my.cnf

[

root@bogon mysql-conf

]

# more my.cnf

[

mysqld

]

步驟2:主機(jī)MySQL容器創(chuàng)建

創(chuàng)建主機(jī)容器

Master對外映射的端口是5566,Slave對外映射的端口是5577。因為docker容器是相互獨(dú)立的,每個容器有其獨(dú)立的ip,所以不同容器使用相同的端口并不會沖突。

docker run -p 5566:3306 --name master-mysql -v/usr/local/mysql-conf/:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD

=

123456 -d mysql:5.7

查看容器運(yùn)行情況

[

root@bogon mysql-conf

]

# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

1f93892498df mysql:5.7

"docker-entrypoint..."

4 minutes ago Up 4 minutes 33060/tcp, 0.0.0.0:5566-

>

3306/tcp master-mysql

步驟3:修改外部映射文件my.cnf

[

root@bogon mysql-conf

]

# more my.cnf

[

mysqld

]

skip-name-resolve

server-id

=

1

log-bin

=

mysql-bin

binlog-do-db

=

tx_db

binlog-ignore-db

=

mysql

binlog-ignore-db

=

information_schema

進(jìn)入容器內(nèi)可以查看到數(shù)據(jù)卷映射后的結(jié)果

[root@bogon mysql-conf]# docker exec -it 1f93892498df /bin/bash

root@1f93892498df:/etc/mysql/conf.d# more my.cnf

[mysqld]

skip-name-resolve

server-id=1

log-bin=mysql-bin

binlog-do-db=tx_db

binlog-ignore-db = mysql

binlog-ignore-db = information_schema

重啟容器

docker restart 1f93892498df

步驟四:賦予從機(jī)權(quán)限

登錄mysql,授予192.168.0.109, 192.168.0.110 slave從機(jī)復(fù)制權(quán)限

mysql> grant replication slave,replication client on *.* to slave@'192.168.0.109' identified by "123456";

Query OK, 0 rows affected

mysql> flush privileges;

Query OK, 0 rows affected

mysql> grant replication slave,replication client on *.* to slave@'192.168.0.110' identified by "123456";

Query OK, 0 rows affected

mysql> flush privileges;

Query OK, 0 rows affected

查看主機(jī)狀態(tài)

mysql> show master status;

+------------------+----------+--------------+--------------------------+-------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+--------------------------+-------------------+

| mysql-bin.000001 | 154 | tx_db | mysql,information_schema | |

+------------------+----------+--------------+--------------------------+-------------------+

1 row in set

從服務(wù)器搭建

步驟1:啟動兩臺從機(jī)

從節(jié)點配置文件創(chuàng)建

在192.168.0.109和192.168.0.110新建目錄/usr/local/mysql-conf/

創(chuàng)建 my.cnf

192.168.0.109機(jī)器

[

root@file mysql-conf

]

# more my.cnf

[

mysqld

]

skip-name-resolve

server-id

=

2

log-bin

=

mysql-bin

replicate-do-db

=

tx_db

binlog-ignore-db

=

mysql

binlog-ignore-db

=

information_schema

192.168.0.110機(jī)器

[

root@file mysql-conf

]

# more my.cnf

[

mysqld

]

skip-name-resolve

server-id

=

3

log-bin

=

mysql-bin

replicate-do-db

=

tx_db

binlog-ignore-db

=

mysql

binlog-ignore-db

=

information_schema

啟動slave1(109)

[

root

@file

mysql

-

conf

]

# docker run -p 5577:3306 --name slave-mysql1 -v /usr/local/mysql-conf/:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

啟動slave1(110)

[

root

@localhost

mysql

-

conf

]

# docker run -p 5588:3306 --name slave-mysql1 -v /usr/local/mysql-conf/:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

此時我們可以看到三臺MySQL服務(wù)器都已經(jīng)啟動,并且連接

步驟2:每一臺從機(jī)創(chuàng)建用戶賦權(quán)

mysql

>

CREATE

USER

'slave'

@'

%

' IDENTIFIED BY '

123456

';

Query OK, 0 rows affected

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '

slave

'@'

%

'

;

Query OK

,

0

rows

affected

mysql

>

flush

privileges

;

Query OK

,

0

rows

affected

mysql

>

stop slave

;

Query OK

,

0

rows

affected

mysql

>

步驟3 在每一臺從機(jī)創(chuàng)建從機(jī)

分別在109和110機(jī)器執(zhí)行。

mysql

>

change master

to

master_host

=

'192.168.0.108'

,

master_user

=

'slave'

,

master_password

=

'123456'

,

master_port

=

5566

,

master_log_file

=

'mysql-bin.000002'

,

master_log_pos

=

154

,

master_connect_retry

=

30

;

Query OK

,

0

rows

affected

說明:

master_host :Master的地址,指的是容器的獨(dú)立ip

master_port:Master的端口號,指的是容器的端口號

master_user:用于數(shù)據(jù)同步的用戶

master_password:用于同步的用戶的密碼

master_log_file:指定 Slave 從哪個日志文件開始復(fù)制數(shù)據(jù),即上文中提到的 File 字段的值

master_log_pos:從哪個 Position 開始讀,即上文中提到的 Position 字段的值

master_connect_retry:如果連接失敗,重試的時間間隔,單位是秒,默認(rèn)是60秒

檢查兩臺從機(jī)狀態(tài):

我們發(fā)現(xiàn)從機(jī)已經(jīng)創(chuàng)建,但是內(nèi)部線程還未啟動

mysql

>

show

slave

status

\G

;

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

1.

row

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

Slave_IO_State:

Master_Host:

192.168

.0

.108

Master_User: slave

Master_Port:

5566

Connect_Retry:

30

Master_Log_File: mysql

-

bin

.

000002

Read_Master_Log_Pos:

154

Relay_Log_File: d55404be5426

-

relay

-

bin

.

000001

Relay_Log_Pos:

4

Relay_Master_Log_File: mysql

-

bin

.

000002

Slave_IO_Running:

No

Slave_SQL_Running:

No

Replicate_Do_DB: tx_db

正常情況下,SlaveIORunning 和 SlaveSQLRunning 都是No,因為我們還沒有開啟主從復(fù)制過程。使用start slave開啟主從復(fù)制過程,然后再次查詢主從同步狀態(tài)show slave status \G;。

mysql

>

show

slave

status

\G

;

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

1.

row

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

Slave_IO_State: Waiting

for

master

to

send event

Master_Host:

192.168

.0

.108

Master_User: slave

Master_Port:

5566

Connect_Retry:

30

Master_Log_File: mysql

-

bin

.

000002

Read_Master_Log_Pos:

154

Relay_Log_File: d55404be5426

-

relay

-

bin

.

000002

Relay_Log_Pos:

320

Relay_Master_Log_File: mysql

-

bin

.

000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: tx_db

在主庫中創(chuàng)建tx_db數(shù)據(jù)庫,我們發(fā)現(xiàn)從庫可以同步出來

學(xué)習(xí)更多架構(gòu)免費(fèi)課程請關(guān)注: java架構(gòu)師免費(fèi)課程

每晚20:00直播分享高級java架構(gòu)技術(shù)

掃描加入QQ交流群264572737

總結(jié)

以上是生活随笔為你收集整理的mysql拉荐_荐 一步一步教你MySQL主从复制读写分离的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 女生裸体无遮挡 | 麻豆视频在线看 | 亚洲一区二区三区免费视频 | 久久夜色精品国产噜噜亚洲av | 色男人影院 | 日本人体一区 | 免费视频一区二区 | 精品成人久久 | 亚洲av午夜精品一区二区三区 | 亚洲xx网站 | youjizz少妇| 欧美色婷婷 | 欧美日韩在线成人 | 免费在线看a | 青青艹视频 | www.在线观看网站 | 韩国bj大尺度vip福利网站 | 性色av一区二区三区免费 | 日本免费黄色网 | 日本老年老熟无码 | 亚洲综合性 | 欧美性受xxx | 毛片在线免费观看网站 | 成人中文字幕+乱码+中文字幕 | 日韩超碰在线 | 男人的天堂av女优 | 风间由美一区二区 | 成人影视免费观看 | 国产亚洲精品久久久久久打不开 | 午夜性福利视频 | 国产乱妇无码大片在线观看 | 久久久久无码精品国产 | 色播网址| 亚洲av无码乱码在线观看性色 | 国产黄片毛片 | 日韩在线专区 | 日本视频黄 | 国产成人黄色av | 日日噜噜夜夜狠狠久久波多野 | 日韩白浆 | 国产剧情一区二区三区 | 涩天堂 | 911色| 老色批永久免费网站www | 无码一区二区三区在线观看 | 伊人影视久久 | 永久免费在线看片 | 国产国语videosex另类 | 日本全黄裸体片 | free性娇小hd第一次 | 521av在线 | 久久精品综合 | 国产精品免费电影 | 中文字幕 亚洲一区 | 成年人在线免费观看网站 | 亚洲www啪成人一区二区麻豆 | 黄色免费网站在线 | 伊人影院视频 | 91欧美激情一区二区三区 | 欧美啪啪小视频 | av免费观看网站 | 激情麻豆| 亚洲成人自拍 | 国产精品免费一区二区区 | 欧美777 | aⅴ天堂网 | 亚洲国产成人一区二区精品区 | 秋霞精品一区二区三区 | 最新av电影网站 | 日本888xxxx| 蜜桃精品视频在线 | 亚洲高清自拍 | 岛国片在线播放 | 好色av | 日韩av影音先锋 | 一起射导航 | 亚洲人成色777777精品音频 | 午夜在线一区二区三区 | 伊人久久成人 | 中文在线观看免费高清 | 国产精品第六页 | 91看片淫黄大片 | 一区不卡视频 | 亚洲在线视频播放 | 精品免费一区二区 | 国产在线精品视频 | 在线视频观看免费 | 白浆四溢| 亚洲av少妇一区二区在线观看 | 亚洲欧洲免费 | 天天看毛片| 日本成人在线网站 | 91网址入口 | 日韩草逼| 91女神在线| 一级全黄裸体免费观看视频 | 成人a毛片久久免费播放 | 狠狠干b| 亚洲一区精品视频在线观看 |