日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL5.6主从复制(读写分离)方案

發(fā)布時(shí)間:2023/12/18 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL5.6主从复制(读写分离)方案 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

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

https://yq.aliyun.com/articles/24255

?

摘要:?一、前言:為什么MySQL要做主從復(fù)制(讀寫分離)? 通俗來(lái)講,如果對(duì)數(shù)據(jù)庫(kù)的讀和寫都在同一個(gè)數(shù)據(jù)庫(kù)服務(wù)器中操作,業(yè)務(wù)系統(tǒng)性能會(huì)降低。 為了提升業(yè)務(wù)系統(tǒng)性能,優(yōu)化用戶體驗(yàn),可以通過(guò)做主從復(fù)制(讀寫分離)來(lái)減輕主數(shù)據(jù)庫(kù)的負(fù)載。

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

通俗來(lái)講,如果對(duì)數(shù)據(jù)庫(kù)的讀和寫都在同一個(gè)數(shù)據(jù)庫(kù)服務(wù)器中操作,業(yè)務(wù)系統(tǒng)性能會(huì)降低。

為了提升業(yè)務(wù)系統(tǒng)性能,優(yōu)化用戶體驗(yàn),可以通過(guò)做主從復(fù)制(讀寫分離)來(lái)減輕主數(shù)據(jù)庫(kù)的負(fù)載。

而且如果主數(shù)據(jù)庫(kù)宕機(jī),可快速將業(yè)務(wù)系統(tǒng)切換到從數(shù)據(jù)庫(kù)上,可避免數(shù)據(jù)丟失。

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

我對(duì)MySQL也是剛開始研究,不是很專業(yè)。我的理解是:

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

局限性:

(1)配置好主從復(fù)制之后,同一張表,只能對(duì)一個(gè)服務(wù)器寫操作。如果在從上執(zhí)行了寫操作,而之后主也操作了這張表,或?qū)е轮鲝牟煌?#xff1b;據(jù)說(shuō)可以配置成主主方式,但我還沒有研究到。

(2)主數(shù)據(jù)庫(kù)服務(wù)器宕機(jī),需要手動(dòng)將業(yè)務(wù)系統(tǒng)切換到從數(shù)據(jù)庫(kù)服務(wù)器。無(wú)法做到高可用性(除非再通過(guò)部署keepalive做成高可用方案)。

2、集群是由N臺(tái)數(shù)據(jù)庫(kù)服務(wù)器組成,數(shù)據(jù)的寫入和查詢是隨機(jī)到任意一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的,其他數(shù)據(jù)庫(kù)服務(wù)器會(huì)自動(dòng)同步數(shù)據(jù)庫(kù)的操作。

任何一臺(tái)數(shù)據(jù)庫(kù)宕機(jī),不會(huì)對(duì)整個(gè)集群造成大的影響。

局限性:我經(jīng)過(guò)測(cè)試才知道目前mysql集群版本(MySQL Cluster)只能對(duì)NDB存儲(chǔ)引擎的數(shù)據(jù)進(jìn)行集群同步,如果是INNODB或其他的MySQL存儲(chǔ)引擎是不行的。這個(gè)也導(dǎo)致了我放棄了在業(yè)務(wù)系統(tǒng)中應(yīng)用這種方案。

三、回歸正題,接下來(lái)開始MySQL5.6.12的主從復(fù)制教程:

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

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

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

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

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

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

3、準(zhǔn)備工作:

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

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

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

(3)注意:

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

(b)建議主備兩臺(tái)服務(wù)器在同一局域網(wǎng),主備兩臺(tái)數(shù)據(jù)庫(kù)網(wǎng)絡(luò)需要互通。

(4)我的環(huán)境:

主數(shù)據(jù)庫(kù)IP:192.168.100.2

從數(shù)據(jù)庫(kù)IP:192.168.100.3

4、修改主數(shù)據(jù)庫(kù)的的配置文件:

1?????[mysqld]? 2?????server-id=1? 3?????log-bin=mysqlmaster-bin.log? 4?????sync_binlog=1? 5?????#注意:下面這個(gè)參數(shù)需要修改為服務(wù)器內(nèi)存的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

附一個(gè)我已優(yōu)化過(guò)的主數(shù)據(jù)庫(kù)配置文件:點(diǎn)此下載

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

1?????[mysqld]? 2?????server-id=2? 3?????log-bin=mysqlslave-bin.log? 4?????sync_binlog=1? 5?????#注意:下面這個(gè)參數(shù)需要修改為服務(wù)器內(nèi)存的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

附一個(gè)我已優(yōu)化過(guò)的從數(shù)據(jù)庫(kù)配置文件:點(diǎn)此下載

6、SSH登錄到主數(shù)據(jù)庫(kù):

(1)在主數(shù)據(jù)庫(kù)上創(chuàng)建用于主從復(fù)制的賬戶(192.168.100.3換成你的從數(shù)據(jù)庫(kù)IP):

1?????#?mysql?-uroot?-p? 2?????mysql>?GRANT?REPLICATION?SLAVE?ON?*.*?TO?'repl'@'192.168.100.3'?IDENTIFIED?BY?'repl';

(2)主數(shù)據(jù)庫(kù)鎖表(禁止再插入數(shù)據(jù)以獲取主數(shù)據(jù)庫(kù)的的二進(jìn)制日志坐標(biāo)):

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

(3)然后克隆一個(gè)SSH會(huì)話窗口,在這個(gè)窗口打開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;

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

(4)在主數(shù)據(jù)庫(kù)上使用mysqldump命令創(chuàng)建一個(gè)數(shù)據(jù)快照:

#mysqldump?-uroot?-p?-h127.0.0.1?-P3306?--all-databases??--triggers?--routines?--events?>all.sql? #?接下來(lái)會(huì)提示你輸入mysql數(shù)據(jù)庫(kù)的root密碼,輸入完成后,如果當(dāng)前數(shù)據(jù)庫(kù)不大,很快就能導(dǎo)出完成。

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

mysql>?UNLOCK?TABLES;

7、SSH登錄到從數(shù)據(jù)庫(kù):

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

(2)從導(dǎo)入主的快照:

#?cd?/home/yimiju? #?mysql?-uroot?-p?-h127.0.0.1?-P3306?<?all.sql? #?接下來(lái)會(huì)提示你輸入mysql數(shù)據(jù)庫(kù)的root密碼,輸入完成后,如果當(dāng)前數(shù)據(jù)庫(kù)不大,很快就能導(dǎo)入完成。

(3)給從數(shù)據(jù)庫(kù)設(shè)置復(fù)制的主數(shù)據(jù)庫(kù)信息(注意修改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;? #?然后啟動(dòng)從數(shù)據(jù)庫(kù)的復(fù)制線程:? mysql>?START?slave;? #?接著查詢數(shù)據(jù)庫(kù)的slave狀態(tài):? mysql>??SHOW?slave?STATUS?\G? #?如果下面兩個(gè)參數(shù)都是Yes,則說(shuō)明主從配置成功!? Slave_IO_Running:?Yes? Slave_SQL_Running:?Yes

(4)接下來(lái)你可以在主數(shù)據(jù)庫(kù)上創(chuàng)建數(shù)據(jù)庫(kù)、表、插入數(shù)據(jù),然后看從數(shù)據(jù)庫(kù)是否同步了這些操作

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),本社區(qū)不擁有所有權(quán),也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,歡迎發(fā)送郵件至:yqgroup@service.aliyun.com?進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。

轉(zhuǎn)載于:https://www.cnblogs.com/handsome1013/p/7570061.html

總結(jié)

以上是生活随笔為你收集整理的MySQL5.6主从复制(读写分离)方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。