首页 > 数据库 >Java Web项目—餐饮管理系统Day14-MySQL主从复制与读写分离

Java Web项目—餐饮管理系统Day14-MySQL主从复制与读写分离

时间:2024-03-24 10:00:14浏览次数:33  
标签:Web 主从复制 Java 数据库 MySQL master Mysql 服务器

文章目录

读写分离 是指将数据库的读操作和写操作分离到不同的数据库服务器上,以提高数据库的性能和可用性。在高并发的场景下,读操作通常占据了大部分的数据库负载,而写操作则相对较少。通过将读操作分发到多个服务器上,可以有效减轻单个数据库服务器的负载压力,提高数据库的并发处理能力。

读写分离的作用

读写分离的主要作用是提高数据库的性能和可用性。通过将读操作分发到多个服务器上,可以提高数据库的并发处理能力,减轻单个数据库服务器的负载压力。同时,通过将读操作分发到多个服务器上,可以提高数据库的可用性,当某个服务器发生故障时,其他服务器可以继续提供读服务。

主从复制(Master-Slave Replication)

主从复制是最常见的MySQL读写分离方案之一。在主从复制方案中,一个数据库服务器充当主服务器,负责处理写操作,而其他数据库服务器充当从服务器,负责处理读操作。主服务器将写操作的更新记录同步到从服务器,从服务器可以通过复制机制实时获取主服务器的更新。

如何实现主从复制

实现主从复制需要进行以下步骤:
配置主服务器和从服务器的MySQL实例。
在主服务器上启用 二进制日志(binary log) 功能。
在从服务器上启用复制功能,并指定主服务器的地址和认证信息。
等待从服务器完成数据同步。

总的来说:
MySQL主从复制是一个异步的复制过程, 底层基于 Mysql 数据库自带的二进制日志功能, 是一台或多台 Mysql 数据库(slave, 即从库)从另一台 Mysql 数据库(master, 即主库)进行日志的复制然后再解析日志并应用到自身, 最终实现从库的数据和主库的数据保持一致的过程。 Mysql 主从复制是MVSOL数据库自带功能, 无需借助第三方工具.

MySOL复制过程分成三步:
● master 将改变记录到二进制日志(binary log)
● slave 将 master 的 binary log 拷贝到它的中继日志(relay log)
● slave 重做中继日志中的事件,将改变应用到自己的数据库中

在这里插入图片描述

MySQL 配置

提前准备好两台服务器,分别安装 Mysql 并启动服务成功
主库(Master): 192.168.138.100
从库(slave): 192.168.138.101

主库配置

第一步: 修改 Mysql 数据库的配置文件 /etc/my.cnf

log-bin=mysql-bin   # [必须] 启用二进制日志
server-id=100       # [必须] 服务器唯一ID

第二步: 重启 Mysql 服务
systemctl restart mysqld
第三步: 登录 Mysql 数据库,执行下面SQL

GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by '123456';

创建一个用户 xiaoming, 密码为 123456, 并且给 xiaoming 用户授予 REPLICATION SLAVE 权限, 该权限常用于建立复制: 也就是slave必须被master授权具有该权限的用户, 才能通过该用户复制.

第四步: 执行下面SQL, 记录下结果中 FilePosition 的值
show master status;
注: 上面SQL的作用是查看Master的状态,执行完此SQL后不要再执行任何操作

从库配置

第一步: 修改Mysql数据库的配置文件/etc/my.cnf

server-id=101 #[必须]服务器唯-ID

第二步:重启 Mysql 服务
systemctl restart mysqld
第三步:登录Mysql数据库,执行下面SQL

change master to
master_host='223.104.123.88', 
master_user='syn_user', 
master_password='syn226', 
master_log_file='MRRAINBOW-bin.000089', 
master_log_pos=1103;
start slave;

注意:

  1. 关于文件位置, 可以使用:
    mysql --help
    命令进行查看
    例如 windows 下:
Default options are read from the following files in the given order:
C:\WINDOWS\my.ini 
C:\WINDOWS\my.cnf 
C:\my.ini 
C:\my.cnf 
C:\Program Files\MySQL\MySQL Server 8.0\my.ini 
C:\Program Files\MySQL\MySQL Server 8.0\my.cnf
  1. 关于授权管理:
    语法格式为:
    GRANT privileges ON database.table TO 'username'@'host';
    例如:
    grant REPLICATION SLAVE on *.* to 'syn_user'@'%';
    grant select, insert, update, delete on testdb.* to common_user@'%'
    另外, 在 nysql8.0 中, 用户创建和用户授权需要分两条语句执行:
-- 创建账户
CREATE USER '用户名'@'访问主机' IDENTIFIED BY '密码';

-- 为创建的账户赋权
GRANT '权限列表' ON '数据库' TO '用户名'@'访问主机';
GRANT ALL ON *.* TO 'root'@'%';

-- 刷新
FLUSH PRIVILEGES;
  1. 关于 mysqld 服务启动失败
    建议首先查看 mysql 启动日志, 而不是去网上查找, 因为启动失败的原因会有很多, 最好是看报错日志.
    linux 下, 错误日志位于 /var/log/mysql/ 目录下.

  2. 关于连接失败
    首先检查防火墙状态, 3306 端口是否开放;
    其次检查机器上 mysqld 服务运行状态, 是否正常运行;
    接着登入 mysql, 查询 mysql 下的 user 表, 查看各个用户允许的 host 状态, 若为 localhost 则说明该用户仅允许本机访问.

SpringBoot support

SpringBoot 中有许多插件, 支持自动化的 mysql 主从配置服务.

标签:Web,主从复制,Java,数据库,MySQL,master,Mysql,服务器
From: https://blog.csdn.net/weixin_46866349/article/details/136939224

相关文章

  • 08-JavaScript事件监听
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS-事件-事件绑定</title></head><body><!--点击按钮,在控制台打印相关信息--><inputtype="button"......
  • `ij_javascript_spaces_within_imports = true` 这个设置表示在 JavaScript 代码的
    #http://editorconfig.orgroot=true[*]#表示所有文件适用charset=utf-8#设置文件字符集为utf-8indent_style=tab#缩进风格(tab|space)indent_size=4#缩进大小end_of_line=lf#控制换行类型(lf|cr|crlf)trim_trailing_whitespace=true#去除......
  • ideaSSM 学员信息管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码mav
    一、源码特点 idea开发SSM学员信息管理系统是一套完善的信息管理系统,结合SSM框架和bootstrap完成本系统,对理解JSPjava编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。前段主要技术bootstrap.cssjquery后端主要......
  • 黑马Java0基础课程学习记录第五天(p49-p53)-3.23
    day05-循环高级训练+leecode练习1.无限循环2.条件控制语句breakcontinuecontinue:不能单独存在的,只能存在于循环当中。表示:跳过本次循环,继续执行下次循环。eg:break:不能单独存在的。可以用在switch和循环中,表示结束,跳出的意思。eg:练习1:逢7过游戏:从1-100打印......
  • Java零基础-数组
    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把......
  • Java零基础-数组:异常处理和错误处理
    哈喽,各位小伙伴们,你们好呀,我是喵手。  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把......
  • 当Java 22遇到 SpringBoot 3.3.0!
    工程|JOSHLONG|0条评论Java22发布快乐!Java22是一个重大的进步,是一个值得升级版本。有一些重大的最终发布功能,如ProjectPanama及一系列更优秀的预览功能。我不可能覆盖它们全部,但我确实想谈谈我最喜爱的一些。我们将会涉及到许多功能。如果你想在家里跟着做,代码在这......
  • 一文弄懂Javascript中的深拷贝和浅拷贝
    目录一文弄懂Javascript深拷贝与浅拷贝1Javascript数据存储规则2浅拷贝3部分深拷贝3.1Object.assign3.2slice()3.3concat()3.4拓展运算符4完全深拷贝4.1_.cloneDeep()4.2结构化拷贝4.3json.stringify()4.4循环递归4.5jQuery.extend()5总结一文弄懂J......
  • 按功能划分的常用Java库
    日志打印使用slf4j作为日志门面API,常用的日志实现库为log4j和logback。<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version></dependency><!--使用logback作为底层日志实现框架,需要在......
  • Java中的继承、重载与重写:概念、区别与实例演示(day7)
    Java的继承、重载以及重写java的继承:java的重载java的重写:在这个例子中:Animal类是父类,它有一个makeSound方法和两个重载的eat方法。Dog类是子类,它继承了Animal类,并重写了makeSound方法,使其具有不同的行为。此外,Dog类还重载了eat方法,但这次重载的方法......