欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

最新MySql8.27主從復(fù)制以及SpringBoot項(xiàng)目中的讀寫(xiě)分離實(shí)戰(zhàn)

1、MySql主從復(fù)制

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

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

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

2、配置-主庫(kù)Master

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

[mysqld]
log-bin=mysql-bin # [必須]啟用二進(jìn)制日志
server-id=100 # [必須]服務(wù)器唯一ID

修改后重啟MySql服務(wù)

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

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

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

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

show master status

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

3、配置-從庫(kù)Slave

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

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

重啟MySQL服務(wù)

systemctl restart mysql;

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

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

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

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

show slave status;

3、主從復(fù)制測(cè)試

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

4、讀寫(xiě)分離案例

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

4.1、Sharding-JDBC框架介紹

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

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

springboot項(xiàng)目中只需要導(dǎo)入核心依賴即可

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

案例要求需要完成上面的內(nèi)容

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

主庫(kù)主要是用來(lái)完成增、刪、改操作
從庫(kù)主要是用來(lái)完成查詢操作

案例目錄結(jié)構(gòu)

基于MP快速開(kāi)發(fā),下面給出基本的控制器代碼,在控制中進(jìn)行二次開(kāi)發(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;

/**
 * 項(xiàng)目名稱: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文件中引入核心的依賴包,否則無(wú)法完成下面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:
      # 讀寫(xiě)分離設(shè)置【負(fù)載均衡策略】
      load-balance-algorithm-type: round_robin
      # 最終的數(shù)據(jù)源名稱
      name: dataSource
      # 主數(shù)據(jù)源名稱【與上面對(duì)應(yīng)】
      master-data-source-name: master
      # 從數(shù)據(jù)源名稱【與上面對(duì)應(yīng)】
      slave-data-source-names: slave
    props:
      sql:
        show: true # 開(kāi)啟SQL顯示,默認(rèn)false
  main:
    allow-bean-definition-overriding: true # 允許bean覆蓋

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

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

啟動(dòng)控制臺(tái)輸出

使用接口測(cè)試工具或插件來(lái)完成接口的調(diào)用測(cè)試是否使用哪一個(gè)數(shù)據(jù)源

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

通過(guò)請(qǐng)求一個(gè)【查詢】接口,然后斷點(diǎn)查看一下,目前

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

再次請(qǐng)求一個(gè)【添加或刪除】完成主庫(kù)操作

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

相關(guān)文章

  • MySQL 錯(cuò)誤處理例子[譯]

    MySQL 錯(cuò)誤處理例子[譯]

    MySQL 錯(cuò)誤處理例子,國(guó)外人寫(xiě)的,大家可以參考下。
    2009-10-10
  • Unity連接MySQL并讀取表格數(shù)據(jù)的實(shí)現(xiàn)代碼

    Unity連接MySQL并讀取表格數(shù)據(jù)的實(shí)現(xiàn)代碼

    本文給大家介紹Unity連接MySQL并讀取表格數(shù)據(jù)的實(shí)現(xiàn)代碼,實(shí)例化的同時(shí)調(diào)用MySqlConnection,傳入?yún)?shù),這里的傳入?yún)?shù)個(gè)人認(rèn)為是CMD里面的直接輸入了,string格式直接類似手敲到cmd里面,完整代碼參考下本文
    2021-06-06
  • MySQL用truncate命令快速清空一個(gè)數(shù)據(jù)庫(kù)中的所有表

    MySQL用truncate命令快速清空一個(gè)數(shù)據(jù)庫(kù)中的所有表

    這篇文章主要介紹了MySQL用truncate命令快速清空一個(gè)數(shù)據(jù)庫(kù)中的所有表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • MySQL中的流式查詢及游標(biāo)查詢方式

    MySQL中的流式查詢及游標(biāo)查詢方式

    這篇文章主要介紹了MySQL中的流式查詢及游標(biāo)查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Linux系統(tǒng)利用crontab定時(shí)備份Mysql數(shù)據(jù)庫(kù)方法

    Linux系統(tǒng)利用crontab定時(shí)備份Mysql數(shù)據(jù)庫(kù)方法

    本文教你如果快速利用系統(tǒng)crontab來(lái)定時(shí)執(zhí)行備份文件,按日期對(duì)備份結(jié)果進(jìn)行保存
    2021-09-09
  • 手把手教你使用Navicat生成MySQL測(cè)試數(shù)據(jù)

    手把手教你使用Navicat生成MySQL測(cè)試數(shù)據(jù)

    Navicat是一套快速、可靠并價(jià)格相當(dāng)便宜的數(shù)據(jù)庫(kù)管理工具,專為簡(jiǎn)化數(shù)據(jù)庫(kù)的管理及降低系統(tǒng)管理成本而設(shè),下面這篇文章主要給大家介紹了關(guān)于使用Navicat生成MySQL測(cè)試數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • MySQL組合索引(多列索引)使用與優(yōu)化案例詳解

    MySQL組合索引(多列索引)使用與優(yōu)化案例詳解

    這篇文章主要介紹了MySQL組合索引(多列索引)使用與優(yōu)化,主要包括多列索引,測(cè)試案例及過(guò)程以及多列索引的使用順序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • MySQL 5.7 版本的安裝及簡(jiǎn)單使用(圖文教程)

    MySQL 5.7 版本的安裝及簡(jiǎn)單使用(圖文教程)

    這篇文章主要介紹了MySQL 5.7 版本的安裝及簡(jiǎn)單使用(圖文教程)的相關(guān)資料,這里對(duì)mysql 5.7的安裝及使用和注意事項(xiàng),需要的朋友可以參考下
    2016-12-12
  • Mysql 8 新特性 window functions 的作用

    Mysql 8 新特性 window functions 的作用

    MySQL是眾多網(wǎng)站技術(shù)棧中的標(biāo)準(zhǔn)配置,是廣受歡迎的開(kāi)源數(shù)據(jù)庫(kù),已經(jīng)推出了8.0的第一個(gè)候選發(fā)行版本。接下來(lái)通過(guò)本文給大家分享Mysql 8 新特性 window functions 的作用,需要的朋友參考下吧
    2017-11-11
  • MySQL?搭建主從同步實(shí)現(xiàn)操作

    MySQL?搭建主從同步實(shí)現(xiàn)操作

    這篇文章主要介紹了MySQL?中的主從同步實(shí)現(xiàn)操作,文章圍繞如何搭建主從同步詳細(xì)展開(kāi)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03

最新評(píng)論