mysql主從分離主數據庫配置,MySQL主從數據庫

本文目錄一覽:

mysql主從分離是怎麼配置的

1、在主從服務器上都裝上MySQL數據庫,windows系統鄙人安裝的是mysql_5.5.25.msi版本,Ubuntu安裝的是mysql-5.6.22-linux-glibc2.5-i686.tar

windows安裝mysql就不談了,一般地球人都應該會。鄙人稍微說一下Ubuntu的MySQL安裝,我建議不要在線下載安裝,還是離線安裝的好。大家可以參考 這位不知道大哥還是姐妹,寫的挺好按照這個就能裝上。在安裝的時候可能會出現幾種現象,大家可以參考解決一下:

(1)如果您不是使用root用戶登錄,建議 su – root 切換到Root用戶安裝,那就不用老是 sudo 了。

(2)存放解壓的mysql 文件夾,文件夾名字最好改成mysql

(3)在./support-files/mysql.server start 啟動MySQL的時候,可能會出現一個警告,中文意思是啟動服務運行讀文件時,忽略了my.cnf文件,那是因為my.cnf的文件權限有問題,mysql會認為該文件有危險不會執行。但是mysql還會啟動成功,但如果下面配置從服務器參數修改my.cnf文件的時候,你會發現文件改過了,但是重啟服務時,修改過後的配置沒有執行,而且您 list一下mysql的文件夾下會發現很多.my.cnf.swp等中間文件。這都是因為MySQL啟動時沒有讀取my.cnf的原因。這時只要將my.cnf的文件權限改成my_new.cnf的權限一樣就Ok,命令:chmod 644 my.cnf就Ok

(4)Ubuntu中修改文檔內容沒有Vim,最好把Vim 裝上,apt-get install vim,不然估計會抓狂。

這時候我相信MySQL應該安裝上去了。

2、配置Master主服務器

(1)在Master MySQL上創建一個用戶『repl』,並允許其他Slave服務器可以通過遠程訪問Master,通過該用戶讀取二進制日誌,實現數據同步。

創建用於讀取日誌的數據庫用戶

(2)找到MySQL安裝文件夾修改my.Ini文件。mysql中有好幾種日誌方式,這不是今天的重點。我們只要啟動二進制日誌log-bin就ok。

在[mysqld]下面增加下面幾行代碼

View Code

(3)查看日誌

mysql SHOW MASTER STATUS;

+——————-+———-+————–+——————+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+——————-+———-+————–+——————+

| master-bin.000001 | 1285 | | |

+——————-+———-+————–+——————+

1 row in set (0.00 sec)

重啟MySQL服務

3、配置Slave從服務器(windows)

(1)找到MySQL安裝文件夾修改my.ini文件,在[mysqld]下面增加下面幾行代碼

my.cnf 配置

重啟MySQL服務

(2)連接Master

change master to master_host=’192.168.0.104′, //Master 服務器Ip

master_port=3306,

master_user=’repl’,

master_password=’mysql’,

master_log_file=’master-bin.000001′,//Master服務器產生的日誌

master_log_pos=0;

(3)啟動Slave

start slave;

4、Slave從服務器(Ubuntu)

(1)找到MySQL安裝文件夾修改my.cnf文件,vim my.cnf

s

(2) ./support-files/myql.server restart 重啟MySQL服務 , ./bin/mysql 進入MySQL命令窗口

(3)連接Master

change master to master_host=’192.168.0.104′, //Master 服務器Ip

master_port=3306,

master_user=’repl’,

master_password=’mysql’,

master_log_file=’master-bin.000001′,//Master服務器產生的日誌

master_log_pos=0;

(4)啟動Slave

start slave;

OK所有配置都完成了,這時候大家可以在Master Mysql 中進行測試了,因為我們監視的時Master mysql 所有操作日誌,所以,你的任何改變主服務器數據庫的操作,都會同步到從服務器上。創建個數據庫,表試試吧。。。

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。

Ubuntu配置Mysql主從數據庫

本次環境:虛擬機下

服務器:Ubuntu

14.04

LTS

數據庫:

5.5.37

端口:3306

主IP:192.168.63.133

從IP:192.168.63.134

授權賬號:

user:suxh

password:111111

好了交代完環境:我們直接配置:

第一步:主從兩台服務器要有同樣的數據庫(需要同步的)這裡用的是backup

數據庫(不多說了,在同步開始前,把主庫的複製一份到從庫就行了)

第二步配置主(master)數據庫

編輯/etc/my.cnf

主要是開啟二進制日誌

和設置要同步的數據庫

等一些參數

#

binary

logging

format

mixed

recommended

binlog_format=mixed

binlog-ignore-db=mysql

binlog-do-db=backup

#

required

unique

id

between

1

and

2^32

1

#

defaults

to

1

if

master-host

is

not

set

#

but

will

not

function

as

a

master

if

omitted

server-id

=

1

參數解釋下:

server-id

這個是唯一的不能跟從服務器相同。

binlog_format

二進制文件的格式

binlog_ignore-db

忽略的數據庫

binlog-do-db

要同步的數據庫

設置完了以後

重啟數據庫就可以了。

第三步從數據庫:

同樣修改/etc/my.cnf

在mysql

版本5.1.7

不支持master-host」類似的參數;

所以這裡只要配置server-id=2

就可以了

然後登陸從數據庫設置

change

master

to

master_host=’192.168.63.133′,

master_user=’suxh’,

master_password=’111111′;

slave

start;

基本配置就好了。這是我的簡要筆記。

mysql 主從配置 需要什麼網絡環境

 1、確保主數據庫與從數據庫一模一樣。

例如:主數據庫里的a的數據庫里有b,c,d表,那從數據庫里的就應該有一個模子刻出來的a的數據庫和b,c,d表

2、在主數據庫上創建同步賬號。

GRANT REPLICATION SLAVE,FILE ON *.* TO ‘mstest’@’192.168.1.112’ IDENTIFIED BY ‘123456’;

192.168.1.112:是運行使用該用戶的ip地址

mstest:是新創建的用戶名

123456:是新創建的用戶名的密碼

以上命令的詳細解釋,最好百度一下,寫太多反到更加更不清思路。

3、配置主數據庫的my.ini(因為是在window下,所以是my.ini不是my.cnf)。

  [mysqld]

server-id=1

log-bin=log

binlog-do-db=mstest //要同步的mstest數據庫,要同步多個數據庫,就多加幾個replicate-db-db=數據庫名

binlog-ignore-db=mysql //要忽略的數據庫

mysql主從原理如何配置

1.在主數據庫服務器為從服務器添加一個擁有權限訪問主庫的用戶:

GRANT REPLICATION SLAVE ON *.* TO ‘ test’@’%’ IDENTIFIED BY ‘test’;

(%表示允許所有IP,可設置指定從服務器IP)

添加用戶後:

可在從服務器上用mysql -h127.0.0.1 -utest -ptest; 來測試是否有權限訪問主數據庫

2.在主據庫配置文件加上:

#master config

server-id = 1

log-bin = mysql-bin

3.在從服務器數據庫配置文件:

server-id = 2

master-host = 10.0.0.199

master-user = test

master-password = test

replicate-do-db = test

master-port = 3306

log-bin = mysql-bin

如果你的一切配置順利

你在從服務器上輸入命令:show slave status\G

成功情況:

Slave_IO_Running:yes

Slave_SQL_Running:yes

在主服務器上輸入show master status

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

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

相關推薦

  • 如何修改mysql的端口號

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

    編程 2025-04-29
  • Python 常用數據庫有哪些?

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

    編程 2025-04-29
  • openeuler安裝數據庫方案

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

    編程 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
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL數據庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論