电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL雙主(主主)架構配置方案

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

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

主從同步復制原理

在開始之前,我們先來了解主從同步復制原理。

復制分成三步:

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

下圖描述了這一過程:

MySQL雙主(主主)架構配置方案

該過程的第一部分就是master記錄二進制日志。在每個事務更新數據完成之前,master在二日志記錄這些改變。MySQL將事務串行的寫入二進制日志,即使事務中的語句都是交叉執行的。在事件寫入二進制日志完成后,master通知存儲引擎提交事務。

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

SQL slave thread處理該過程的最后一步。SQL線程從中繼日志讀取事件,更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日志通常會位于OS的緩存中,所以中繼日志的開銷很小。

此外,在master中也有一個工作線程:和其它MySQL的連接一樣,slave在master中打開一個連接也會使得master開始一個線程。

MySQL5.6以前的版本復制過程有一個很重要的限制——復制在slave上是串行化的,也就是說master上的并行更新操作不能在slave上并行操作。 MySQL5.6版本參數slave-parallel-workers=1 表示啟用多線程功能。

MySQL5.6開始,增加了一個新特性,是加入了全局事務 ID (GTID) 來強化數據庫的主備一致性,故障恢復,以及容錯能力。

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

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

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

但是也有幾個不足的地方:

1.masterB可能會一直處于空閑狀態(可以用它當從庫,負責部分查詢);2.主庫后面提供服務的從庫要等masterB先同步完了數據后才能去masterB上去同步數據,這樣可能會造成一定程度的同步延時;架構的簡易圖如下:

MySQL雙主(主主)架構配置方案

主主環境(這里只介紹2臺主的配置方案):

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

2.官方Mysql5.6版本

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

1.1 yum安裝依賴包

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

1.2 添加MySQL所需要的用戶和組

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 創建mysql數據目錄

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 添加開機啟動腳本

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 #奇數IDlog-bin = mysql-bin #打開二進制功能,MASTER主服務器必須打開此項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 #忽略不同步主從的數據庫replicate-ignore-db = information_schemareplicate-ignore-db = performance_schemareplicate-ignore-db = testreplicate-ignore-db = zabbixmax_connections = 3000max_connect_errors = 30skip-character-set-client-handshake #忽略應用程序想要設置的其他字符集init-connect=’SET NAMES utf8’ #連接時執行的SQLcharacter-set-server=utf8#服務端默認字符集wait_timeout=1800 #請求的最大連接時間interactive_timeout=1800#和上一參數同時修改才會生效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 特別參數說明

log-slave-updates = true #將復制事件寫入binlog,一臺服務器既做主庫又做從庫此選項必須要開啟#masterA自增長IDauto_increment_offset = 1auto_increment_increment = 2 #奇數ID#masterB自增加IDauto_increment_offset = 2auto_increment_increment = 2 #偶數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 #偶數IDlog-bin = mysql-bin #打開二進制功能,MASTER主服務器必須打開此項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 #忽略不同步主從的數據庫replicate-ignore-db = information_schemareplicate-ignore-db = performance_schemareplicate-ignore-db = testreplicate-ignore-db = zabbixmax_connections = 3000max_connect_errors = 30skip-character-set-client-handshake #忽略應用程序想要設置的其他字符集init-connect=’SET NAMES utf8’ #連接時執行的SQLcharacter-set-server=utf8#服務端默認字符集wait_timeout=1800 #請求的最大連接時間interactive_timeout=1800#和上一參數同時修改才會生效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 為啟動腳本賦予可執行權限并啟動MySQL

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

2.1 添加主從同步賬戶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 查看主庫的狀態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;

顯示有如下狀態則正常:

Slave_IO_Running: YesSlave_SQL_Running: Yes

masterB上:

#本人是測試環境,可以保證沒數據寫入,否則需要的步驟是:先masterA鎖表-->masterA備份數據-->masterA解鎖表 -->masterB導入數據-->masterB設置主從-->查看主從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;

顯示有如下狀態則正常:

Slave_IO_Running: YesSlave_SQL_Running: Yes3.測試主從同步

3.1 在masterA上創建一個數據庫測試同步效果

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查看是否已經同步創建數據庫

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

masterA和masterB分別執行如下命令:

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. 遇到的問題

一種主從報錯折騰了我半天:

Last_IO_Errno: 1236

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

后面修改主從同步相關 參數,確認原因是my.cnf增加了如下參數:

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

MySQL雙主(主主)架構配置方案

從正常主主同步時的二進制日志文件顯示,有2套二進制日志。因此推斷上面2個參數導致不能產生2套二進制文件,故導致二進制文件錯亂和丟失。

到此這篇關于MySQL雙主(主主)架構配置方案的文章就介紹到這了,更多相關MySQL 雙主內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 博医通医疗器械互联网供应链服务平台_博医通 | 氨水-液氨-工业氨水-氨水生产厂家-辽宁顺程化工 | 整合营销推广|营销网络推广公司|石家庄网站优化推广公司|智营销 好物生环保网、环保论坛 - 环保人的学习交流平台 | 宁夏活性炭_防护活性炭_催化剂载体炭-宁夏恒辉活性炭有限公司 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 鑫达滑石-辽宁鑫达滑石集团 | 超声波焊接机_超音波熔接机_超声波塑焊机十大品牌_塑料超声波焊接设备厂家 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 深圳市东信高科自动化设备有限公司 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 菲希尔FISCHER测厚仪-铁素体检测仪-上海吉馨实业发展有限公司 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 上海瑶恒实业有限公司|消防泵泵|离心泵|官网 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 软文发布平台 - 云软媒网络软文直编发布营销推广平台 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 冷油器,取样冷却器,热力除氧器-连云港振辉机械设备有限公司 | 消防设施操作员考试报名时间,报名入口,报考条件 | 安徽华耐泵阀有限公司-官方网站 安德建奇火花机-阿奇夏米尔慢走丝|高维|发那科-北京杰森柏汇 | 天津中都白癜风医院_天津白癜风医院_天津治疗白癜风 | 双段式高压鼓风机-雕刻机用真空泵-绍兴天晨机械有限公司 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | _网名词典_网名大全_qq网名_情侣网名_个性网名 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 农产品溯源系统_农产品质量安全追溯系统_溯源系统 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 天长市晶耀仪表有限公司| 海鲜池-专注海鲜鱼缸、移动海鲜缸、饭店鱼缸设计定做-日晟水族厂家 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 游泳池设备安装工程_恒温泳池设备_儿童游泳池设备厂家_游泳池水处理设备-东莞市君达泳池设备有限公司 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 |