java項目與mysql庫分離(mysql資料庫怎麼分離)

本文目錄一覽:

SpringBoot項目中實現MySQL讀寫分離

但我們仔細觀察我們會發現,當我們的項目都是用的單體資料庫時,那麼就可能會存在如下問題:

為了解決上述提到的兩個問題,我們可以準備兩 (多) 台MySQL,一台主( Master )伺服器,一台從( Slave )伺服器,主庫的 數據變更 (寫、更新、刪除這些操作) ,需要 同步 到從庫中 (主從複製) 。而用戶在訪問我們項目時,如果是 寫操作 (insert、update、delete),則直接操作 主庫 ;如果是 讀操作 (select) ,則直接操作從庫,這種結構就是 讀寫分離 啦。

在這種讀寫分離的結構中,從庫是可以有多個的

MySQL主從複製是一個 非同步 的複製過程,底層是基於Mysql資料庫自帶的 二進位日誌 功能。就是一台或多台MySQL資料庫(slave,即 從庫 )從另一台MySQL資料庫(master,即 主庫 )進行日誌的複製,然後再解析日誌並應用到自身,最終實現 從庫 的數據和 主庫 的數據保持一致。MySQL主從複製是 MySQL資料庫自帶功能,無需藉助第三方工具。

二進位日誌(BINLOG)記錄了所有的 DDL(數據定義語言)語句和 DML(數據操縱語言)語句,但是不包括數據查詢語句。此日誌對於災難時的數據恢復起著極其重要的作用,MySQL的主從複製, 就是通過該binlog實現的。默認MySQL是未開啟該日誌的。

在環境搭建之前,我們需要準備好兩台伺服器,如果生活富裕使用的是兩台雲伺服器的時候記得要開放安全組,即防火牆;如果是比狗子我生活好點但也是用的虛擬機的話,記得別分這麼多內存啟動藍屏了(別問怎麼知道的)

這裡就不給大家展示資料庫的安裝和防火牆的操作了,這個我感覺網上好多資源都能夠滿足遇到的問題,在搭建主從庫的時候有在網上見到過說MySQL版本要一致的,我也沒太留意直接就在之前的MySQL上操作了,大家可以自己去驗證一下。

伺服器:192.168.150.100(別試了黑不了的,這是虛擬機的ip)

這裡有三個方法都能重啟MySQL,最簡單的無疑就是一關一開:

登錄進去MySQL之後才能夠執行下面的命令,因為這是SQL命令,Linux不認識這玩意是啥。

這個時候還 不用退出MySQL ,因為下面的命令還是SQL命令,執行下面的SQL,可以拿到我們後面需要的兩個重要參數。

執行完這一句SQL之後,==不要再操作主庫!不要再操作主庫!不要再操作主庫!==重要的事情說三遍,因為再操作主庫之後可能會導致紅框中的 兩個屬性值會發生變化 ,後面如果發生了錯誤可能就和這裡有那麼兩毛錢關係了。

伺服器:192.168.150.101(別試了黑不了的,這也是虛擬機的ip)

這裡要注意server-id和主庫以及其他從庫都不能相同,否則後面將會配置不成功。

這裡有三個方法都能重啟MySQL,最簡單的無疑就是一關一開:

登錄進去MySQL之後才能夠執行下面的命令,因為這是SQL命令

參數說明:

這個時候還 不用退出MySQL ,因為下面的命令還是SQL命令,執行下面的SQL,可以看到從庫的狀態信息。通過狀態信息中的 Slave_IO_running 和 Slave_SQL_running 可以看出主從同步是否就緒,如果這兩個參數全為 Yes ,表示主從同步已經配置完成。

這可能是由於linux 是複製出來的,MySQL中還有一個 server_uuid 是一樣的,我們也需要修改。 vim /var/lib/mysql/auto.cnf

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

這是狗子在操作過程中搞出來的一個錯誤……

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

在資料庫中操作時,一定要注意當前所在的資料庫是哪個,作為一個良好的實踐:在SQL語句前加 USE dbname 。

Sharding-JDBC定位為 輕量級Java框架 ,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以 jar包 形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動, 完全兼容JDBC和各種ORM框架 。

使用Sharding-JDBC可以在程序中輕鬆的實現資料庫 讀寫分離 。

Sharding-JDBC具有以下幾個特點:

下面我們將用ShardingJDBC在項目中實現MySQL的讀寫分離。

在pom.xml文件中導入ShardingJDBC的依賴坐標

在application.yml中增加數據源的配置

這時我們就可以對我們項目中的配置進行一個測試,下面分別調用一個更新介面和一個查詢介面,通過查看日誌中記錄的數據源來判斷是否能夠按照我們預料中的跑。

搞定!!!程序正常按照我們預期的成功跑起來了,成功藉助ShardingJDBC在我們項目中實現了資料庫的讀寫分離。

JAVA寫的管理系統可以連與MySQL資料庫一起打包成JAR文件嗎?

不能。

mysql資料庫你打包出來的只是一個連接,數據是無法打包的,

如果硬性的打包。

只有把你的管理系統源碼與你的資料庫表創建方式與mysql安裝包一起打包。之後鏈接寫默認。

但還是需要安裝。。沒有辦法弄在一起。。

基於Java的應用MySQL讀寫分離用什麼工具或類庫來實現?

如果有用spring的話 試試繼承AbstractRoutingDataSource。 具體可以上網查查。

我們項目在用,還不錯吧。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/309055.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-04 19:30
下一篇 2025-01-04 19:30

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29

發表回復

登錄後才能評論