1. 程式人生 > >Windows下搭建MySQL Master Slave

Windows下搭建MySQL Master Slave

一、背景

伺服器上放了很多MySQL資料庫,為了安全,現在需要做Master/Slave方案,因為作業系統是Window的,所以沒有辦法使用keepalived這個HA工具,但是我們可以接受人工進行切換,有什麼好的方案呢?

二、幾種Master/Slave邏輯架構圖

clip_image001

(Figure1:單Master-單Slave)

clip_image002

(Figure2:單Master-多Slave)

clip_image004

(Figure3:單Master-級聯Slave)

clip_image006

(Figure4:Master/Slave部署邏輯圖)

三、搭建過程

環境:Windows Server 2008 R2 + mysql-5.5.22-winx64

主伺服器(Master):192.168.1.66

從伺服器(Slave):192.168.1.67

使用Master/Slave架構,Slave為只讀模式;

(一) 配置主伺服器(Master)

1. 編輯資料庫配置檔案my.ini,在[mysqld]標籤下面加入下面程式碼:

log-bin=mysql-bin

server-id=1

innodb_flush_log_at_trx_commit=1

sync_binlog=1

binlog_do_db=barfoo_weibo_hottop

binlog_ignore_db=mysql

說明:

1) log-bin=mysql-bin啟用Binary Log,會在資料資料夾中生成一系列的滾動檔案,類似:mysql-bin.000002

2) server-id=1中的1可以任定義,只要是唯一的就行,為了與其它Master和Slave進行區別;

3) innodb_flush_log_at_trx_commit = 0,每秒寫一次trax log,並執行fsync;

innodb_flush_log_at_trx_commit = 1,每次trax 提交的時候寫一次trax log, 並執行fsync;

innodb_flush_log_at_trx_commit = 2,每次trax 提交的時候寫一次trax log, 不會執行fsync;

4) sync_binlog=1表示非同步進行日誌記錄;

5) binlog_do_db=barfoo_weibo_hottop是表示只對資料barfoo_weibo_hottop做日誌記錄,如果想記錄多個數據庫,新增多幾條binlog_do_db就可以了;

6) binlog_ignore_db=mysql表示忽略備份mysql;不加binlog_do_db和binlog_ignore_db,那就表示備份全部資料庫。

2. 重啟MySQL服務

3. 在Master伺服器新建一個使用者賦予“REPLICATION SLAVE”的許可權,你不需要再賦予其它的許可權,這裡指定的IP為Slave的IP;

mysql>CREATE USER [email protected]'192.168.1.67' IDENTIFIED BY 'BarFoo2013';

mysql>GRANT REPLICATION SLAVE ON *.* TO [email protected]'192.168.1.67' IDENTIFIED BY 'abc2013';

4. 在Master伺服器執行下面的指令碼,讓資料庫只能讀;

mysql>FLUSH TABLES WITH READ LOCK;

5. 拷貝資料庫資料夾和ibdata1檔案到本地臨時資料夾中,馬上執行下面的步驟;

6. 檢視Master伺服器的狀態,記下File及Position的值,後面設定Slave伺服器的時候需要用到;

mysql>SHOW MASTER logs;

mysql>SHOW MASTER STATUS;

clip_image008

(Figure1:Master狀態)

7. 對錶進行解鎖,恢復資料庫讀寫;

mysql>UNLOCK TABLES;

8. 使用FTP等工具把第5步驟的臨時檔案傳到Slave伺服器;

(二) 配置從伺服器(Slave)

1. 編輯資料庫配置檔案my.ini,在[mysqld]的下面加入下面程式碼,可以自己定義數值,只要保證唯一的就行,與Master的能區分開就行;

server-id=2

read-only=1

2. 重啟MySQL

3. 登入MySQL伺服器,執行下面的指令碼命令:

mysql>CHANGE MASTER TO

MASTER_HOST='192.168.1.66',

MASTER_USER='viajar',

MASTER_PASSWORD='abc2013',

MASTER_PORT=3309,

MASTER_LOG_FILE='mysql-bin.000005',

MASTER_LOG_POS=7179684,

MASTER_CONNECT_RETRY=30;

說明:

1) MASTER_HOST:Master伺服器的IP;

2) MASTER_USER:配置主伺服器時建立的使用者名稱;

3) ASTER_PASSWORD:使用者名稱對應的密碼;

4) ASTER_PORT:主伺服器mysql埠,如果未曾修改,預設即可;

5) MASTER_LOG_FILE:log檔名,參考Figure1;

6) MASTER_LOG_POS:只上次備份時的log檔案的偏移量,參考Figure1;

7) MASTER_CONNECT_RETRY:重新連線Master的時間間隔,單位為秒;

4. 啟動Slave程序,執行下面的指令碼命令;

mysql>START SLAVE;

5. 檢查主從同步狀態,執行下面的指令碼命令,其中Slave_IO_Running 與 Slave_SQL_Running 的值都必須為YES,才表明狀態正常。

mysql>SHOW SLAVE STATUS;

clip_image010

(Figure2:Slave狀態1)

clip_image011

(Figure3:Slave狀態2)

6. 檢視Slave伺服器的MySQL日誌;

clip_image012

(Figure4:Slave日誌檔案)

四、補充說明

1. 檢視幫助

mysql>help

2. 檢視slave幫助

mysql>help slave

3. 查詢當前有哪些二進位制日誌檔案

mysql> show binary logs;

4. 刪除mysql-bin.000018之前的所有二進位制日誌檔案

mysql> purge binary logs to 'mysql-bin.000018';

5. 從 MySQL 5.1.12 開始,能夠用以下三種形式來告終:基於SQL語句的複製(statement-based replication, SBR),基於行的複製(row-based replication, RBR),混雜形式複製(mixed-based replication, MBR)。相應地,binlog的款式也有三種:STATEMENT,ROW,MIXED。MBR 形式中,SBR 形式是預設的。

#binlog_format="STATEMENT"
#binlog_format="ROW"
#binlog_format="MIXED"

當然了,也能夠在執行時動態修正binlog的款式。例如

mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';

6. MySQL同步故障:Slave_SQL_Running:No

mysql> slave stop;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql> slave start;

五、疑問

(一) 複製級別有以下幾種,預設級別是那種?如何顯式設定這個值?

1. Row Level:5.1.5開始支援。mater記錄每行資料的更改日誌,slave根據日誌逐行應用。優點:資料一致性更有保障。缺點:可能造成日誌檔案比較大;

2. Statement Level:master記錄每個執行的query語句以及一些上下文資訊,slave節點根據這些資訊重新在slave上執行。優點:binary log比較小。缺點:某些情況下資料一致性難以保障;

3. Mixed Level:MySQL根據情況選擇哪種複製方式。5.1.8開始支援。

(二) 常用架構有以下幾種,我想要的效果是:當MasterA宕機之後,MasterB還能讀寫,在MasterA在恢復之後重新讓MasterA成為主Master。

1. Master-Slaves:通常都採用這種方式;

2. Dual Master(Master-Master):2個master節點互相同步更新。因為MySQL的非同步複製方式,為了防止資料衝突造成的不一致性,一般僅將其中一臺用於寫操作,另一臺不用或僅用於讀操作。目的是其中一臺master停機維護或者故障中斷時可以使用另一臺master;

3. 級聯複製(Master-Slaves-Slaves):在Master Slaves中,如果slaves過多replication將增加master的負載,這時可以讓master只向其中幾臺slave分發更新日誌,這幾臺slave作為一級節點再向下級節點分發更新日誌。

(三) 如果slave報錯或者宕機一段時間,那麼應該如何重新同步宕機時間master的資料到slave呢?

(四) 在Master設定binlog_do_db=test的時候,如何可以設定記錄多個數據庫?

解答:直接在配置檔案my.ini加入多條binlog_do_db就可以了;

(五) 每天的日誌檔案就有10GB,如何清理?如何維護?有沒什麼設定或者方法可以減少日誌量呢?

六、參考文獻

相關推薦

Windows搭建MySQL Master Slave

一、背景 伺服器上放了很多MySQL資料庫,為了安全,現在需要做Master/Slave方案,因為作業系統是Window的,所以沒有辦法使用keepalived這個HA工具,但是我們可以接受人工進行切換,有什麼好的方案呢? 二、幾種Master/Slave邏輯架構圖 (Figure1:單Mast

Windows搭建mysql分散式主從資料庫

WINDOWS下Mysql搭建主從伺服器 目錄 要求 主庫配置 排錯 檢驗 半同步複製 宕機處理 [要求] 資料庫要求版本一致 mysql5.5以上版本 在my.ini 檔案中找到[mysqld] (如果沒有my.ini

Windows平臺搭建MySQL數據庫

最新 mysql\ list com 計算機相關 環境 download clas ice 1、下載安裝MySQL數據庫: (1)->我的標簽->軟件下載->計算機相關專業所用軟件---百度雲鏈接下載->mysql-installer-communi

MySQL master-slave主從復制環境搭建初試

entos lob 根據 server-id 情況 href mysql- test tab 原文:MySQL master-slave主從復制環境搭建初試 環境為centos 7.2+mysql 5.7,網上教程很多,原理也不復雜(深知自己踩的坑還不夠) 正常情

開發環境-Windows搭建JAVA Web開發環境(含Tomcat+MySQL)-過程記錄

一、新建雲伺服器 (請注意,文中連結均在“http”中“h”後和“www”第一個“w”後多加一“ ”)     1、在"teng xun 雲",新建雲伺服器:Windows Server 2012 R2 標準版 64位中文版     2、登入雲伺服器:h ttps://w

Windows server 2012搭建MySQL資料庫並建立遠端連線

開發的首要任務就是要搭建起自己的伺服器,下面主要是我這搭建記錄下 我的各種環境 伺服器為Windows server2012  安裝的MySQL資料的版本是5.6.10 ,64位。當然了版本對於安裝沒有太大的阻撓。安裝資料庫呢一般是由兩種:一種是下載安裝包自己安裝,而另外一

windows環境搭建mysql叢集

1. 前(fei)言(hua) 最近實訓老師給我們佈置了一個建立mysql叢集的任務,並扔了兩個部落格連結給我們參考,然後就沒有然後了。根據老師給的部落格上面的步驟試了一下,發現並不能成功建立,於是自己百度,找到了一個挺靠譜的部落格,於是參考了一下,感覺總體還

mysql master-slave搭建測試,附帶雙master FailOver導致資料結果不一致的一些想法

mysql主從複製: 首先修改master,slave中的配置檔案,my.ini或my.conf,都加在[mysqld]域中; master中的配置: #replication option server-id=1 log-bin=mysql-bin.log slave中的

MySQL Master-Slave架構使用MMM的必要性

 MySQL本身沒有提供replication failover的解決方案(見How can I use replication to provide redundancy or high availability?) 如何使Replication方案具有HA? 答案是MMM

windows 搭建安裝 sass

出版 版本號 ack sources 打印 strong 由於 ima install 眾所周知,sass 解析需要有 ruby 的支撐,所以, 第一步:點我下載 ruby; 第二步:安裝 ruby; 在安裝 ruby 過程中需要註意的一點:把 ruby 執行文件添加到 p

Windows搭建Android開發環境

c51 公司 智能 單獨 window 引用 ssp 管理 第一個  隨著移動互聯網的迅速發展,前端的概念已發生很大的變化,已不僅僅局限在網頁端。而Android系統作為智能機市場的老大,作為前端開發工程師,非常有必要了解和學習。但面對眾多學習資料,站在前端開發工程

Python開發入門Windows搭建python開發環境

python開發入門 Python是一種高級計算機程序設計語言。舉個例子C語言要寫1000行代碼,Java只需要寫100行,而Python可能只要20行。 Python基本概念 Python(英語發音:/?pa?θ?n/), 是一種面向對象、解釋型計算機程序設計語言,由Guido van R

轉載(windows安裝mysql)

lena 回車 code server cto bds 依次 隨機 技術 轉載請聲明出處:http://blog.csdn.net/u013067166/article/details/49951577 最近重裝了系統,去MySQL官網下載了最新的

Windows搭建Redis服務器

targe 文件夾 cnblogs 成功 tps cache ase view tar Redis服務器是當下比較流行的緩存服務器,Redis通常被人拿來和Memcached進行對比。在我看來,應當是各具優勢吧,雖然應用場景基本類似,但總會根據項目的不同來進行不通的選用。

windows安裝mysql

net 權限 錯誤1067 管理 登錄 path 但是 必須 mysql\ MySQL安裝文件分為兩種,一種是msi格式的,一種是zip格式的。如果是msi格式的可以直接點擊安裝,按照它給出的安裝提示進行安裝(相信大家的英文可以看懂英文提示),一般MySQL將會安裝在C:\

windows搭建React Native Android開發環境

ps1 doc cmd pro oot col exec 包管理工具 ocs 1.登錄 React Native 中文網http://reactnative.cn/docs/0.45/getting-started.html 2.登錄 Chocolatey 下載包管理工具h

Windows搭建Jenkins+Jmeter+Ant 自動測試環境

jmeter1.JDK \Jmeter \ Ant安裝:1.1. 安裝JDK:雙擊jdk-7u80-windows-x64.exe安裝,默認安裝到C:\ProgramFiles\Java目錄1.2. 安裝Jmeter:在我的電腦—E盤(建議與文檔保持一致,否則需要修改配置文件),新建apa

WindowsMySQL做定時備份

管理 lena 通過 default width rac 提取 -m col 第一種:新建批處理文件 backup.dat,裏面輸入以下代碼: 代碼如下 復制代碼 net stop mysqlxcopy "C:/Program Files/MyS

Windows 搭建 Appium + Android+python 自動化測試環境

細節 事情 android view package 效果 框架 比較 framework 前言 本來並不打算寫這麽一篇文章,但是實踐下來發現網上的各種教程裏大致有兩個問題。一是文章有些跟不上時代,目前android開發和測試的技術更新都比較快,內容有些過期。二是細節部分不

mysql master-slave mycat 安裝簡明教程

mysql mycat master 一、數據庫基本安裝1.down mysql-5.6.37-linux-glibc2.12-x86_64.tar.gz2.install# yum install -y perl perl-Data-Dumper libaio# mv mysql-5.6.37-