最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

最新MySql8.27主從復制及SpringBoot項目中的讀寫分離實戰(zhàn)教程

 更新時間:2022年08月08日 10:42:20   作者:小鐘要學習?。?!  
MySQL主從復制是一個異步的復制過程,底層是基于MySQL1數(shù)據(jù)庫自帶的二進制日志功能,這篇文章主要介紹了最新MySql8.27主從復制及SpringBoot項目中的讀寫分離實戰(zhàn)教程,需要的朋友可以參考下

最新MySql8.27主從復制以及SpringBoot項目中的讀寫分離實戰(zhàn)

1、MySql主從復制

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

MySQL復制過程分成三步:
1、master將改變記錄到二進制日志(binary log)
2、slave:將master的binary log拷貝到它的中繼日志(relay log)
3、slave重做中繼日志中的事件,將改變應用到自己的數(shù)據(jù)庫中

說明:下面的配置需要準備兩臺服務器并且都要安裝有MySQL數(shù)據(jù)庫,同時安裝數(shù)據(jù)庫的方式不同修改配置文件的位置也不同,需要更具自身電腦來查詢

2、配置-主庫Master

修改MySql數(shù)據(jù)庫的配置文件/etc/my.cnf,在配置日志文件中添加如下代碼(不要第一行)

[mysqld]
log-bin=mysql-bin # [必須]啟用二進制日志
server-id=100 # [必須]服務器唯一ID

修改后重啟MySql服務

登錄MySQL執(zhí)行下面的SQL語句

create user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
grant replication slave on *.* to 'slave'@'%';

注:上面SQL的作用是創(chuàng)建一個用戶xiaoming,密碼為Root@123456,并且給xiaoming用戶授予REPLICATI0 N SLAVE
權限。常用于建立復制時所需要用到的用戶權限,也就是slave必須被master授權具有該權限的用戶,才能通過該用戶復制。

登錄MySQL數(shù)據(jù)庫,執(zhí)行下面的SQL,記錄下結果中的File和Position的值

show master status

注意:上面的SQL的作用是查看Master狀態(tài),執(zhí)行完此SQL后不要再執(zhí)行任何操作

3、配置-從庫Slave

修改MySQL數(shù)據(jù)庫中的配置文件/etc/my.cnf

[mysqld]
server-id=101 # [必須]服務器唯一ID

重啟MySQL服務

systemctl restart mysql;

【重點】登錄MySQL數(shù)據(jù)庫,執(zhí)行下面SQL語句(與配置主庫最后查詢的表格有關聯(lián))

change master to master_host='主庫IP地址',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=653;
stop slave;
start slave;

注意:
master_user:是在主庫中創(chuàng)建的權限賬戶
master_password:是創(chuàng)建賬戶的密碼
master_log_file:是創(chuàng)建主庫最后執(zhí)行的show master statusSQL語句查詢出來的【文件名稱】
master_log_pos:是文件的位置,與上一句查詢同出一處

登錄MySQL數(shù)據(jù)庫,執(zhí)行下面的SQL查看從數(shù)據(jù)庫的狀態(tài)

show slave status;

3、主從復制測試

1、在主數(shù)據(jù)庫下創(chuàng)建一個新的數(shù)據(jù)庫,然后在從庫中刷新,如果出現(xiàn)主庫設置的數(shù)據(jù)庫那么就是成功了

4、讀寫分離案例

面對日益增加的系統(tǒng)訪問量,數(shù)據(jù)庫的吞吐量面臨著巨大瓶頸。對于同一時刻有大量并發(fā)讀操作和較少寫操作類型的
應用系統(tǒng)來說,將數(shù)據(jù)庫拆分為主庫和從庫,主庫負責處理事務性的增刪改操作,從庫負責處理查詢操作,能夠有效
的避免由數(shù)據(jù)更新導致的行鎖,使得整個系統(tǒng)的查詢性能得到極大的改善。

4.1、Sharding-JDBC框架介紹

Sharding-JDBC定位為輕量級Java框架,在Java的DBC層提供的額外服務。它使用客戶端直連數(shù)據(jù)庫,以jar包形式
提供服務,無需額外部署和依賴,可理解為增強版的DBC驅動,完全兼容JDBC和各種ORM框架。
使用Sharding-JDBC可以在程序中輕松的實現(xiàn)數(shù)據(jù)庫讀寫分離。

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

springboot項目中只需要導入核心依賴即可

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.1.1</version>
</dependency>	

案例要求需要完成上面的內容

在主庫中設置一個數(shù)據(jù)庫以及一個user字段,并填寫上幾個簡單字段方便后面代碼的測試

主庫主要是用來完成增、刪、改操作
從庫主要是用來完成查詢操作

案例目錄結構

基于MP快速開發(fā),下面給出基本的控制器代碼,在控制中進行二次開發(fā)

package com.zcl.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcl.entity.User;
import com.zcl.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.sql.DataSource;
import java.util.List;

/**
 * 項目名稱:Sharding-JDBC
 * 描述:控制器
 *
 * @author zhong
 * @date 2022-08-06 20:36
 */
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private DataSource dataSource;

    @Autowired
    private UserService userService;

    /**
     * 新增用戶
     * @param user
     * @return
     */
    @PostMapping
    public User save(User user){
        userService.save(user);
        return user;
    }

    /**
     * 根據(jù)id刪除
     * @param id
     */
    @DeleteMapping("/{id}")
    public void delete(@PathVariable("id") Long id){
        userService.removeById(id);
    }

    /**
     * 根據(jù)id修改用戶
     * @param user
     * @return
     */
    @PutMapping
    public User update(User user){
        userService.updateById(user);
        return user;
    }

    /**
     * 根據(jù)id查詢用戶
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public User getById(@PathVariable("id") Long id){
        return userService.getById(id);
    }

    /**
     * 條件查詢
     * @param user
     * @return
     */
    @GetMapping("/list")
    public List<User> list(User user){
        LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(user.getId() != null,User::getId,user.getId());
        queryWrapper.eq(user.getName() != null, User::getName,user.getName());
        return userService.list(queryWrapper);
    }
}

注意:一定需要在pom文件中引入核心的依賴包,否則無法完成下面application.yml配置的工作

server:
  port: 8080
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      id-type: ASSIGN_ID

spring:
  shardingsphere:
    datasource:
      names: master,slave
      # 主數(shù)據(jù)源
      master:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://192.168.26.131:3306/rw?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 1234
      # 從數(shù)據(jù)源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://192.168.26.131:13306/rw?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
        driver-class-name: com.mysql.cj.jdbc.Driver
        username: root
        password: 1234
    masterslave:
      # 讀寫分離設置【負載均衡策略】
      load-balance-algorithm-type: round_robin
      # 最終的數(shù)據(jù)源名稱
      name: dataSource
      # 主數(shù)據(jù)源名稱【與上面對應】
      master-data-source-name: master
      # 從數(shù)據(jù)源名稱【與上面對應】
      slave-data-source-names: slave
    props:
      sql:
        show: true # 開啟SQL顯示,默認false
  main:
    allow-bean-definition-overriding: true # 允許bean覆蓋

在配置項中設置允許bean定義覆蓋配置項
如果不進行設置就會出現(xiàn)啟動項目報錯,主要的原因是引兩個jar包都會創(chuàng)建數(shù)據(jù)源對象,導致報錯,開啟bean配置覆蓋就可以解決問題了

如果啟動報錯:url連接不上的,請查看mysql數(shù)據(jù)庫的版本以及連接mysql的具體信息,8.0以上的版本與老版本的連接路徑上需要添加很多的參數(shù)

啟動控制臺輸出

使用接口測試工具或插件來完成接口的調用測試是否使用哪一個數(shù)據(jù)源

我這里使用的是IDEA中的RestfulToolc插件

通過請求一個【查詢】接口,然后斷點查看一下,目前

放行查看具體的數(shù)據(jù)

再次請求一個【添加或刪除】完成主庫操作

到此這篇關于最新MySql8.27主從復制及SpringBoot項目中的讀寫分離實戰(zhàn)教程的文章就介紹到這了,更多相關MySql主從復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 將json文件數(shù)據(jù)導入到MySQL表中的詳細教程

    將json文件數(shù)據(jù)導入到MySQL表中的詳細教程

    如何使用json文件將數(shù)據(jù)導入到MySQL數(shù)據(jù)庫中的表里?Excel表格等文件的數(shù)據(jù)通過java或者python等語言讀取后生成一個json文件,然后想要將文件中的數(shù)據(jù)寫入到MySQL表中,本文介紹了將json文件數(shù)據(jù)導入到MySQL表中的詳細教程,需要的朋友可以參考下
    2024-07-07
  • mysql sql大文件導入正確姿勢

    mysql sql大文件導入正確姿勢

    在 MySQL 中導入大文件時,mysql source 導入大文件速度太慢,可能會遇到性能問題或內存限制,以下是一些優(yōu)化導入大文件的建議,需要的朋友可以參考一下
    2025-02-02
  • mysql id從1開始自增 快速解決id不連續(xù)的問題

    mysql id從1開始自增 快速解決id不連續(xù)的問題

    這篇文章主要介紹了mysql id從1開始自增 快速解決id不連續(xù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • mysql數(shù)據(jù)庫是做什么的

    mysql數(shù)據(jù)庫是做什么的

    在本篇文章里小編給大家整理的是一篇關于mysql數(shù)據(jù)庫是做什么的先關知識點內容,有興趣的朋友們可以學習下。
    2020-06-06
  • MYSQL數(shù)據(jù)庫數(shù)據(jù)拆分之分庫分表總結

    MYSQL數(shù)據(jù)庫數(shù)據(jù)拆分之分庫分表總結

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫數(shù)據(jù)拆分之分庫分表總結,需要的朋友可以參考下
    2016-07-07
  • mysql查詢慢的原因和解決方案

    mysql查詢慢的原因和解決方案

    最近發(fā)現(xiàn)公司網站后臺查詢的時候比較慢,可能因為大量的like查詢導致,這里為大家分享一下方法,需要的朋友可以參考下
    2019-09-09
  • 教你如何6秒鐘往MySQL插入100萬條數(shù)據(jù)的實現(xiàn)

    教你如何6秒鐘往MySQL插入100萬條數(shù)據(jù)的實現(xiàn)

    這篇文章主要介紹了教你如何6秒鐘往MySQL插入100萬條數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 你知道m(xù)ysql中空值和null值的區(qū)別嗎

    你知道m(xù)ysql中空值和null值的區(qū)別嗎

    這篇文章主要給大家介紹了關于mysql中空值和null值區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • mysql函數(shù)全面總結

    mysql函數(shù)全面總結

    這篇文章主要介紹了mysql函數(shù),下面文章從MySQL常用的函數(shù)開始介紹、還有數(shù)值函數(shù),利用舉例說明的形式展開內容,需要的朋友可以參考一下
    2021-11-11
  • MySQL窗口函數(shù) over(partition by)的用法

    MySQL窗口函數(shù) over(partition by)的用法

    本文主要介紹了MySQL窗口函數(shù) over(partition by)的用法, partition by相比較于group by,能夠在保留全部數(shù)據(jù)的基礎上,只對其中某些字段做分組排序,下面就來介紹一下具體用法,感興趣的可以了解一下
    2024-02-02

最新評論

融水| 绥化市| 墨脱县| 育儿| 诸暨市| 西峡县| 南澳县| 德兴市| 樟树市| 抚宁县| 镇巴县| 南丰县| 扎鲁特旗| 枣庄市| 龙川县| 和林格尔县| 米泉市| 中宁县| 比如县| 禄劝| 喜德县| 托里县| 嘉兴市| 高台县| 绥芬河市| 兴义市| 屏东县| 唐河县| 彰化市| 克东县| 涡阳县| 阜城县| 镇宁| 逊克县| 霍山县| 耿马| 宿州市| 宁乡县| 增城市| 内丘县| 张掖市|