本篇文章為大家展示了MySQL中如何實現(xiàn)半同步復制,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設,網(wǎng)站制作與網(wǎng)站建設公司,1800元做網(wǎng)站建設全包,免費贈送網(wǎng)站基礎優(yōu)化服務,讓你的網(wǎng)站變得更有價值,公司擁有完善的專業(yè)網(wǎng)絡公司流程,能夠為企業(yè)提供建站服務。使用PHP+MYSQL開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);網(wǎng)站制作收費合理;免費進行網(wǎng)站備案等企業(yè)網(wǎng)站建設一條龍服務.
一、環(huán)境準備:
centos系統(tǒng)服務器2臺、一臺用戶做Mysql主服務器,一臺用于做Mysql從服務器,配置好yum源、防火墻關閉、各節(jié)點時鐘服務同步、各節(jié)點之間可以通過主機名互相通信
192.168.41.145 master
192.168.41.137 slave
二、準備步驟:
1、iptables -F && setenforce 清空防火墻策略,關閉selinux
2、①vim /etc/hosts
192.168.41.145 master #各節(jié)點之間可以通過主機名互相通信
192.168.41.137 slave
② ntpdate 172.17.0.1 #各節(jié)點時鐘服務同步
3、拿兩臺服務器都使用yum方式安裝Mysql服務,要求版本一致
4、分別啟動兩臺服務器mysql服務,確保服務正常.
三、實現(xiàn)步驟:
1、配置master主服務器
對master進行配置,包括打開二進制日志,指定唯一的servr ID。例如,在配置文件加入如下值。
vim /etc/my.cnf
server-id=1 #配置server-id,讓主服務器有唯一ID號
log-bin=mysql-bin #打開Mysql日志,日志格式為二進制
skip-name-resolve#關閉名稱解析,(非必須)
2.創(chuàng)建復制帳號
在Master的數(shù)據(jù)庫中建立一個備份帳戶:每個slave使用標準的MySQL用戶名和密碼連master 。進行復制操作的用戶會授予REPLICATION SLAVE權限。
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'192.168.%.%' IDENTIFIED BY 'ke';
3.查看主服務器狀態(tài)
在Master的數(shù)據(jù)庫執(zhí)行show master status,查看主服務器二進制日志狀態(tài)
4、配置slave從服務器
對slave進行配置,打開中繼日志,指定唯一的servr ID,設置只讀權限。在配置文件加入如下值
server-id=2 #配置server-id,讓從服務器有唯一ID號
relay_log = mysql-relay-bin #打開Mysql日志,日志格式為二進制
read_only = 1 #設置只讀權限
log_bin = mysql-bin #開啟從服務器二進制日志
log_slave_updates = 1 #使得更新的數(shù)據(jù)寫進二進制日志中
5.啟動從服務器復制線程
①stop slave;
②reset slave;
③讓slave連接master,并開始重做master二進制日志中的事件。
CHANGE MASTER TO
MASTER_HOST='192.168.41.145',
MASTER_USER='slave',
MASTER_PASSWORD='ke', 【主從密碼要一致】
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=278;
※注意
IP為master的IP;
密碼和master設置一致;
POS設置查看master得到:show master status
④start slave;# 啟動復制線程。
6、查看從服務器狀態(tài)
可使用SHOW SLAVE STATUS\G查看從服務器狀態(tài),如下所示,也可用show processlist \G查看當前復制狀態(tài):
Slave_IO_Running: Yes #IO線程正常運行
Slave_SQL_Running: Yes #SQL線程正常運行
【兩者必須同時YES,才算啟動成功】
附:主從同步出現(xiàn)一下錯誤:
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
解決方法:
導致lave_IO_Running 為connecting 的原因主要有以下 3 個方面:
1、網(wǎng)絡不通
2、密碼不對
3、pos不對
四、驗證
在master上插入數(shù)據(jù),查看slave上是否可以同步
create database liuke;#建數(shù)據(jù)庫
use liuke;
create table mini_tb(id int(3),name char(10)); #建表
insert into mini_tb values(001,'candy'); #插入數(shù)據(jù)
select*from mini_tb; #查看表內容
在slave上查看,可以同步則成功。
五、添加新slave服務器
假如master已經(jīng)運行很久了,想對新安裝的slave進行數(shù)據(jù)同步,甚至它沒有master的數(shù)據(jù)。
此時,有幾種方法可以使slave從另一個服務開始,例如,從master拷貝數(shù)據(jù),從另一個slave克隆,從最近的備份開始一個slave。為了加快Slave與master同步,可
用以下方式先進行數(shù)據(jù)同步:
(1)master的某個時刻的數(shù)據(jù)快照;
(2)數(shù)據(jù)庫的備份數(shù)據(jù)
(3)master的二進制日志文件。
--------------mysql實現(xiàn)數(shù)據(jù)庫主主復制----------------
一、原理
主主復制即在兩臺MySQL主機內都可以變更數(shù)據(jù),而且另外一臺主機也會做出相應的變更。
如何實現(xiàn):就是將兩個主從復制有機合并起來。
配置的時候需要注意的問題:主鍵重復,server-id不能重復。
二、實驗步驟
master:192.168.41.145 slave:192.168.41.137
1、配置文件
定義master使用奇數(shù)id
vim /etc/my.cnf
auto_increment_offset=1 #起始值。一般填第n臺主MySQL。此時為第一臺主MySQL
auto_increment_increment=2 #步進值auto_imcrement。一般有n臺主MySQL就填n
slave 使用偶數(shù)id
auto_increment_offset=2
auto_increment_increment=2
2、 因為主主復制是兩個主從復制組合一起,所以就接著上面主從復制接著配置。
(1)
①在slave上創(chuàng)建一個192.168.41.145主機可以登錄的MySQL用戶。
用戶:bubu 密碼:123
②創(chuàng)建:create user 'bubu'@'192.168.41.145' IDENTIFIED BY "123";
授權:grant replication slave on *.* to 'bubu'@'192.168.41.145' IDENTIFIED BY "123";
mysql>FLUSH PRIVILEGES;
③在192.168.41.137上查看二進制名和位置:show master status;
(3) 告知二進制文件名與位置
在192.168.41.145中執(zhí)行:
change master to master_host='192.168.41.137',
master_user='bubu',
master_password='123',
master_log_file='mysql-bin.000004',
master_log_pos=601;
主主復制配置完成。
三、測試
(1)
兩個主機分別啟動slave:start slave;
分別查看slave狀態(tài):
192.168.41.145 【replicate-do-db=aa #要同步的數(shù)據(jù)庫,默認所有庫】
192.168.41.137
當看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明狀態(tài)正常
(2)
①192.168.41.145
MariaDB [mysql]> use jesper;
create table tab1(id int);
insert into tab1 values('66');
select*from tab1;
②192.168.41.145
MariaDB [mysql]> use jesper;
insert into tab1 values('99');
select*from tab1;
查看數(shù)據(jù): 兩個主機數(shù)據(jù)結果一樣!
※注意:
1、主主復制配置文件中auto_increment_increment和auto_increment_offset只能保證主鍵不重復,卻不能保證主鍵有序。
2、當配置完成Slave_IO_Running、Slave_SQL_Running不全為YES時,show slave status\G信息中有錯誤提示,可根據(jù)錯誤提示進行更正。
常見出錯點:
1、兩臺數(shù)據(jù)庫都存在db數(shù)據(jù)庫,而第一臺MySQL db中有tab1,第二臺MySQL db中沒有tab1,那肯定不能成功。
2、已經(jīng)獲取了數(shù)據(jù)的二進制日志名和位置,又進行了數(shù)據(jù)操作,導致POS發(fā)生變更。在配置CHANGE MASTER時還是用到之前的POS。
3、stop slave后,數(shù)據(jù)變更,再start slave。出錯。
終極更正法:重新執(zhí)行一遍CHANGE MASTER就好了
--------------MySQL實現(xiàn)數(shù)據(jù)庫半同步復制-------------
半同步復制模式必須在主服務器和從服務器同時中開啟,否則將會默認為異步復制模式。
一、環(huán)境準備
①需要安裝方可使用:
mysql> INSTALL PLUGIN plugin_name SONAME 'shared_library_name';
半同步復制:
semisync_master.so
semisync_slave.so
②檢查是否有自動加載功能
MariaDB [(none)]> show variables like 'have_dynamic_loading';
③主從復制已經(jīng)配置好,并且已經(jīng)工作。
二、實驗步驟
1、主節(jié)點設置:
①安裝:INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
②查看:MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';#查看半同步復制文件
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
③MariaDB [mydb]> SET GLOBAL rpl_semi_sync_master_enabled=ON;【0:關閉;1:開啟】
#開啟半同步復制,默認是關閉的。
2、從節(jié)點設置:
①INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
②MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';#查看是否加載成功
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | OFF |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
③重啟從服務器IO線程,手動將異步模式換成半同步模式
MariaDB [mydb]> STOP SLAVE IO_THREAD;
MariaDB [mydb]> SET GLOBAL rpl_semi_sync_slave_enabled = ON ;
MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
MariaDB [mydb]> START SLAVE IO_THREAD;
※可查看從庫錯誤日志觀察是否生效
3、配置文件修改
主從配置文件都添加:
vim /etc/my.cnf
rpl_semi_sync_master_enabled=1 #表示以后啟動MySQL將會自動開啟半同步復制
三、測試
摸擬slave掛掉,master等待10s仍沒接收到反饋信號,則轉為異步復制模式,繼續(xù)執(zhí)行。
首先同步創(chuàng)建數(shù)據(jù)庫aa
1、slave執(zhí)行stop slave;關閉主從復制
2、master在aa數(shù)據(jù)庫中創(chuàng)建表aihao,沒接收到反饋信號,等待十秒后(Rpl_semi_sync_master_timeout=1000等待超時),繼續(xù)執(zhí)行
master:
slave:
3、master在數(shù)據(jù)庫中再創(chuàng)建tab2,不需要等待反饋,直接執(zhí)行
【當反饋超時時,master將切換到異步復制模式。此時是異步模式,不需要等待】
4、slave執(zhí)行start slave,數(shù)據(jù)開始同步,建立aihao、tab2,反饋給master,并切換為半同步復制
5、slave執(zhí)行stop slave;關閉主從復制
6、master在數(shù)據(jù)庫中創(chuàng)建表tab3,此時需要等待10s,接收slave反饋信號;等待超時,切換為異步復制模式,繼續(xù)執(zhí)行【步驟4時,數(shù)據(jù)同步已經(jīng)反饋給master,此時master已經(jīng)是半同步復制模式】
上述內容就是Mysql中如何實現(xiàn)半同步復制,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文標題:Mysql中如何實現(xiàn)半同步復制
URL分享:http://muchs.cn/article2/jpeeic.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、、網(wǎng)站策劃、定制網(wǎng)站、ChatGPT、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)