MySQL雙主配置的項(xiàng)目實(shí)踐
1、配置的前置條件
- 已知A服務(wù)器IP=192.168.0.11,B服務(wù)器IP=192.168.0.12
- 建議使用相同版本的MySQL,若是小版本跨越一般是兼容的,如A的MySQL版本是5.7.1,B的MySQL版本是5.7.2;
- 配置前需要保證兩個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)一致,建議將A數(shù)據(jù)庫(kù)同步到B數(shù)據(jù)庫(kù),以保證配置前A、B兩臺(tái)數(shù)據(jù)庫(kù)的數(shù)據(jù)是一致的;
- 確保2臺(tái)數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)端口是互通的,如:3306;
- 配置期間不能有新數(shù)據(jù)的寫入;
2、配置
2.1 配置B服務(wù)器MySQL同步A服務(wù)器MySQL數(shù)據(jù)
2.1.1 修改A服務(wù)器的MySQL配置文件my.cnf,添加以下內(nèi)容
[mysqld] #master A slave config #主機(jī)A的server id,需要和主機(jī)B的不一致 server-id=1 #二進(jìn)制日志文件名 log-bin=master-a-bin #二進(jìn)制日志格式 binlog-format=ROW #設(shè)置日志最大為1G max_binlog_size=1024M #設(shè)置binlog文件最大保留天數(shù)30天 expire_logs_days=30 #數(shù)據(jù)庫(kù)宕機(jī)恢復(fù)后,自動(dòng)同步缺少的數(shù)據(jù) relay_log=mysql-relay-bin relay_log_recovery=1 #設(shè)置自增id的初始值為1,每次增量為2 auto_increment_offset=1 auto_increment_increment=2 #開(kāi)啟gtid gtid_mode=ON enforce_gtid_consistency=1 #需要同步的數(shù)據(jù)庫(kù),如test1,test2,根據(jù)實(shí)際情況配置 binlog-do-db=test1 binlog-do-db=test2 #不要同步的數(shù)據(jù)庫(kù) binlog-ignore-db=mysql,information_schema,performance_schema,sys #不要同步的表 #replicate-ignore-table=庫(kù)名.表名
配置完成后,保存并重啟一下MySQL
2.1.2 登錄A服務(wù)器MySQL,創(chuàng)建B的數(shù)據(jù)同步賬號(hào)
同步賬號(hào):repl_b,同步密碼:123456,具體命令步驟如下
mysql> grant replication slave on *.* to '同步賬號(hào)'@'主機(jī)B的IP' identified by '同步密碼'; #登錄A服務(wù)器MySQL,創(chuàng)建B的數(shù)據(jù)同步賬號(hào) mysql> flush privileges; #刷新權(quán)限 mysql> reset master; #重置master信息 #說(shuō)明:同步開(kāi)始前,不要有數(shù)據(jù)寫入,否則影響bin-log日志文件 mysql> flush tables with read lock; #鎖表命令,在同步配置完成后再使用解鎖表命令:unlock tables; mysql> show master status; #查看并記錄好當(dāng)前bin-log的文件名和位置,記錄bing-log文件名:master-a-bin.000001,日志位置:154
2.1.3 登錄B服務(wù)器修改MySQL的配置文件my.cnf,設(shè)置A為B的master,添加以下
#master B slave config #主機(jī)B的server id,與主機(jī)A的id不一致 server-id=2 #二進(jìn)制日志文件名 log-bin=master-b-bin #二進(jìn)制日志格式 binlog-format=ROW #設(shè)置日志最大為1G max_binlog_size=1024M #設(shè)置binlog文件最大保留天數(shù)30天 expire_logs_days=30 #數(shù)據(jù)庫(kù)宕機(jī)恢復(fù)后,自動(dòng)同步缺少的數(shù)據(jù) relay_log=mysql-relay-bin relay_log_recovery=1 #設(shè)置自增id的初始值為1,每次增量為2 auto_increment_offset=2 auto_increment_increment=2 #開(kāi)啟gtid gtid_mode=ON enforce_gtid_consistency=1 #需要同步的數(shù)據(jù)庫(kù),如test1,test2,根據(jù)實(shí)際情況配置 binlog-do-db=test1 binlog-do-db=test2 #不要同步的數(shù)據(jù)庫(kù) binlog-ignore-db=mysql,information_schema,performance_schema,sys #不要同步的表 #replicate-ignore-table=庫(kù)名.表名
配置完成后,保存并重啟以下MySQL
登錄主機(jī)B的MySQL,設(shè)置A為B的master
PS:如果開(kāi)啟了全局事務(wù)id(gtid_mode=ON),那么可以不用指定master_log_pos參數(shù),可去掉此參數(shù)
#備份好需要同步的數(shù)據(jù)庫(kù),把備份好的數(shù)據(jù)庫(kù)導(dǎo)入到主機(jī)B上 #登錄主機(jī)B的mysql,設(shè)置A為B的master #停止B的slave mysql> stop slave; #設(shè)置B的master的為A,通過(guò)repl_b同步A的數(shù)據(jù) mysql> change master to master_host='主機(jī)A的IP',master_user='同步賬號(hào)',master_password='同步密碼',master_log_file='bing-log文件名',master_log_pos=日志位置; #開(kāi)啟B的slave mysql> start slave; #確定B的slave是否同步成功 mysql> show slave status\G; #查看輸出結(jié)果中Slave_IO_Running和Slave_SQL_Running都為YES時(shí),表示成功
到這步已經(jīng)完成了B服務(wù)器MySQL同步A服務(wù)器數(shù)據(jù),下面再進(jìn)行設(shè)置A同步B服務(wù)器的MySQL
2.2 配置A服務(wù)器MySQL同步B服務(wù)器MySQL數(shù)據(jù)
2.2.1 登錄B服務(wù)器的MySQL,創(chuàng)建A服務(wù)器的MySQL同步賬號(hào),同步賬號(hào):repl_a,密碼:123456
#登錄B的mysql mysql> grant replication slave on *.* to '同步賬號(hào)'@'主機(jī)A的IP' identified by '同步密碼'; mysql> flush privileges; #說(shuō)明:同步開(kāi)始前,建議不要有數(shù)據(jù)寫入,否則影響bin-log日志文件 #重置master信息 mysql> reset master; #鎖表命令,同步完成后使用解鎖表命令:unlock tables mysql> flush tables with read lock; #查看并記錄好當(dāng)前bin-log的文件名和位置,記錄bing-log文件名:master-b-bin.000001,日志位置:154 mysql> show master status;
2.2.2、登錄A服務(wù)器MySQL,設(shè)置B為A的master
#登錄A主機(jī),停止slave mysql> stop slave; #設(shè)置A的master為B mysql> change master to master_host='主機(jī)B的IP',master_user='同步賬號(hào)',master_password='同步密碼',master_log_file='master-b-mysql-bin.000001',master_log_pos=154; #啟動(dòng)slave mysql> start slave; mysql> show slave status\G; #查看輸出結(jié)果中Slave_IO_Running和Slave_SQL_Running都為YES時(shí),表示成功
3、解鎖數(shù)據(jù)庫(kù)表的鎖定
在A服務(wù)器和B服務(wù)器的MySQL里面執(zhí)行解鎖命令:unlock tables
mysql> unlock tables;
4、進(jìn)行數(shù)據(jù)庫(kù)的讀寫同步測(cè)試
在A更改(插入、修改、刪除)的數(shù)據(jù)會(huì)實(shí)時(shí)同步至B的數(shù)據(jù)庫(kù),同樣B更改數(shù)據(jù)也會(huì)實(shí)時(shí)同步至A
到此這篇關(guān)于MySQL雙主配置的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)MySQL雙主配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql獲取當(dāng)前日期年月的兩種實(shí)現(xiàn)方式
這篇文章主要介紹了mysql獲取當(dāng)前日期年月的兩種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Mysql InnoDB刪除數(shù)據(jù)后釋放磁盤空間的方法
這篇文章主要介紹了Mysql InnoDB刪除數(shù)據(jù)后釋放磁盤空間的方法,Innodb數(shù)據(jù)庫(kù)對(duì)于已經(jīng)刪除的數(shù)據(jù)只是標(biāo)記為刪除,并不真正釋放所占用的磁盤空間,這就導(dǎo)致InnoDB數(shù)據(jù)庫(kù)文件不斷增長(zhǎng),本文就講解釋放磁盤空間的方法,需要的朋友可以參考下2015-04-04
ssm框架如何調(diào)用mysql存儲(chǔ)過(guò)程
這篇文章主要介紹了ssm框架如何調(diào)用mysql存儲(chǔ)過(guò)程,首先是建表,創(chuàng)建存儲(chǔ)過(guò)程,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-05-05
超詳細(xì)匯總21個(gè)值得收藏的mysql優(yōu)化實(shí)踐
這篇文章主要分享的是超詳細(xì)匯總21個(gè)值得收藏的mysql優(yōu)化實(shí)踐,對(duì)正在學(xué)習(xí)的同學(xué)有一定的參考價(jià)值,需要的同學(xué)可以參考一下2022-01-01

