色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL雙主(主主)架構(gòu)配置方案

瀏覽:108日期:2023-10-05 12:21:53

在企業(yè)中,數(shù)據(jù)庫(kù)高可用一直是企業(yè)的重中之重,中小企業(yè)很多都是使用mysql主從方案,一主多從,讀寫(xiě)分離等,但是單主存在單點(diǎn)故障,從庫(kù)切換成主庫(kù)需要作改動(dòng)。因此,如果是雙主或者多主,就會(huì)增加mysql入口,增加高可用。不過(guò)多主需要考慮自增長(zhǎng)ID問(wèn)題,這個(gè)需要特別設(shè)置配置文件,比如雙主,可以使用奇偶,總之,主之間設(shè)置自增長(zhǎng)ID相互不沖突就能完美解決自增長(zhǎng)ID沖突問(wèn)題。

主從同步復(fù)制原理

在開(kāi)始之前,我們先來(lái)了解主從同步復(fù)制原理。

復(fù)制分成三步:

1. master將改變記錄到二進(jìn)制日志(binary log)中(這些記錄叫做二進(jìn)制日志事件,binary log events);2. slave將master的binary log events拷貝到它的中繼日志(relay log);3. slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)。

下圖描述了這一過(guò)程:

MySQL雙主(主主)架構(gòu)配置方案

該過(guò)程的第一部分就是master記錄二進(jìn)制日志。在每個(gè)事務(wù)更新數(shù)據(jù)完成之前,master在二日志記錄這些改變。MySQL將事務(wù)串行的寫(xiě)入二進(jìn)制日志,即使事務(wù)中的語(yǔ)句都是交叉執(zhí)行的。在事件寫(xiě)入二進(jìn)制日志完成后,master通知存儲(chǔ)引擎提交事務(wù)。

下一步就是slave將master的binary log拷貝到它自己的中繼日志。首先,slave開(kāi)始一個(gè)工作線(xiàn)程——I/O線(xiàn)程。I/O線(xiàn)程在master上打開(kāi)一個(gè)普通的連接,然后開(kāi)始binlog dump process。Binlog dump process從master的二進(jìn)制日志中讀取事件,如果已經(jīng)跟上master,它會(huì)睡眠并等待master產(chǎn)生新的事件。I/O線(xiàn)程將這些事件寫(xiě)入中繼日志。

SQL slave thread處理該過(guò)程的最后一步。SQL線(xiàn)程從中繼日志讀取事件,更新slave的數(shù)據(jù),使其與master中的數(shù)據(jù)一致。只要該線(xiàn)程與I/O線(xiàn)程保持一致,中繼日志通常會(huì)位于OS的緩存中,所以中繼日志的開(kāi)銷(xiāo)很小。

此外,在master中也有一個(gè)工作線(xiàn)程:和其它MySQL的連接一樣,slave在master中打開(kāi)一個(gè)連接也會(huì)使得master開(kāi)始一個(gè)線(xiàn)程。

MySQL5.6以前的版本復(fù)制過(guò)程有一個(gè)很重要的限制——復(fù)制在slave上是串行化的,也就是說(shuō)master上的并行更新操作不能在slave上并行操作。 MySQL5.6版本參數(shù)slave-parallel-workers=1 表示啟用多線(xiàn)程功能。

MySQL5.6開(kāi)始,增加了一個(gè)新特性,是加入了全局事務(wù) ID (GTID) 來(lái)強(qiáng)化數(shù)據(jù)庫(kù)的主備一致性,故障恢復(fù),以及容錯(cuò)能力。

官方文檔:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html

MySQL雙主(主主)架構(gòu)方案思路是:

1.兩臺(tái)mysql都可讀寫(xiě),互為主備,默認(rèn)只使用一臺(tái)(masterA)負(fù)責(zé)數(shù)據(jù)的寫(xiě)入,另一臺(tái)(masterB)備用;2.masterA是masterB的主庫(kù),masterB又是masterA的主庫(kù),它們互為主從;3.兩臺(tái)主庫(kù)之間做高可用,可以采用keepalived等方案(使用VIP對(duì)外提供服務(wù));4.所有提供服務(wù)的從服務(wù)器與masterB進(jìn)行主從同步(雙主多從);5.建議采用高可用策略的時(shí)候,masterA或masterB均不因宕機(jī)恢復(fù)后而搶占VIP(非搶占模式);這樣做可以在一定程度上保證主庫(kù)的高可用,在一臺(tái)主庫(kù)down掉之后,可以在極短的時(shí)間內(nèi)切換到另一臺(tái)主庫(kù)上(盡可能減少主庫(kù)宕機(jī)對(duì)業(yè)務(wù)造成的影響),減少了主從同步給線(xiàn)上主庫(kù)帶來(lái)的壓力;

但是也有幾個(gè)不足的地方:

1.masterB可能會(huì)一直處于空閑狀態(tài)(可以用它當(dāng)從庫(kù),負(fù)責(zé)部分查詢(xún));2.主庫(kù)后面提供服務(wù)的從庫(kù)要等masterB先同步完了數(shù)據(jù)后才能去masterB上去同步數(shù)據(jù),這樣可能會(huì)造成一定程度的同步延時(shí);架構(gòu)的簡(jiǎn)易圖如下:

MySQL雙主(主主)架構(gòu)配置方案

主主環(huán)境(這里只介紹2臺(tái)主的配置方案):

1.CentOS 6.8 64位 2臺(tái):masterA(192.168.10.11),masterB(192.168.10.12)

2.官方Mysql5.6版本

搭建過(guò)程:1.安裝MySQL服務(wù)(建議源碼安裝)

1.1 yum安裝依賴(lài)包

yum -y install make gcc gcc-c++ ncurses-devel bison openssl-devel

1.2 添加MySQL所需要的用戶(hù)和組

groupadd -g 27 mysqladduser -u 27 -g mysql -s /sbin/nologin mysql

1.3 下載MySQL源碼包

mkdir -p /data/packages/srccd /data/packages/wget http://distfiles.macports.org/cmake/cmake-3.2.3.tar.gzwget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz

1.4 創(chuàng)建mysql數(shù)據(jù)目錄

mkdir -p /usr/local/mysql/data

1.5 解壓編譯安裝cmake、MySQL

cd /data/packages/srctar -zxvf ../cmake-3.2.3.tar.gzcd cmake-3.2.3/./bootstrapgmakemake installcd ../tar xf mysql-5.6.34.tar.gzcd mysql-5.6.34cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DWITH_SSL=bundled -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_DATADIR=/usr/local/mysql/datamake && make install

1.6 添加開(kāi)機(jī)啟動(dòng)腳本

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

1.7 添加masterA配置文件/etc/my.cnf

[client]port = 3306socket = /tmp/mysql.sock[mysqld]basedir = /usr/local/mysqlport = 3306socket = /tmp/mysql.sockdatadir = /usr/local/mysql/datapid-file = /usr/local/mysql/data/mysql.pidlog-error = /usr/local/mysql/data/mysql.errserver-id = 1auto_increment_offset = 1auto_increment_increment = 2 #奇數(shù)IDlog-bin = mysql-bin #打開(kāi)二進(jìn)制功能,MASTER主服務(wù)器必須打開(kāi)此項(xiàng)binlog-format=ROWbinlog-row-p_w_picpath=minimallog-slave-updates=truegtid-mode=onenforce-gtid-consistency=truemaster-info-repository=TABLErelay-log-info-repository=TABLEsync-master-info=1slave-parallel-workers=0sync_binlog=0binlog-checksum=CRC32master-verify-checksum=1slave-sql-verify-checksum=1binlog-rows-query-log_events=1#expire_logs_days=5max_binlog_size=1024M #binlog單文件最大值replicate-ignore-db = mysql #忽略不同步主從的數(shù)據(jù)庫(kù)replicate-ignore-db = information_schemareplicate-ignore-db = performance_schemareplicate-ignore-db = testreplicate-ignore-db = zabbixmax_connections = 3000max_connect_errors = 30skip-character-set-client-handshake #忽略應(yīng)用程序想要設(shè)置的其他字符集init-connect=’SET NAMES utf8’ #連接時(shí)執(zhí)行的SQLcharacter-set-server=utf8#服務(wù)端默認(rèn)字符集wait_timeout=1800 #請(qǐng)求的最大連接時(shí)間interactive_timeout=1800#和上一參數(shù)同時(shí)修改才會(huì)生效sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #sql模式max_allowed_packet = 10Mbulk_insert_buffer_size = 8Mquery_cache_type = 1query_cache_size = 128Mquery_cache_limit = 4Mkey_buffer_size = 256Mread_buffer_size = 16Kskip-name-resolveslow_query_log=1long_query_time = 6slow_query_log_file=slow-query.loginnodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 16M[mysql]no-auto-rehash[myisamchk]key_buffer_size = 20Msort_buffer_size = 20Mread_buffer = 2Mwrite_buffer = 2M[mysqlhotcopy]interactive-timeout[mysqldump]quickmax_allowed_packet = 16M[mysqld_safe]

1.8 特別參數(shù)說(shuō)明

log-slave-updates = true #將復(fù)制事件寫(xiě)入binlog,一臺(tái)服務(wù)器既做主庫(kù)又做從庫(kù)此選項(xiàng)必須要開(kāi)啟#masterA自增長(zhǎng)IDauto_increment_offset = 1auto_increment_increment = 2 #奇數(shù)ID#masterB自增加IDauto_increment_offset = 2auto_increment_increment = 2 #偶數(shù)ID

1.9 添加masterB配置文件/etc/my.cnf

[client]port = 3306socket = /tmp/mysql.sock[mysqld]basedir = /usr/local/mysqlport = 3306socket = /tmp/mysql.sockdatadir = /usr/local/mysql/datapid-file = /usr/local/mysql/data/mysql.pidlog-error = /usr/local/mysql/data/mysql.errserver-id = 2auto_increment_offset = 2auto_increment_increment = 2 #偶數(shù)IDlog-bin = mysql-bin #打開(kāi)二進(jìn)制功能,MASTER主服務(wù)器必須打開(kāi)此項(xiàng)binlog-format=ROWbinlog-row-p_w_picpath=minimallog-slave-updates=truegtid-mode=onenforce-gtid-consistency=truemaster-info-repository=TABLErelay-log-info-repository=TABLEsync-master-info=1slave-parallel-workers=0sync_binlog=0binlog-checksum=CRC32master-verify-checksum=1slave-sql-verify-checksum=1binlog-rows-query-log_events=1#expire_logs_days=5max_binlog_size=1024M #binlog單文件最大值replicate-ignore-db = mysql #忽略不同步主從的數(shù)據(jù)庫(kù)replicate-ignore-db = information_schemareplicate-ignore-db = performance_schemareplicate-ignore-db = testreplicate-ignore-db = zabbixmax_connections = 3000max_connect_errors = 30skip-character-set-client-handshake #忽略應(yīng)用程序想要設(shè)置的其他字符集init-connect=’SET NAMES utf8’ #連接時(shí)執(zhí)行的SQLcharacter-set-server=utf8#服務(wù)端默認(rèn)字符集wait_timeout=1800 #請(qǐng)求的最大連接時(shí)間interactive_timeout=1800#和上一參數(shù)同時(shí)修改才會(huì)生效sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #sql模式max_allowed_packet = 10Mbulk_insert_buffer_size = 8Mquery_cache_type = 1query_cache_size = 128Mquery_cache_limit = 4Mkey_buffer_size = 256Mread_buffer_size = 16Kskip-name-resolveslow_query_log=1long_query_time = 6slow_query_log_file=slow-query.loginnodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 16M[mysql]no-auto-rehash[myisamchk]key_buffer_size = 20Msort_buffer_size = 20Mread_buffer = 2Mwrite_buffer = 2M[mysqlhotcopy]interactive-timeout[mysqldump]quickmax_allowed_packet = 16M[mysqld_safe]

1.10 初始化MySQL

cd /usr/local/mysqlscripts/mysql_install_db --user=mysql

1.11 為啟動(dòng)腳本賦予可執(zhí)行權(quán)限并啟動(dòng)MySQL

chmod +x /etc/rc.d/init.d/mysqld/etc/init.d/mysqld start2. 配置主從同步

2.1 添加主從同步賬戶(hù)masterA上:

mysql> grant replication slave on *.* to ’repl’@’192.168.10.12’ identified by ’123456’;mysql> flush privileges;

masterB上:

mysql> grant replication slave on *.* to ’repl’@’192.168.10.11’ identified by ’123456’;mysql> flush privileges;

2.2 查看主庫(kù)的狀態(tài)masterA上:

mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000003 | 120 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

masterB上

mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000003 | 437 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

2.3 配置同步信息:

masterA上:

mysql> change master to master_host=’192.168.10.12’,master_port=3306,master_user=’repl’,master_password=’123456’,master_log_file=’mysql-bin.000003’,master_log_pos=437;mysql> start slave;mysql> show slave statusG;

顯示有如下?tīng)顟B(tài)則正常:

Slave_IO_Running: YesSlave_SQL_Running: Yes

masterB上:

#本人是測(cè)試環(huán)境,可以保證沒(méi)數(shù)據(jù)寫(xiě)入,否則需要的步驟是:先masterA鎖表-->masterA備份數(shù)據(jù)-->masterA解鎖表 -->masterB導(dǎo)入數(shù)據(jù)-->masterB設(shè)置主從-->查看主從mysql> change master to master_host=’192.168.10.11’,master_port=3306,master_user=’repl’,master_password=’123456’,master_log_file=’mysql-bin.000003’,master_log_pos=120;start slave;mysql> show slave statusG;

顯示有如下?tīng)顟B(tài)則正常:

Slave_IO_Running: YesSlave_SQL_Running: Yes3.測(cè)試主從同步

3.1 在masterA上創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)測(cè)試同步效果

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test|+--------------------+4 rows in set (0.00 sec)mysql> create database test01;Query OK, 1 row affected (0.00 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test|| test01 |+--------------------+5 rows in set (0.00 sec)mysql> quitBye[root@masterA data]#

3.2 到masterB查看是否已經(jīng)同步創(chuàng)建數(shù)據(jù)庫(kù)

mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test|| test01 |+--------------------+5 rows in set (0.00 sec)mysql> quitBye[root@masterB data]#4. 開(kāi)啟MySQL5.6的GTID功能

masterA和masterB分別執(zhí)行如下命令:

mysql> stop slave;Query OK, 0 rows affected (0.00 sec)mysql> change master to MASTER_AUTO_POSITION=1;Query OK, 0 rows affected (0.01 sec)mysql> start slave;Query OK, 0 rows affected (0.00 sec)5. 遇到的問(wèn)題

一種主從報(bào)錯(cuò)折騰了我半天:

Last_IO_Errno: 1236

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ’Could not open log file’

后面修改主從同步相關(guān) 參數(shù),確認(rèn)原因是my.cnf增加了如下參數(shù):

log-bin = mysql-binrelay-log = mysql-bin

MySQL雙主(主主)架構(gòu)配置方案

從正常主主同步時(shí)的二進(jìn)制日志文件顯示,有2套二進(jìn)制日志。因此推斷上面2個(gè)參數(shù)導(dǎo)致不能產(chǎn)生2套二進(jìn)制文件,故導(dǎo)致二進(jìn)制文件錯(cuò)亂和丟失。

到此這篇關(guān)于MySQL雙主(主主)架構(gòu)配置方案的文章就介紹到這了,更多相關(guān)MySQL 雙主內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 国内真实愉拍系列情侣 | 男人天堂中文字幕 | 久久免费国产精品一区二区 | 欧美成人a | 久国产精品视频 | 中文字幕在线观看一区二区三区 | 亚洲三级理论 | 在线观看亚洲视频 | 日韩一区二区三区在线免费观看 | 毛片大片| 俄罗斯小屁孩cao大人免费 | 特级毛片www欧美 | 在线观看免费国产 | 久久国产成人午夜aⅴ影院 久久国产成人亚洲精品影院老金 | 国产成人一区免费观看 | 久久久久久久99精品免费观看 | 国产精品久久久久a影院 | 男人的天堂在线免费视频 | 日韩国产在线播放 | 成 人 a v黄 色 | 黄色网址国产 | 新26uuu在线亚洲欧美 | 香蕉视频在线观看黄 | 精品手机在线视频 | 手机看片av | 91福利精品老师国产自产在线 | 99久久精品国产一区二区小说 | 久久国产亚洲欧美日韩精品 | 亚洲国产99在线精品一区二区 | 亚洲 欧美 激情 另类 自拍 | 欧美不卡视频 | 成人午夜免费观看 | 久久久一区二区三区不卡 | 免费在线观看黄色毛片 | 国产精品成人观看视频网站 | 日本精品夜色视频一区二区 | 热re91久久精品国产91热 | 国产一级毛片大陆 | 一区二区三区免费视频播放器 | 天天黄色片 | 最近手机中文字幕1 |