Windows下搭建MySQL Master Slave
一、背景
伺服器上放了很多MySQL資料庫,為了安全,現在需要做Master/Slave方案,因為作業系統是Window的,所以沒有辦法使用keepalived這個HA工具,但是我們可以接受人工進行切換,有什麼好的方案呢?
二、幾種Master/Slave邏輯架構圖
(Figure1:單Master-單Slave)
(Figure2:單Master-多Slave)
(Figure3:單Master-級聯Slave)
(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;
(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;
(Figure2:Slave狀態1)
(Figure3:Slave狀態2)
6. 檢視Slave伺服器的MySQL日誌;
(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
Windows下為MySQL做定時備份
管理 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-