欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2023年10月26日 17:16:03   作者:ZNineSun  
這篇文章主要介紹了mysql如何設(shè)置主從數(shù)據(jù)庫(kù)的同步問(wèn)題,具有很好的參考價(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ù)庫(kù)的處理上如果兩個(gè)mysql實(shí)現(xiàn)高可用,避免單點(diǎn)問(wèn)題。

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

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

可以定期的將數(shù)據(jù)從主服務(wù)器上復(fù)制到從服務(wù)器上,這無(wú)疑是先了數(shù)據(jù)的異地備份。在傳統(tǒng)的備份體制下,是將數(shù)據(jù)備份在本地。此時(shí)備份 作業(yè)與數(shù)據(jù)庫(kù)服務(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ù)庫(kù)管理員無(wú)法使用備份文件來(lái)恢復(fù)數(shù)據(jù)。這顯然會(huì)給企業(yè) 帶來(lái)比較大的損失。

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

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

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

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

3.原理

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

3.1 什么是Mysql Replication

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

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

3.2 Mysql Replication的原理

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

注意:

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

整體上來(lái)說(shuō),復(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ù),無(wú)法對(duì)SQL語(yǔ)句執(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ù)中的語(yǔ)句都是交叉執(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從線程)處理該過(guò)程的最后一步

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

4.My Replication常見方案

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

一般用來(lái)做讀寫分離的,master寫,其他slave讀,這種架構(gòu)最大問(wèn)題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ì)庫(kù)和表數(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ù)庫(kù)的binlog刷到磁盤上去 , 0 不控制,性能最好,1每次事物提交都會(huì)刷到日志文件中,性能最差,最安全
binlog_format = mixed   #binlog日志格式,mysql默認(rèn)采用statement,建議使用mixed
expire_logs_days = 7                           #binlog過(guò)期清理時(shí)間
max_binlog_size = 100m                    #binlog每個(gè)日志文件大小
binlog_cache_size = 4m                        #binlog緩存大小
max_binlog_cache_size= 512m              #最大binlog緩存大
binlog-ignore-db=mysql #不生成日志文件的數(shù)據(jù)庫(kù),多個(gè)忽略數(shù)據(jù)庫(kù)可以用逗號(hào)拼接,或者 復(fù)制這句話,寫多行

auto-increment-offset = 1     # 自增值的偏移量
auto-increment-increment = 1  # 自增值的自增量
slave-skip-errors = all #跳過(guò)從庫(kù)錯(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ù)庫(kù),創(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;

注意:我們接下來(lái)進(jìn)行一個(gè)很重要的步驟,就是修改主庫(kù)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.配置從庫(kù)

登錄進(jìn)入從庫(kù)的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)從庫(kù)slave進(jìn)程

start slave;

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

7.2 查看是否配置成功

show slave status\G

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

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

我用navicat連接到主庫(kù)和從庫(kù)

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

然后刷新salve

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

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

總結(jié)

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

相關(guān)文章

最新評(píng)論