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

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

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

1.業(yè)務場景

場景1:實現(xiàn)服務器負載均衡

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

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

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

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

2.實現(xiàn)的目標

一臺服務器充當主數(shù)據(jù)庫服務器,另一臺或多臺服務器充當從數(shù)據(jù)庫服務器,主服務器中的數(shù)據(jù)自動復制到從服務器之中。

對于多級復制,數(shù)據(jù)庫服務器即可充當主機,也可充當從機。

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

3.原理

我們的主從復制基于Mysql Replication來進行實現(xiàn)

3.1 什么是Mysql Replication

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

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

3.2 Mysql Replication的原理

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

注意:

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

整體上來說,復制有3個步驟:

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

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

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

3.3 My Replication的作用

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

3.4 MySQL主從復制

第一步:master記錄二進制日志

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

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

在事件寫入二進制日志完成后,master通知存儲引擎提交事務。

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

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

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

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

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讀,這種架構最大問題I/O壓力集中在Master上<多臺同步影響IO>

M-S-S

使用一臺slave作為中繼,分擔Master的壓力,slave中繼需要開啟bin-log,并配置log-slave-updates

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

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

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

M-M-M

監(jiān)控三臺機器互相作對方的master

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

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

One slave Muti master 一從對多主

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

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

5.實現(xiàn)

5.1 環(huán)境準備

本地安裝兩個mysql,或者使用虛擬機,或者使用docker安裝,需要準備兩個mysql,本文使用docker安裝

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

主服務器:3308

從服務器:3309

不會創(chuàng)建?點擊此處

5.2 修改 my.cnf配置文件

master的my.cnf配置文件

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

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

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

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.進入master數(shù)據(jù)庫,創(chuàng)建復制用戶并授權

依次執(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改為你自己主機的ip地址即可

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

SELECT User, Host FROM mysql.user;

6.1 賦予該用戶復制的權利

依次執(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;

注意:我們接下來進行一個很重要的步驟,就是修改主庫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.配置從庫

登錄進入從庫的mysql服務內執(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; 

注意你要修改以下內容:

7.1 啟動從庫slave進程

start slave;

附:停止從庫進程:stop slave;

7.2 查看是否配置成功

show slave status\G

當這兩個信息 都為yes時說明你配置成功啦。

8.測試主從同步

我用navicat連接到主庫和從庫

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

然后刷新salve

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

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

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

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

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

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

    mysql中TINYINT的取值范圍

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

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

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

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

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

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

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

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

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

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

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

    Mysql文件存儲圖文詳解

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

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

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

    mysql更新一個表里的字段等于另一個表某字段的值實例

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

最新評論

晴隆县| 嘉峪关市| 海原县| 桦川县| 凤山市| 三穗县| 阜宁县| 屏南县| 嵩明县| 灵台县| 玉树县| 鄂托克旗| 淮滨县| 左贡县| 青神县| 霍州市| 清水县| 博乐市| 晋宁县| 晋中市| 莱西市| 鹤峰县| 如皋市| 美姑县| 博客| 工布江达县| 鹿邑县| 平邑县| 丹东市| 嘉善县| 聂拉木县| 定兴县| 进贤县| 奎屯市| 彭阳县| 克什克腾旗| 石狮市| 玉屏| 麟游县| 临安市| 安宁市|