在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    SpringBoot項(xiàng)目中實(shí)現(xiàn)MySQL讀寫分離

    SpringBoot項(xiàng)目中實(shí)現(xiàn)MySQL讀寫分離

    1、MySQL主從復(fù)制

    但我們仔細(xì)觀察我們會(huì)發(fā)現(xiàn),當(dāng)我們的項(xiàng)目都是用的單體數(shù)據(jù)庫時(shí),那么就可能會(huì)存在如下問題:

    • 讀和寫所有壓力都由一臺(tái)數(shù)據(jù)庫承擔(dān), 壓力大
    • 數(shù)據(jù)庫服務(wù)器磁盤損壞則 數(shù)據(jù)丟失 ,單點(diǎn)故障

    為了解決上述提到的兩個(gè)問題,我們可以準(zhǔn)備兩 (多) 臺(tái)MySQL,一臺(tái)主( Master )服務(wù)器,一臺(tái)從( Slave )服務(wù)器,主庫的 數(shù)據(jù)變更 (寫、更新、刪除這些操作) ,需要 同步 到從庫中 (主從復(fù)制) 。而用戶在訪問我們項(xiàng)目時(shí),如果是 寫操作 (insert、update、delete),則直接操作 主庫 ;如果是 讀操作 (select) ,則直接操作從庫,這種結(jié)構(gòu)就是 讀寫分離 啦。

    在這種讀寫分離的結(jié)構(gòu)中,從庫是可以有多個(gè)的

    1.1、介紹

    MySQL主從復(fù)制是一個(gè) 異步 的復(fù)制過程,底層是基于Mysql數(shù)據(jù)庫自帶的 二進(jìn)制日志 功能。就是一臺(tái)或多臺(tái)MySQL數(shù)據(jù)庫(slave,即 從庫 )從另一臺(tái)MySQL數(shù)據(jù)庫(master,即 主庫 )進(jìn)行日志的復(fù)制,然后再解析日志并應(yīng)用到自身,最終實(shí)現(xiàn) 從庫 的數(shù)據(jù)和 主庫 的數(shù)據(jù)保持一致。MySQL主從復(fù)制是 MySQL數(shù)據(jù)庫自帶功能,無需借助第三方工具。

    二進(jìn)制日志:

    二進(jìn)制日志(BINLOG)記錄了所有的 DDL(數(shù)據(jù)定義語言)語句和 DML(數(shù)據(jù)操縱語言)語句,但是不包括數(shù)據(jù)查詢語句。此日志對(duì)于災(zāi)難時(shí)的數(shù)據(jù)恢復(fù)起著極其重要的作用,MySQL的主從復(fù)制, 就是通過該binlog實(shí)現(xiàn)的。默認(rèn)MySQL是未開啟該日志的。

    MySQL復(fù)制過程分成三步:

  • MySQL master 將數(shù)據(jù)變更寫入二進(jìn)制日志( binary log )
  • slave將master的binary log拷貝到它的中繼日志( relay log )
  • slave重做中繼日志中的事件,將數(shù)據(jù)變更反映它自己的數(shù)據(jù)
  • 1.2、主從庫搭建

    在環(huán)境搭建之前,我們需要準(zhǔn)備好兩臺(tái)服務(wù)器,如果生活富裕使用的是兩臺(tái)云服務(wù)器的時(shí)候記得要開放安全組,即防火墻;如果是比狗子我生活好點(diǎn)但也是用的虛擬機(jī)的話,記得別分這么多內(nèi)存啟動(dòng)藍(lán)屏了(別問怎么知道的)

    這里就不給大家展示數(shù)據(jù)庫的安裝和防火墻的操作了,這個(gè)我感覺網(wǎng)上好多資源都能夠滿足遇到的問題,在搭建主從庫的時(shí)候有在網(wǎng)上見到過說MySQL版本要一致的,我也沒太留意直接就在之前的MySQL上操作了,大家可以自己去驗(yàn)證一下。

    1.2.1、主庫配置

    服務(wù)器:192.168.150.100(別試了黑不了的,這是虛擬機(jī)的ip)

    1、修改Mysql數(shù)據(jù)庫的配置文件vim /etc/my.cnf

    在打開的文件中加入下面兩行,其中的server-id不一定是100,確保唯一即可log-bin=mysql-bin #[必須]啟用二進(jìn)制日志server-id=100 #[必須]服務(wù)器唯一ID

    2、重啟Mysql服務(wù)

    這里有三個(gè)方法都能重啟MySQL,最簡單的無疑就是一關(guān)一開:

    net stop mysql;net start mysql;systemctl restart mysqldservice mysqld restart

    3、創(chuàng)建數(shù)據(jù)同步的用戶并授權(quán)

    登錄進(jìn)去MySQL之后才能夠執(zhí)行下面的命令,因?yàn)檫@是SQL命令,Linux不認(rèn)識(shí)這玩意是啥。

    GRANT REPLICATION SLAVE ON *.* to ‘用戶名’@’開放的地址’ identified by ‘密碼’;eg: GRANT REPLICATION SLAVE ON *.* to ‘masterDb’@’%’ identified by ‘Master@123456’;記得刷一下權(quán)限FLUSH PRIVILEGES;

    4、查看master同步狀態(tài)

    這個(gè)時(shí)候還 不用退出MySQL ,因?yàn)橄旅娴拿钸€是SQL命令,執(zhí)行下面的SQL,可以拿到我們后面需要的兩個(gè)重要參數(shù)。

    show master status;

    執(zhí)行完這一句SQL之后,==不要再操作主庫!不要再操作主庫!不要再操作主庫!==重要的事情說三遍,因?yàn)樵俨僮髦鲙熘罂赡軙?huì)導(dǎo)致紅框中的 兩個(gè)屬性值會(huì)發(fā)生變化 ,后面如果發(fā)生了錯(cuò)誤可能就和這里有那么兩毛錢關(guān)系了。

    1.2.2、從庫配置

    服務(wù)器:192.168.150.101(別試了黑不了的,這也是虛擬機(jī)的ip)

    1、 修改Mysql數(shù)據(jù)庫的配置文件vim /etc/my.cnf

    這里要注意server-id和主庫以及其他從庫都不能相同,否則后面將會(huì)配置不成功。

    2、重啟Mysql服務(wù)

    這里有三個(gè)方法都能重啟MySQL,最簡單的無疑就是一關(guān)一開:

    net stop mysql;net start mysql;systemctl restart mysqldservice mysqld restart

    3、設(shè)置主庫地址及同步位置

    登錄進(jìn)去MySQL之后才能夠執(zhí)行下面的命令,因?yàn)檫@是SQL命令

    設(shè)置主庫地址和同步位置change master to master_host=’192.168.150.100′,master_user=’masterDb’,master_password=’Master@123456′,master_log_file=’mysql-bin.000010′,master_log_pos=68479;記得記得開啟從庫配置start slave;

    參數(shù)說明:

    • master_host: 主庫的 IP地址
    • master_user: 訪問主庫進(jìn)行主從復(fù)制的 用戶名 ( 上面在主庫創(chuàng)建的 )
    • master_password: 訪問主庫進(jìn)行主從復(fù)制的用戶名對(duì)應(yīng)的 密碼
    • master_log_file: 從哪個(gè) 日志文件 開始同步 ( 即1.2.1中第4步獲取的 File )
    • master_log_pos: 從指定日志文件的哪個(gè) 位置 開始同步 ( 即1.2.1中第4步獲取的 Position )

    4、查看從數(shù)據(jù)庫的狀態(tài)

    這個(gè)時(shí)候還 不用退出MySQL ,因?yàn)橄旅娴拿钸€是SQL命令,執(zhí)行下面的SQL,可以看到從庫的狀態(tài)信息。通過狀態(tài)信息中的 Slave_IO_running 和 Slave_SQL_running 可以看出主從同步是否就緒,如果這兩個(gè)參數(shù)全為 Yes ,表示主從同步已經(jīng)配置完成。

    show slave statusG;

    1.3、坑位介紹

    1.3.1、UUID報(bào)錯(cuò)

    這可能是由于linux 是復(fù)制出來的,MySQL中還有一個(gè) server_uuid 是一樣的,我們也需要修改。 vim /var/lib/mysql/auto.cnf

    1.3.2、server_id報(bào)錯(cuò)

    這應(yīng)該就是各位大牛設(shè)置server_id的時(shí)候不小心設(shè)置相同的id了,修改過來就行,步驟在上面的配置中。

    1.3.3、同步異常解決

    這是狗子在操作過程中搞出來的一個(gè)錯(cuò)誤……

    出錯(cuò)的原因是在主庫中刪除了用戶信息,但是在從庫中同步的時(shí)候失敗導(dǎo)致同步停止,下面記錄自己的操作(是在進(jìn)入MySQL的操作且是從庫)。

    MASTER_LOG_POSSTOP SLAVE;SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;START SLAVE;SHOW SLAVE STATUSG;

    在數(shù)據(jù)庫中操作時(shí),一定要注意當(dāng)前所在的數(shù)據(jù)庫是哪個(gè),作為一個(gè)良好的實(shí)踐:在SQL語句前加 USE dbname 。

    操作不規(guī)范,親人兩行淚……

    2、項(xiàng)目中實(shí)現(xiàn)

    2.1、ShardingJDBC

    Sharding-JDBC定位為 輕量級(jí)Java框架 ,在Java的JDBC層提供的額外服務(wù)。 它使用客戶端直連數(shù)據(jù)庫,以 jar包 形式提供服務(wù),無需額外部署和依賴,可理解為增強(qiáng)版的JDBC驅(qū)動(dòng), 完全兼容JDBC和各種ORM框架 。

    使用Sharding-JDBC可以在程序中輕松的實(shí)現(xiàn)數(shù)據(jù)庫 讀寫分離 。

    Sharding-JDBC具有以下幾個(gè)特點(diǎn):

    • 適用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
    • 支持任何第三方的數(shù)據(jù)庫連接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
    • 支持任意實(shí)現(xiàn)JDBC規(guī)范的數(shù)據(jù)庫。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92標(biāo)準(zhǔn)的數(shù)據(jù)庫。

    下面我們將用ShardingJDBC在項(xiàng)目中實(shí)現(xiàn)MySQL的讀寫分離。

    2.2、依賴導(dǎo)入

    在pom.xml文件中導(dǎo)入ShardingJDBC的依賴坐標(biāo)

    org.apache.shardingsphere sharding-jdbc-spring-boot-starter 4.0.0-RC1

    2.3、配置文件

    在application.yml中增加數(shù)據(jù)源的配置

    spring: shardingsphere: datasource: names: master,slave # 主數(shù)據(jù)源 master: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.150.100:3306/db_test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 # 從數(shù)據(jù)源 slave: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.150.101:3306/db_test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 masterslave: # 讀寫分離配置,設(shè)置負(fù)載均衡的模式為輪詢 load-balance-algorithm-type: round_robin # 最終的數(shù)據(jù)源名稱 name: dataSource # 主庫數(shù)據(jù)源名稱 master-data-source-name: master # 從庫數(shù)據(jù)源名稱列表,多個(gè)逗號(hào)分隔 slave-data-source-names: slave props: sql: show: true #開啟SQL顯示,默認(rèn)false # 覆蓋注冊bean,后面創(chuàng)建數(shù)據(jù)源會(huì)覆蓋前面創(chuàng)建的數(shù)據(jù)源 main: allow-bean-definition-overriding: true

    2.4、測試跑路

    這時(shí)我們就可以對(duì)我們項(xiàng)目中的配置進(jìn)行一個(gè)測試,下面分別調(diào)用一個(gè)更新接口和一個(gè)查詢接口,通過查看日志中記錄的數(shù)據(jù)源來判斷是否能夠按照我們預(yù)料中的跑。

    • 更新操作(寫操作)
    • 查詢操作(讀操作)

    搞定!?。〕绦蛘0凑瘴覀冾A(yù)期的成功跑起來了,成功借助ShardingJDBC在我們項(xiàng)目中實(shí)現(xiàn)了數(shù)據(jù)庫的讀寫分離。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年7月10日 18:27
    下一篇 2022年7月10日 18:28

    相關(guān)推薦

    • 30個(gè)無加盟費(fèi)的項(xiàng)目(茶顏悅色奶茶店加盟費(fèi)多少)

      茶顏悅色又爆了,8月18日,茶顏悅色南京門店正式開業(yè),開張不到半小時(shí),門店就人滿為患,消費(fèi)者的購買熱情十分高漲,而由于人流量過大造成擁堵,茶顏悅色也不得不暫停營業(yè)。 當(dāng)然,這里面排…

      2022年11月27日
    • cad連續(xù)標(biāo)注快捷鍵(cad連續(xù)標(biāo)注快捷鍵)

      本文主要講的是cad連續(xù)標(biāo)注快捷鍵,以及和cad連續(xù)標(biāo)注快捷鍵相關(guān)的知識(shí),如果覺得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 cad中連續(xù)標(biāo)注快捷鍵 CAD尺寸標(biāo)準(zhǔn)快捷命令:DL…

      2022年11月27日
    • 凈利潤率越高越好嗎(凈利潤率多少合適)

      一、持續(xù)增收不增利,平均凈利潤率首次跌入個(gè)位數(shù) 2021年,增收不增利依舊是行業(yè)主流。具體來看,大部分企業(yè)營業(yè)收入呈增長態(tài)勢,E50企業(yè)平均同比增速達(dá)到17.3%,但是利潤增速則明…

      2022年11月26日
    • 規(guī)范透明促PPP高質(zhì)量發(fā)展——16萬億元大市場迎來新規(guī)

      近日,財(cái)政部印發(fā)《關(guān)于進(jìn)一步推動(dòng)政府和社會(huì)資本合作(PPP)規(guī)范發(fā)展、陽光運(yùn)行的通知》,從做好項(xiàng)目前期論證、推動(dòng)項(xiàng)目規(guī)范運(yùn)作、嚴(yán)防隱性債務(wù)風(fēng)險(xiǎn)、保障項(xiàng)目陽光運(yùn)行四個(gè)方面進(jìn)一步規(guī)范P…

      2022年11月25日
    • 什么是推廣cpa一篇文章帶你看懂CPA推廣渠道

      CPA渠道 CPA指的是按照指定的行為結(jié)算,可以是搜索,可以是注冊,可以是激活,可以是搜索下載激活,可以是綁卡,實(shí)名認(rèn)證,可以是付費(fèi),可以是瀏覽等等。甲乙雙方可以根據(jù)自己的情況來定…

      2022年11月25日
    • 推薦3種白手起家的賺錢項(xiàng)目(白手起家賺錢項(xiàng)目有哪些)

      如今社會(huì)壓力非常的大,家有老少要養(yǎng)活,這些都加速了窮人想要?jiǎng)?chuàng)業(yè)的欲望,但是創(chuàng)業(yè)路總是那么的艱難,資金就是創(chuàng)業(yè)的重頭戲,所以選擇一個(gè)低成本又賺錢的項(xiàng)目是大多數(shù)人最期望的了,那么有哪些…

      2022年11月25日
    • 抖音直播帶貨有哪些方法技巧(抖音直播帶貨有哪些痛點(diǎn))

      如今抖音這個(gè)短視頻的變現(xiàn)能力越來越突顯了,尤其是在平臺(tái)上開通直播,更具有超強(qiáng)的帶貨屬性,已經(jīng)有越來越多的普通人加入到其中了。不過直播帶貨雖然很火,但是也不是每個(gè)人都能做好的,那么在…

      2022年11月24日
    • 淘寶直播開通后帶貨鏈接怎么做(淘寶直播需要開通淘寶店鋪嗎)

      直播帶貨無論是對(duì)于商家來說還是主播收益都是非??捎^的,所以不少平臺(tái)都有直播帶貨功能,一些小伙伴也想加入淘寶直播,那么淘寶直播開通后帶貨鏈接怎么做?下面小編為大家?guī)硖詫氈辈ラ_通后帶…

      2022年11月24日
    • 閑魚運(yùn)營的4大技巧解析(閑魚運(yùn)營怎么做)

      熟悉我又來了,上一次寫的文章是爆出風(fēng)水項(xiàng)目的潛規(guī)則,但那個(gè)項(xiàng)目已經(jīng)涼涼了。 這一次我是要教一些小白,你們第一次做互聯(lián)網(wǎng)的建議做的項(xiàng)目之一,這個(gè)項(xiàng)目就是閑魚賣二手物品賺差價(jià)了!!! …

      2022年11月24日
    • 明查|美國新冠后遺癥患者中有16%癥狀嚴(yán)重以致無法工作?

      點(diǎn)擊進(jìn)入澎湃新聞全球事實(shí)核查平臺(tái) 速覽 – 網(wǎng)傳數(shù)據(jù)比例無權(quán)威信源佐證,該比例有可能是結(jié)合了美國疾病防控中心和布魯金斯學(xué)會(huì)的數(shù)據(jù)得出,但這兩個(gè)機(jī)構(gòu)的調(diào)研目的和樣本都不同…

      2022年11月24日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息