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

mysql如何設(shè)置主從數(shù)據(jù)庫的同步

 更新時(shí)間:2023年10月26日 17:16:03   作者:ZNineSun  
這篇文章主要介紹了mysql如何設(shè)置主從數(shù)據(jù)庫的同步問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1.業(yè)務(wù)場(chǎng)景

場(chǎng)景1:實(shí)現(xiàn)服務(wù)器負(fù)載均衡

若我們所有的業(yè)務(wù)代碼存于一個(gè)服務(wù)器上,而這個(gè)服務(wù)器有的時(shí)候回宕機(jī),導(dǎo)致業(yè)務(wù)停頓,造成影響。這個(gè)時(shí)候 就需要做高可用,在數(shù)據(jù)庫的處理上如果兩個(gè)mysql實(shí)現(xiàn)高可用,避免單點(diǎn)問題。

場(chǎng)景2:讀寫分離;master寫,其他slave讀,這種架構(gòu)最大問題I/O壓力集中在Master上;

場(chǎng)景3:通過復(fù)制實(shí)現(xiàn)數(shù)據(jù)的異地備份

可以定期的將數(shù)據(jù)從主服務(wù)器上復(fù)制到從服務(wù)器上,這無疑是先了數(shù)據(jù)的異地備份。在傳統(tǒng)的備份體制下,是將數(shù)據(jù)備份在本地。此時(shí)備份 作業(yè)與數(shù)據(jù)庫服務(wù)器運(yùn)行在同一臺(tái)設(shè)備上,當(dāng)備份作業(yè)運(yùn)行時(shí)就會(huì)影響到服務(wù)器的正常運(yùn)行。有時(shí)候會(huì)明顯的降低服務(wù)器的性能。同時(shí),將備份數(shù)據(jù)存放在本地,也 不是很安全。如硬盤因?yàn)殡妷旱仍虮粨p壞或者服務(wù)器被失竊,此時(shí)由于備份文件仍然存放在硬盤上,數(shù)據(jù)庫管理員無法使用備份文件來恢復(fù)數(shù)據(jù)。這顯然會(huì)給企業(yè) 帶來比較大的損失。

2.實(shí)現(xiàn)的目標(biāo)

一臺(tái)服務(wù)器充當(dāng)主數(shù)據(jù)庫服務(wù)器,另一臺(tái)或多臺(tái)服務(wù)器充當(dāng)從數(shù)據(jù)庫服務(wù)器,主服務(wù)器中的數(shù)據(jù)自動(dòng)復(fù)制到從服務(wù)器之中。

對(duì)于多級(jí)復(fù)制,數(shù)據(jù)庫服務(wù)器即可充當(dāng)主機(jī),也可充當(dāng)從機(jī)。

一句話表示就是,主數(shù)據(jù)庫做什么,從數(shù)據(jù)庫就跟著做什么。

3.原理

我們的主從復(fù)制基于Mysql Replication來進(jìn)行實(shí)現(xiàn)

3.1 什么是Mysql Replication

Replication可以實(shí)現(xiàn)將數(shù)據(jù)從一臺(tái)數(shù)據(jù)庫服務(wù)器(master)復(fù)制到一臺(tái)或多臺(tái)數(shù)據(jù)庫服務(wù)器(slave)

  • 默認(rèn)情況下屬于異步復(fù)制,無需維持長(zhǎng)連接
  • 通過配置,可以復(fù)制所有的庫或者幾個(gè)庫,甚至庫中的一些表
  • 是MySQL內(nèi)建的,本身自帶的

3.2 Mysql Replication的原理

簡(jiǎn)單的說就是master將數(shù)據(jù)庫的改變寫入二進(jìn)制日志,slave同步這些二進(jìn)制日志,并根據(jù)這些二進(jìn)制日志進(jìn)行數(shù)據(jù)操作。

注意:

  • DML表示SQL操作語句如:update, insert,delete
  • Relay log :中繼日志

整體上來說,復(fù)制有3個(gè)步驟:

(1) master將改變記錄到二進(jìn)制日志(binary log)中(這些記錄叫做二進(jìn)制日志事件,binary log events)

(2) slave將master的binary log events拷貝到它的中繼日志(relay log)

(3) slave重做中繼日志中的事件,修改salve上的數(shù)據(jù)。

3.3 My Replication的作用

  • Fail Over 故障切換
  • Backup Server 備份服務(wù),無法對(duì)SQL語句執(zhí)行產(chǎn)生的故障恢復(fù),有限的備份
  • High Performance 高性能,可以多臺(tái)slave,實(shí)現(xiàn)讀寫分離

3.4 MySQL主從復(fù)制

第一步:master記錄二進(jìn)制日志

在每個(gè)事務(wù)更新數(shù)據(jù)完成之前,master在二進(jìn)制日志記錄這些改變。

MySQL將事務(wù)寫入二進(jìn)制日志,即使事務(wù)中的語句都是交叉執(zhí)行的。

在事件寫入二進(jìn)制日志完成后,master通知存儲(chǔ)引擎提交事務(wù)。

第二步:slave將master的binary log拷貝到它自己的中繼日志

首先,slave開始一個(gè)工作線程—I/O線程。

I/O線程在master上打開一個(gè)普通的連接,然后開始binlog dump process。

Binlog dump process從master的二進(jìn)制日志中讀取事件,如果已經(jīng)執(zhí)行完master產(chǎn)生的所有文件,它會(huì)睡眠并等待master產(chǎn)生新的事件。

I/O線程將這些事件寫入中繼日志。

第三步:SQL slave thread(SQL從線程)處理該過程的最后一步

SQL線程從中繼日志讀取事件,并重新執(zhí)行其中的事件而更新slave的數(shù)據(jù),使其與master中的數(shù)據(jù)一致。

4.My Replication常見方案

One master and Muti salve 一主多備(MS)

一般用來做讀寫分離的,master寫,其他slave讀,這種架構(gòu)最大問題I/O壓力集中在Master上<多臺(tái)同步影響IO>

M-S-S

使用一臺(tái)slave作為中繼,分擔(dān)Master的壓力,slave中繼需要開啟bin-log,并配置log-slave-updates

Slave中繼可使用Black-hole存儲(chǔ)引擎,不會(huì)把數(shù)據(jù)存儲(chǔ)到磁盤,只記錄二進(jìn)制日志。

M-M 雙主互備(互為主從)

每個(gè)服務(wù)器需要做同樣的同步更新,破壞了事物的隔離性和數(shù)據(jù)的一致性。

M-M-M

監(jiān)控三臺(tái)機(jī)器互相作對(duì)方的master

天生的缺陷:復(fù)制延遲,slave上同步要慢于master,如果大并發(fā)的情況那延遲更嚴(yán)重。

mysql在5.6已經(jīng)自身可以實(shí)現(xiàn)fail over故障切換

One slave Muti master 一從對(duì)多主

好處:節(jié)省成本,將多個(gè)master數(shù)據(jù)自動(dòng)化整合

缺陷:對(duì)庫和表數(shù)據(jù)的修改較多

5.實(shí)現(xiàn)

5.1 環(huán)境準(zhǔn)備

本地安裝兩個(gè)mysql,或者使用虛擬機(jī),或者使用docker安裝,需要準(zhǔn)備兩個(gè)mysql,本文使用docker安裝

在docker中先創(chuàng)建兩個(gè)mysql服務(wù)器

主服務(wù)器:3308

從服務(wù)器:3309

不會(huì)創(chuàng)建?點(diǎn)擊此處

5.2 修改 my.cnf配置文件

master的my.cnf配置文件

#mysql master1 config 
[mysqld]
server-id = 1        # 節(jié)點(diǎn)ID,確保唯一

# log config
log-bin = mysql-bin     #開啟mysql的binlog日志功能
sync_binlog = 1         #控制數(shù)據(jù)庫的binlog刷到磁盤上去 , 0 不控制,性能最好,1每次事物提交都會(huì)刷到日志文件中,性能最差,最安全
binlog_format = mixed   #binlog日志格式,mysql默認(rèn)采用statement,建議使用mixed
expire_logs_days = 7                           #binlog過期清理時(shí)間
max_binlog_size = 100m                    #binlog每個(gè)日志文件大小
binlog_cache_size = 4m                        #binlog緩存大小
max_binlog_cache_size= 512m              #最大binlog緩存大
binlog-ignore-db=mysql #不生成日志文件的數(shù)據(jù)庫,多個(gè)忽略數(shù)據(jù)庫可以用逗號(hào)拼接,或者 復(fù)制這句話,寫多行

auto-increment-offset = 1     # 自增值的偏移量
auto-increment-increment = 1  # 自增值的自增量
slave-skip-errors = all #跳過從庫錯(cuò)誤

slave1的my.cnf配置文件

[mysqld]
server-id = 2
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

6.進(jìn)入master數(shù)據(jù)庫,創(chuàng)建復(fù)制用戶并授權(quán)

依次執(zhí)行

CREATE USER repl_user IDENTIFIED BY 'root';
CREATE USER 'repl_user'@'172.17.0.1' IDENTIFIED BY 'root';
CREATE USER 'repl_user'@'192.168.1.2' IDENTIFIED BY 'root';

root表示該用戶的用戶密碼

你只需要修改的是將 192.168.1.2改為你自己主機(jī)的ip地址即可

查看自己創(chuàng)建用戶是否成功

SELECT User, Host FROM mysql.user;

6.1 賦予該用戶復(fù)制的權(quán)利

依次執(zhí)行

grant replication slave on *.* to 'repl_user'@'%';
grant replication slave on *.* to 'repl_user'@'172.17.0.1';
grant replication slave on *.* to 'repl_user'@'192.168.1.2';

FLUSH PRIVILEGES;

注意:我們接下來進(jìn)行一個(gè)很重要的步驟,就是修改主庫repl_user的plugin

依次執(zhí)行以操作:

alter user 'repl_user'@'%' identified with mysql_native_password by 'root';
alter user 'repl_user'@'172.17.0.1' identified with mysql_native_password by 'root';
alter user 'repl_user'@'192.168.1.2' identified with mysql_native_password by 'root';

6.2 查看master的狀態(tài)

show master status;

7.配置從庫

登錄進(jìn)入從庫的mysql服務(wù)內(nèi)執(zhí)行以下命令

CHANGE MASTER TO 
MASTER_HOST = 'localhost',  
MASTER_USER = 'repl_user', 
MASTER_PASSWORD = 'root',
MASTER_PORT = 3308,
MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=1374,
MASTER_RETRY_COUNT = 60,
MASTER_HEARTBEAT_PERIOD = 10000; 

注意你要修改以下內(nèi)容:

7.1 啟動(dòng)從庫slave進(jìn)程

start slave;

附:停止從庫進(jìn)程:stop slave;

7.2 查看是否配置成功

show slave status\G

當(dāng)這兩個(gè)信息 都為yes時(shí)說明你配置成功啦。

8.測(cè)試主從同步

我用navicat連接到主庫和從庫

接下來我先在master中創(chuàng)建一個(gè)數(shù)據(jù)庫test1

然后刷新salve

然后會(huì)發(fā)現(xiàn)salve中也會(huì)出現(xiàn)一個(gè)test1數(shù)據(jù)庫

至此我們的主從同步就完全實(shí)現(xiàn)了

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL中row_number的實(shí)現(xiàn)過程

    MySQL中row_number的實(shí)現(xiàn)過程

    這篇文章主要介紹了MySQL中row_number的實(shí)現(xiàn)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • mysql中TINYINT的取值范圍

    mysql中TINYINT的取值范圍

    這篇文章主要介紹了mysql中TINYINT的取值范圍,需要的朋友可以參考下
    2014-08-08
  • MySQL的時(shí)間差函數(shù)TIMESTAMPDIFF、DATEDIFF的用法

    MySQL的時(shí)間差函數(shù)TIMESTAMPDIFF、DATEDIFF的用法

    這篇文章主要介紹了MySQL的時(shí)間差函數(shù)TIMESTAMPDIFF、DATEDIFF的用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • MySQL索引失效問題及解決方案

    MySQL索引失效問題及解決方案

    這篇文章主要介紹了MySQL索引失效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • mysql遞歸查詢所有子集的實(shí)現(xiàn)方法

    mysql遞歸查詢所有子集的實(shí)現(xiàn)方法

    本文主要介紹了mysql遞歸查詢所有子集的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • MySQL如何查看元數(shù)據(jù)鎖阻塞在哪里

    MySQL如何查看元數(shù)據(jù)鎖阻塞在哪里

    這篇文章主要介紹了MySQL如何查看元數(shù)據(jù)鎖阻塞在什么地方的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • mysql使用GROUP BY分組實(shí)現(xiàn)取前N條記錄的方法

    mysql使用GROUP BY分組實(shí)現(xiàn)取前N條記錄的方法

    這篇文章主要介紹了mysql使用GROUP BY分組實(shí)現(xiàn)取前N條記錄的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了mysql中GROUP BY分組的相關(guān)使用技巧,需要的朋友可以參考下
    2016-06-06
  • Mysql文件存儲(chǔ)圖文詳解

    Mysql文件存儲(chǔ)圖文詳解

    文件存儲(chǔ)是我們?nèi)粘i_發(fā)中經(jīng)常遇到的一個(gè)功能,下面這篇文章主要給大家介紹了關(guān)于Mysql文件存儲(chǔ)的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案

    Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案

    這篇文章主要介紹了Mysql匿名登錄無法創(chuàng)建數(shù)據(jù)庫問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • mysql更新一個(gè)表里的字段等于另一個(gè)表某字段的值實(shí)例

    mysql更新一個(gè)表里的字段等于另一個(gè)表某字段的值實(shí)例

    下面小編就為大家?guī)硪黄猰ysql更新一個(gè)表里的字段等于另一個(gè)表某字段的值實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03

最新評(píng)論

金坛市| 敦化市| 江达县| 邯郸县| 乌兰浩特市| 宝鸡市| 象州县| 琼中| 若尔盖县| 荃湾区| 和硕县| 康乐县| 临桂县| 玉屏| 泸西县| 太仆寺旗| 密云县| 吉木萨尔县| 丽江市| 余庆县| 柳林县| 通海县| 吕梁市| 富锦市| 峨眉山市| 泗水县| 镇江市| 阿拉善右旗| 洛隆县| 樟树市| 榕江县| 郧西县| 永城市| 红安县| 许昌县| 嘉黎县| 武宣县| 泗水县| 磐安县| 卓资县| 泾阳县|