主從複製,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中的filemaster_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)
如果後期需要加伺服器,這個辦法就有限制了.是指 2臺伺服器地位一樣, 但其中一台為唯讀,並且業務中也只寫某1臺伺服器.我們可以在業務邏輯上來解決,
以redis為例, 我們可以專門構建乙個 global:id
每次php插入mysql前,先 incr->global:id, 得到乙個不重複的id。
或則預先生成乙個id池,當需要時去取。
好處: 如果供寫入的伺服器出了故障,能迅速的切換到從伺服器,
或者出於檢修等目的,把寫入功能切換到另一台伺服器也比較方便.
#主庫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...