mysql資料庫主從同步指定庫的簡單介紹

本文目錄一覽:

MYSQL主從同步備份問題

主從同步不需要指定資料庫啊,主伺服器上的數據會自動同步到從伺服器上啊。不會發生你所說的問題啊,MySQL的複製功能請參考

你所說的的意思是不是備份啊,並不是MySQL的複製功能。

mysql 主從配置 限制同步資料庫

一、 概述

MySQL從3.23.15版本以後提供資料庫複製(replication)功能,利用該功能可以實現兩個資料庫同步、主從模式、互相備份模式的功能。本文檔主要闡述了如何在linux系統中利用mysql的replication進行雙機熱備的配置。

二、 環境

操作系統:Linux 2.6.23.1-42.fc8 # SMP(不安裝XEN)

Mysql版本:5.0.45-4.fc8

設備環境:PC(或者虛擬機)兩台

三、 配置

資料庫同步複製功能的設置都在MySQL的配置文件中體現,MySQL的配置文件(一般是my.cnf):在本環境下為/etc/my.cnf。

3.1 設置環境:

IP的設置:

A主機 IP:10.10.0.119

Mask:255.255.0.0

B主機 IP:10.10.8.112

Mask:255.255.0.0

在IP設置完成以後,需要確定兩主機的防火牆確實已經關閉。可以使用命令service iptables status查看防火牆狀態。如果防火牆狀態

為仍在運行。使用service iptables stop來停用防火牆。如果想啟動關閉防火牆,可以使用setup命令來禁用或定製。

最終以兩台主機可以相互ping通為佳。

3.2 配置A主(master) B從(slave)模式

3.2.1 配置A 為master

、增加一個用戶同步使用的帳號:

GRANT FILE ON *.* TO 『backup』@’10.10.8.112′ IDENTIFIED BY 『1234』;

GRANTREPLICATION SLAVE ON *.* TO 『backup』@’10.10.8.112′ IDENTIFIED BY 『1234』;

賦予10.10.8.112也就是Slave機器有File許可權,只賦予Slave機器有File許可權還不行,還要給它REPLICATION SLAVE的許可權才可以。

、增加一個資料庫作為同步資料庫:

create database test;

、創建一個表結構:

create table mytest (username varchar(20),password varchar(20));

、修改配置文件:

修改A的/etc/my.cnf文件,在my.cnf配置項中加入下面配置:

server-id = 1 #Server標識

log-bin

binlog-do-db=test #指定需要日誌的資料庫

、重起資料庫服務:

service mysqld restart

查看server-id:

show variable like 『server_id』;

mysql 怎麼配置主從資料庫

5.6mysql怎麼進行主從配置

在主資料庫中創建新資料庫rep_test。

然後編輯主資料庫的my.ini文件

在[mysqld]節點中增加如下內容:

server-id=1 #指定唯一的ID,1至32,必須的

log-bin=mysql-log-bin #指定二進位日誌存放路徑,必須的

binlog-do-db=rep_test #指定要同步的資料庫,必須的

#binlog-ignore-db=mysql #指定不要同步的資料庫,如果指定了binlog-do-db就不用再指定該項

MySQL 主從,5 分鐘帶你掌握

MySQL 主從一直是面試常客,裡面的知識點雖然基礎,但是能回答全的同學不多。

比如樓哥之前面試小米,就被問到過主從複製的原理,以及主從延遲的解決方案,因為回答的非常不錯,給面試官留下非常好的印象。你之前面試,有遇到過哪些 MySQL 主從的問題呢?

所謂 MySQL 主從,就是建立兩個完全一樣的資料庫,一個是主庫,一個是從庫, 主庫對外提供讀寫的操作,從庫對外提供讀的操作 ,下面是一主一從模式:

對於資料庫單機部署,在 4 核 8G 的機器上運行 MySQL 5.7 時,大概可以支撐 500 的 TPS 和 10000 的 QPS, 當遇到一些活動時,查詢流量驟然,就需要進行主從分離。

大部分系統的訪問模型是讀多寫少,讀寫請求量的差距可能達到幾個數量級,所以我們可以通過一主多從的方式, 主庫只負責寫入和部分核心邏輯的查詢,多個從庫只負責查詢,提升查詢性能,降低主庫壓力。

MySQL 主從還能做到服務高可用,當主庫宕機時,從庫可以切成主庫,保證服務的高可用,然後主庫也可以做數據的容災備份。

整體場景總結如下:

MySQL 的主從複製是依賴於 binlog 的,也就是記錄 MySQL 上的所有變化並以二進位形式保存在磁碟上二進位日誌文件。

主從複製就是將 binlog 中的數據從主庫傳輸到從庫上,一般這個過程是非同步的,即主庫上的操作不會等待 binlog 同步的完成。

詳細流程如下:

當主庫和從庫數據同步時,突然中斷怎麼辦?因為主庫與從庫之間維持了一個長鏈接,主庫內部有一個線程,專門服務於從庫的這個長鏈接的。

對於下面的情況,假如主庫執行如下 SQL,其中 a 和 create_time 都是索引:

我們知道,數據選擇了 a 索引和選擇 create_time 索引,最後 limit 1 出來的數據一般是不一樣的。

所以就會存在這種情況:在 binlog = statement 格式時,主庫在執行這條 SQL 時,使用的是索引 a,而從庫在執行這條 SQL 時,使用了索引 create_time,最後主從數據不一致了。

那麼我們改如何解決呢?

可以把 binlog 格式修改為 row,row 格式的 binlog 日誌記錄的不是 SQL 原文,而是兩個 event:Table_map 和 Delete_rows。

Table_map event 說明要操作的表,Delete_rows event用於定義要刪除的行為,記錄刪除的具體行數。 row 格式的 binlog 記錄的就是要刪除的主鍵 ID 信息,因此不會出現主從不一致的問題。

但是如果 SQL 刪除 10 萬行數據,使用 row 格式就會很占空間的,10 萬條數據都在 binlog 裡面,寫 binlog 的時候也很耗 IO。但是 statement 格式的 binlog 可能會導致數據不一致。

設計 MySQL 的大叔想了一個折中的方案,mixed 格式的 binlog,其實就是 row 和 statement 格式混合使用, 當 MySQL 判斷可能數據不一致時,就用 row 格式,否則使用就用 statement 格式。

有時候我們遇到從資料庫中獲取不到信息的詭異問題時,會糾結於代碼中是否有一些邏輯會把之前寫入的內容刪除,但是你又會發現,過了一段時間再去查詢時又可以讀到數據了,這基本上就是主從延遲在作怪。

主從延遲,其實就是「從庫回放」 完成的時間,與 「主庫寫 binlog」 完成時間的差值, 會導致從庫查詢的數據,和主庫的不一致 。

談到 MySQL 資料庫主從同步延遲原理,得從 MySQL 的主從複製原理說起:

總結一下主從延遲的主要原因 :主從延遲主要是出現在 「relay log 回放」 這一步,當主庫的 TPS 並發較高,產生的 DDL 數量超過從庫一個 SQL 線程所能承受的範圍,那麼延時就產生了,當然還有就是可能與從庫的大型 query 語句產生了鎖等待。

我們一般會把從庫落後的時間作為一個重點的資料庫指標做監控和報警,正常的時間是在毫秒級別,一旦落後的時間達到了秒級別就需要告警了。

解決該問題的方法,除了縮短主從延遲的時間,還有一些其它的方法,基本原理都是盡量不查詢從庫。

具體解決方案如下:

在實際應用場景中,對於一些非常核心的場景,比如庫存,支付訂單等,需要直接查詢從庫,其它非核心場景,就不要去查主庫了。

兩台機器 A 和 B,A 為主庫,負責讀寫,B 為從庫,負責讀數據。

如果 A 庫發生故障,B 庫成為主庫負責讀寫,修復故障後,A 成為從庫,主庫 B 同步數據到從庫 A。

一台主庫多台從庫,A 為主庫,負責讀寫,B、C、D為從庫,負責讀數據。

如果 A 庫發生故障,B 庫成為主庫負責讀寫,C、D負責讀,修復故障後,A 也成為從庫,主庫 B 同步數據到從庫 A。

如何實現兩個mysql資料庫之間的主從同步?

配置主的配置文件

vi /etc/my.cnf

創建複製用戶並授權給從伺服器

grant replication slave on *.* to ‘rpl’@’192.168.162.130’ identified by ‘123456’;

重啟主伺服器的MySQL  /etc/init.d/mysqld restart

查看master信息: 進入MySQL  show master status \G;

修改從庫配置文件

vi /etc/my.cnf

重啟從伺服器MySQL,進入MySQL

指定主伺服器IP等信息

change master to master_host=’192.168.162.128 ‘,master_user=’rpl’,master_password=’123456′,master_log_file=’mysql-bin.000001′,master_log_pos=647;

啟動slave  :start slave;

查看slave狀態:show slave status \G;

報錯Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work

意思是主和從必須都要有不同的uuid,我們分別去查看下主從的uuid

主:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312

查看從庫uuid  從庫uuid:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312

可以看出是真的一樣,原因在於 我是先安裝了一個虛擬機並裝好MySQL,後面有複製了一遍,作為從伺服器,所以導致了這個UUID是一樣的。

接下來就是解決這個UUID問題,將從庫上的auto.cnf 備份下。然後重啟從庫。再看下從庫的UUID

[auto]

server-uuid=2e9c834a-1eb2-11e7-864b-000c2928472e

再次查看從庫狀態

從庫狀態正常了

11.測試主從是否正常

主庫上創建一個測試庫,test :create database test;

創建測試表:

create table test.test(

id int,

username varchar(10)

)ENGINE=’innodb’

12.查看從庫: 

正常,說明主從搭建成功

如何配置兩個MySQL資料庫之間的主從同步功能?

IP的設置:A主機 IP:10.10.0.119;Mask:255.255.0.0;B主機 IP:10.10.8.112;Mask:255.255.0.0

在IP設置完成以後,需要確定兩主機的防火牆確實已經關閉。可以使用命令service iptables status查看防火牆狀態。如果防火牆狀態。

為仍在運行。使用service iptables stop來停用防火牆。如果想啟動關閉防火牆,可以使用setup命令來禁用或定製。最終以兩台主機可以相互ping通為佳。

3.2 配置A主(master) B從(slave)模式;3.2.1 配置A 為master。

增加一個用戶同步使用的帳號:

GRANT FILE ON *.* TO 『backup』@’10.10.8.112′ IDENTIFIED BY 『1234』;

GRANTREPLICATION SLAVE ON *.* TO 『backup』@’10.10.8.112′ IDENTIFIED BY 『1234』。

賦予10.10.8.112也就是Slave機器有File許可權,只賦予Slave機器有File許可權還不行,還要給它REPLICATION SLAVE的許可權才可以。

增加一個資料庫作為同步資料庫:create database test;

創建一個表結構:create table mytest (username varchar(20),password varchar(20));

修改配置文件:修改A的/etc/my.cnf文件。

在my.cnf配置項中加入下面配置:

server-id = 1 #Server標識

log-bin

binlog-do-db=test #指定需要日誌的資料庫

重起資料庫服務:

service mysqld restart

查看server-id:

show variable like 『server_id』。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243012.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:53
下一篇 2024-12-12 12:54

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28

發表回復

登錄後才能評論