mysql5.6主從復制(讀寫分離)方案_MySQL5.6主從復制(讀寫分離)方案

MySQL5.6主從復制(讀寫分離)方案

一、前言:為什么MySQL要做主從復制(讀寫分離)?

通俗來講,如果對數據庫的讀和寫都在同一個數據庫服務器中操作,業務系統性能會降低。

為了提升業務系統性能,優化用戶體驗,可以通過做主從復制(讀寫分離)來減輕主數據庫的負載。

而且如果主數據庫宕機,可快速將業務系統切換到從數據庫上,可避免數據丟失。

二、MySQL主從復制(讀寫分離)和集群的區別:

我對MySQL也是剛開始研究,不是很專業。我的理解是:

1、主從復制(讀寫分離):一般需要兩臺及以上數據庫服務器即可(一臺用于寫入數據,一臺用于同步主的數據并用于數據查詢操作)。

局限性:

(1)配置好主從復制之后,同一張表,只能對一個服務器寫操作。如果在從上執行了寫操作,而之后主也操作了這張表,或導致主從不同步;據說可以配置成主主方式,但我還沒有研究到。

(2)主數據庫服務器宕機,需要手動將業務系統切換到從數據庫服務器。無法做到高可用性(除非再通過部署keepalive做成高可用方案)。

2、集群是由N臺數據庫服務器組成,數據的寫入和查詢是隨機到任意一臺數據庫服務器的,其他數據庫服務器會自動同步數據庫的操作。

任何一臺數據庫宕機,不會對整個集群造成大的影響。

局限性:我經過測試才知道目前mysql集群版本(MySQL Cluster)只能對NDB存儲引擎的數據進行集群同步,如果是INNODB或其他的MySQL存儲引擎是不行的。這個也導致了我放棄了在業務系統中應用這種方案。

三、回歸正題,接下來開始MySQL5.6.12的主從復制教程:

1、MySQL5.6開始主從復制有兩種方式:基于日志(binlog);基于GTID(全局事務標示符)。

需要注意的是:GTID方式不支持臨時表!所以如果你的業務系統要用到臨時表的話就不要考慮這種方式了,至少目前最新版本MySQL5.6.12的GTID復制還是不支持臨時表的。

所以此篇教程主要是告訴大家如何通過日志(binlog)方式做主從復制!

2、MySQL官方提供的MySQL Replication教程:

http://dev.mysql.com/doc/refman/5.6/en/replication.html

這個官方教程強烈建議大家閱讀(需要一定的英語閱讀能力哦!不行就google翻譯后再閱讀吧~)。

3、準備工作:

(1)配置MySQL主從復制(讀寫分離)之前,需要在主從兩臺服務器先安裝好MySQL5.6。

(2)目前最新的MySQL5.6 GA版本是MySQL5.6.12(點此下載MySQL5.6.12源碼包)。

個人推薦Linux(RedHat/CentOS 6.4)源碼編譯安裝,具體可以看本站這篇教程:RedHat/CentOS源碼編譯安裝MySQL5.6.12

(3)注意:

(a)如果你需要用于生產環境,安教程安裝MySQL時不要急著做mysql啟動操作。建議把mysql初始化生成的/usr/local/mysql/mysql.cnf刪除,然后把你優化好的mysql配置文件my.cnf放到/etc下。

(b)建議主備兩臺服務器在同一局域網,主備兩臺數據庫網絡需要互通。

(4)我的環境:

主數據庫IP:192.168.100.2

從數據庫IP:192.168.100.3

4、修改主數據庫的的配置文件:

1?????[mysqld]

2?????server-id=1

3?????log-bin=mysqlmaster-bin.log

4?????sync_binlog=1

5?????#注意:下面這個參數需要修改為服務器內存的70%左右

6?????innodb_buffer_pool_size?=?512M

7?????innodb_flush_log_at_trx_commit=1

8?????sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO

9?????lower_case_table_names=1

10?????log_bin_trust_function_creators=1

修改之后要重啟mysql:

#?/etc/init.d/mysql?restart

附一個我已優化過的主數據庫配置文件:點此下載

5、修改從數據庫的的配置文件(server-id配置為大于1的數字即可):

1?????[mysqld]

2?????server-id=2

3?????log-bin=mysqlslave-bin.log

4?????sync_binlog=1

5?????#注意:下面這個參數需要修改為服務器內存的70%左右

6?????innodb_buffer_pool_size?=?512M

7?????innodb_flush_log_at_trx_commit=1

8?????sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO

9?????lower_case_table_names=1

10?????log_bin_trust_function_creators=1

修改之后要重啟mysql:

#?/etc/init.d/mysql?restart

附一個我已優化過的從數據庫配置文件:點此下載

6、SSH登錄到主數據庫:

(1)在主數據庫上創建用于主從復制的賬戶(192.168.100.3換成你的從數據庫IP):

1?????#?mysql?-uroot?-p

2?????mysql>?GRANT?REPLICATION?SLAVE?ON?*.*?TO?'repl'@'192.168.100.3'?IDENTIFIED?BY?'repl';

(2)主數據庫鎖表(禁止再插入數據以獲取主數據庫的的二進制日志坐標):

mysql>?FLUSH?TABLES?WITH?READ?LOCK;

(3)然后克隆一個SSH會話窗口,在這個窗口打開MySQL命令行:

1?????#?mysql?-uroot?-p

2?????mysql>?SHOW?MASTER?STATUS;

3?????+------------------------+----------+--------------+------------------+-------------------+

4?????|?File???????????????????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|?Executed_Gtid_Set?|

5?????+------------------------+----------+--------------+------------------+-------------------+

6?????|?mysqlmaster-bin.000001?|??????332?|??????????????|??????????????????|???????????????????|

7?????+------------------------+----------+--------------+------------------+-------------------+

8?????1?row?in?set?(0.00?sec)

9?????mysql>?exit;

在這個例子中,二進制日志文件是mysqlmaster-bin.000001,位置是332,記錄下這兩個值,稍后要用到。

(4)在主數據庫上使用mysqldump命令創建一個數據快照:

#mysqldump?-uroot?-p?-h127.0.0.1?-P3306?--all-databases??--triggers?--routines?--events?>all.sql

#?接下來會提示你輸入mysql數據庫的root密碼,輸入完成后,如果當前數據庫不大,很快就能導出完成。

(5)解鎖第(2)步主數據的鎖表操作:

mysql>?UNLOCK?TABLES;

7、SSH登錄到從數據庫:

(1)通過FTP、SFTP或其他方式,將上一步備份的主數據庫快照all.sql上傳到從數據庫某個路徑,例如我放在了/home/yimiju/目錄下;

(2)從導入主的快照:

#?cd?/home/yimiju

#?mysql?-uroot?-p?-h127.0.0.1?-P3306?

#?接下來會提示你輸入mysql數據庫的root密碼,輸入完成后,如果當前數據庫不大,很快就能導入完成。

(3)給從數據庫設置復制的主數據庫信息(注意修改MASTER_LOG_FILE和MASTER_LOG_POS的值):

#?mysql?-uroot?-p

mysql>?CHANGE?MASTER?TO?MASTER_HOST='192.168.100.2',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysqlmaster-bin.000001',MASTER_LOG_POS=332;

#?然后啟動從數據庫的復制線程:

mysql>?START?slave;

#?接著查詢數據庫的slave狀態:

mysql>??SHOW?slave?STATUS?\G

#?如果下面兩個參數都是Yes,則說明主從配置成功!

Slave_IO_Running:?Yes

Slave_SQL_Running:?Yes

(4)接下來你可以在主數據庫上創建數據庫、表、插入數據,然后看從數據庫是否同步了這些操作

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372853.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372853.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372853.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在實踐中使用延遲隊列

通常,在某些情況下,當您有某種工作或作業隊列時,有必要不立即處理每個工作項或作業,而是要延遲一些時間。 例如,如果用戶單擊一個按鈕來觸發要完成的某項工作,而一秒鐘后,用戶意識到他/她錯了&a…

PCL學習八叉樹

建立空間索引在點云數據處理中有著廣泛的應用,常見的空間索引一般 是自頂而下逐級劃分空間的各種空間索引結構,比較有代表性的包括BSP樹,KD樹,KDB樹,R樹,四叉樹,八叉樹等索引結構,而…

Android實現自定義帶文字和圖片的Button

在Android開發中經常會需要用到帶文字和圖片的button,下面來講解一下常用的實現辦法。 一.用系統自帶的Button實現 最簡單的一種辦法就是利用系統自帶的Button來實現,這種方式代碼量最小。在Button的屬性中有一個是drawableLeft,這個 屬性可以…

mysql語句中的注釋方法_MySQL語句注釋方式簡介

MySQL支持三種注釋方式:1.從‘#字符從行尾。2.從‘-- 序列到行尾。請注意‘-- (雙破折號)注釋風格要求第2個破折號后面至少跟一個空格符(例如空格、tab、換行符等等)。3.從/*序列到后面的*/序列。結束序列不一定在同一行中,因此該語法允許注釋跨越多行。…

aqlserver實用程序_sqlserver命令提示實用工具的介紹

除上述的圖形化管理工具外,SQL Server2008還提供了大量的命令行實用工具,包括bcp、dtexec、dtutil、osql、reconfig、sqlcmd、sqlwb和tablediff等,下面進行簡要說明。dtexec實用工具用于配置和執行SQL Server2008 Intgration Services包。用戶…

使用Java和Scala將Play Framework 2應用程序部署到Openshift

幾個星期, 馬克阿特伍德 ( Mark Atwood) , 豪爾赫阿里斯 ( Jorge Aliss )和我塞巴斯蒂安 斯卡塔諾 ( SebastinScarano)參加了紅帽網絡研討會LETS PLAY! 在云端&#xff1…

LintCode 387: Smallest Difference

LintCode 387: Smallest Difference 題目描述 給定兩個整數數組(第一個是數組A,第二個是數組B),在數組A中取A[i],數組B中取B[j],A[i]和B[j]兩者的差越小越好(|A[i] - B[j]|)。返回最小差。 樣例 給定數組A …

android框架----下沉文字Titanic的使用

Titanic is a simple illusion obtained by applying an animated translation on the TextView TextPaint Shaders matrix. Titanic的使用 Titanic的使用,項目結構如下: 一、下載Titanic并且部署到項目中 Titanic的項目地址: https://github…

linux 自動安裝mysql_Linux安裝mysql

一、下載這里我創建了一目錄software用于存放我們待會要下載的mysql包,先去到該目錄命令:cd /software命令:wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-linux-glibc2.5-x86_64.tar下載完成后,你會在software這個…

Quartz Scheduler插件–隱藏的寶藏

盡管在官方文檔中進行了簡要描述,但我相信Quartz插件了解得還不夠多,看看它們有多有用。 本質上,Quartz中的插件是方便的類,用于包裝基礎偵聽器的注冊。 您可以自由編寫自己的插件,但我們將專注于Quartz隨附的現有插件…

mysql查詢表名匹配只有字母的_MySQL按某些匹配字母查詢表

MySQL查詢是MySQL的核心功能,有時候我們需要查找帶有某些匹配字母的表。下文對該MySQL查詢方式作了詳細的介紹,供您參考。在MySQL中我們可以使用LIKE或者NOT LIKE操作符進行比較。在MySQL中模式默認是不區分大小寫的。查詢示例,student表----…

hdu 1181(Floyed)

變形課 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 20748 Accepted Submission(s): 7494 Problem Description呃......變形課上Harry碰到了一點小麻煩,因為他并不像Hermione那樣能夠記住所有的咒語而隨意的…

讀書筆記-你不知道的JS上-混入與原型

繼承 mixin混合繼承 function mixin(obj1, obj2) {for (var key in obj2) {//重復不復制if (!(key in obj1)) {obj1[key] obj2[key];}}return obj1;} 這種復制是淺復制,對象或者數組函數等都是同一個引用,改變obj1的會同時影響obj2。 寄生繼承 ... 隱式…

JUnit和Hamcrest:在assertEquals上進行改進

在我的博客文章中,Java越來越接受靜態導入嗎? ,我討論了在Java中越來越多地使用靜態導入來使代碼在某些情況下更流暢。 Java 單元測試特別受靜態導入的影響,在此博客文章中,我提供了一個簡單的示例,說明如何…

mysql delete temporary denied_這些錯誤是什么意思?djang中的mysql

我試著運行一個程序,我被給予了一個例子,它就像一個購物網站,使用MySQL數據庫而不是Django提供的原始數據庫!我只是想看看有沒有人理解這些錯誤的含義?任何信息都將不勝感激!我本可以提供網頁的代碼&#x…

C語言 · 芯片測試

基礎練習 芯片測試 時間限制:1.0s 內存限制:512.0MB問題描述有n(2≤n≤20)塊芯片,有好有壞,已知好芯片比壞芯片多。每個芯片都能用來測試其他芯片。用好芯片測試其他芯片時,能正確給出被測試…

Animation用法

測試代碼及說明&#xff1a; <!DOCTYPE html> <html lang"en-US"> <head><meta charset"UTF-8"><title>Simple CSS3 Animation</title><style type"text/css">#demo {position: absolute;left: 30%;t…

mysql dese_MySQL 5.6-類似于DENSE_RANK的功能,無需訂購

小編典典對于 MySQL版本<8.0(OP的版本是5.6)&#xff1a;問題陳述看起來需要DENSE_RANK功能groupVarian; 但是事實并非如此。正如 GordonLinoff解釋的那樣 &#xff1a;您似乎希望按它們在數據中出現的順序來枚舉它們。假設您的表名是t(請為您的代碼相應地更改表名和字段名)…

Spring和JSF集成:動態導航

通常&#xff0c;您的JSF應用程序將需要超越基本的靜態導航并開始做出動態導航決策。 例如&#xff0c;您可能想根據用戶的年齡重定向他們。 大多數JSF教程建議通過將命令的action屬性綁定到支持bean來實現動態導航&#xff1a; <h:commandButton action"#{bean.action…

通過富文本改變UITextFieldPlaceholder顏色

1、通過屬性 a、 //文字屬性(一般) NSMutableDictionary *attrs [NSMutableDictionary dictionary]; attrs[NSForegroundColorAttributeName] [UIColor blueColor]; NSAttributedString *placeholderStr [[NSAttributedString alloc] initWithString:"手機號" a…