本文目錄一覽:
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-hant/n/309055.html