mysql集群技術 主主複製

2021-08-11 18:31:04 字數 3442 閱讀 2415

主從複製,2臺伺服器地位有差別,一主一從.

從伺服器一是起到備份作用,一是起到分擔查詢壓力的作用.

接下來的配置,2臺伺服器之間,沒有明顯的地位差距, 兩者可以同步對方的內容.

一般的格局如下圖:

兩台伺服器相互複製

1: 2臺伺服器都設定上二進位制日誌和relay日誌

2: 都設定上replcation賬號

3: 都設定對方為自己的master

說白了就是把主伺服器和從伺服器配置整合在一起,讓他們都具有主伺服器和從伺服器的功能

#主庫166配置開始

# 給伺服器起乙個唯一的 id

server-id=166

# 開啟二進位制日誌

log-bin=mysql-bin

# 指定日誌格式 有mixed|row|statement 推薦mixed

binlog-format=mixed

# 從伺服器中繼日誌

realy-log=mysql-relay

#主庫166配置結束

#主庫168配置開始

server-id=168

# 開啟二進位制日誌

log-bin=mysql-bin

# 指定日誌格式 有mixed|row|statement 推薦mixed

binlog-format=mixed

# 從伺服器中繼日誌

realy-log=mysql-relay

#主庫168配置結束

master_log_file對應主伺服器 show master status中的file

master_log_pos對應主伺服器 … status中的position

master_host 分別對應主伺服器

mysql> change master to

master_host=

'192.168.1.166',

master_user=

'repl',

master_password=

'123456',

master_log_file=

'mysql-bin.000001',

master_log_pos=

0;query ok, 0

rows affected (0.00 sec)

例:

create

table stu (

id int

primary

key auto_increment.

)......

2臺mysql地位相等, 假如2個請求同時到達2臺伺服器,

請求的a節點, stu 的id為1

請求的b 節點, stu的id為1 ,

同步—>衝突

如何解決?

讓1臺伺服器 1,3,5,7來增長

另1臺伺服器 2,4,6,8來增長

一台伺服器:

set

global auto_increment_increment = 2;#每步增長1

setglobal auto_increment_offset = 1;從1開始增長

setsession auto_increment_increment = 2;

setsession auto_increment_offset = 1;

另一台伺服器:

set

global auto_increment_increment = 2;

setglobal auto_increment_offset = 2;

setsession auto_increment_increment=2;

setsession auto_increment_offset = 2;

注:auto-increment-increment 和 auto-increment-offset 要寫到配置檔案中,防止下次重啟後失效.

操作後得到如下類似效果

mysql> select id,hit from news;

+----+-------------------+

| id | hit |

| 1 | 100 |

| 3 | 200 |

| 4 | 300 |

| 6 | 400 |

+----+-------------------+

4 rows in set (0.00 sec)

如果後期需要加伺服器,這個辦法就有限制了.

我們可以在業務邏輯上來解決,

以redis為例, 我們可以專門構建乙個 global:id

每次php插入mysql前,先 incr->global:id, 得到乙個不重複的id。

或則預先生成乙個id池,當需要時去取。

是指 2臺伺服器地位一樣, 但其中一台為唯讀,並且業務中也只寫某1臺伺服器.

好處: 如果供寫入的伺服器出了故障,能迅速的切換到從伺服器,

或者出於檢修等目的,把寫入功能切換到另一台伺服器也比較方便.

#主庫166配置開始

# 給伺服器起乙個唯一的 id

server-id=166

# 開啟二進位制日誌

log-bin=mysql-bin

# 指定日誌格式 有mixed|row|statement 推薦mixed

binlog-format=mixed

# 從伺服器中繼日誌

realy-log=mysql-relay

#主庫166配置結束

#主庫168配置開始

server-id=168

# 開啟二進位制日誌

log-bin=mysql-bin

# 指定日誌格式 有mixed|row|statement 推薦mixed

binlog-format=mixed

# 從伺服器中繼日誌

realy-log=mysql-relay

#-----------增加----------

#當變數對複製從伺服器設定為on時,從伺服器不允許更新,除非通過從伺服器的執行緒或使用者擁有super許可權。可以確保從伺服器不接受客戶端的更新命令。

read_only=on

#主庫168配置結束

主主複製 主主複製時的主鍵衝突解決

大致思路 1 2臺伺服器都設定上二進位制日誌和relay日誌 2 都設定上replcation賬號 3 都設定對方為自己的master 主主複製下一定要注意避免的問題 同步衝突 例 create table stu id int primary key auto increment.2臺mysql地...

mysql 3台主主 mysql主主

設定主 主複製 1 在兩台伺服器上各自建立乙個具有複製許可權的使用者 2 修改配置檔案 主伺服器上 mysqld server id 10 log bin mysql bin relay log relay mysql relay log index relay mysql.index auto i...

mysql雙主複製的缺點 mysql雙主複製總結

雙主複製 1 在兩台伺服器上各自建立乙個具有複製許可權的使用者 2 修改配置檔案 主伺服器a上 mysqld server id 10 log bin mysql bin relay log relay mysql auto increment offset 1 起始值 auto increment...