首页 > 数据库 >mysql读写分离

mysql读写分离

时间:2023-12-25 10:04:23浏览次数:47  
标签:数据库 分离 lua proxy mysql 操作 读写

一、简介

MySQL读写分离是一种通过将数据库的读操作和写操作分配到不同的数据库服务器上来提高数据库性能和可扩展性的技术。这种架构的目标是通过分担数据库服务器的负载,提高系统的响应速度和可用性。下面是MySQL读写分离的一些基本概念和原理:

  1. 读写分离概念
    • 读操作:通常比写操作更频繁,而且读取数据不会改变数据库的状态。因此,可以将读操作分配到一个或多个只负责处理读请求的数据库服务器上,从而提高并发性能。
    • 写操作:写操作通常涉及到数据的修改,因此相对较慢。将写操作集中在一个数据库服务器上,确保数据的一致性。
  2. 架构组成
    • 主数据库(写操作):负责处理写操作,保持数据的一致性。
    • 从数据库(读操作):负责处理读操作,从主数据库同步数据,并提供读取服务。
  3. 数据同步机制
    • 主从复制(Master-Slave Replication):主数据库将写操作的变更记录发送到从数据库,从数据库按照相同的顺序应用这些变更,保持数据一致性。
    • 二进制日志(Binary Log):主数据库记录所有对数据的修改操作,从数据库通过读取主数据库的二进制日志来实现数据同步。
  4. 读写分离的优势
    • 提高性能:通过将读操作分散到多个从数据库,提高了数据库的读取性能。
    • 提高可用性:当主数据库发生故障时,从数据库仍然可以提供读取服务,提高了系统的可用性。
    • 降低主服务器压力:主数据库只需处理写操作,减轻了主服务器的负担,提高了系统的稳定性。
  5. 注意事项
    • 数据同步延迟:由于同步过程存在一定的延迟,因此在读取数据时需要考虑数据同步的时间差。
    • 主从切换:在主数据库发生故障时,需要手动或自动切换到一个备用主数据库。

二、操作步骤

2.1 环境准备

操作系统:centos7 准备

#安装jdk
https://www.oracle.com/cn/java/technologies/downloads/
rpm -ivh jdk-19_linux-x64_bin.rpm

2.2 部署mysql-proxy

#下载地址
https://downloads.mysql.com/archives/proxy/
#创建目录
mkdir /usr/local/mysql
#解压下载好的tar包到/usr/local/mysql
tar -zxf mysql-proxy.xxx.tar.gz -O /usr/local/mysql
#更改/etc/mysql-proxy.cnf
vim /etc/mysql-proxy.cnf 
[mysql-proxy]
user=root #运行mysql-proxy用户
admin-username=proxy #主从mysql共有的用户
admin-password=123.com #用户的密码
proxy-address=192.168.0.204:4000 #mysql-proxy运行ip和端口,不加端口,默认4040
#一般情况下读多写少
proxy-read-only-backend-addresses=192.168.0.203 #指定后端从slave读取数据
proxy-backend-addresses=192.168.0.202 #指定后端主master写入数据
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理脚本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置
log-level=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
daemon=true    #以守护进程方式运行
keepalive=true #mysql-proxy崩溃时,尝试重启

按Esc后:wq保存退出
#授权
chmod 660 /etc/mysql-porxy.cnf
#配置读写
vi /usr/local/mysql-proxy/lua/rw-splitting.lua
...
if not proxy.global.config.rwsplit then
 proxy.global.config.rwsplit = {
  min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
  max_idle_connections = 1, #默认8,改为1
 }
...
按Esc后:wq保存退出
#启用读写分离
mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
3、创建用户
create user 'proxy'@'mysql-proxyIP' IDENTIFIED BY 'proxy';
4、授权用户
grant all on *.* to 'proxy'@'mysql-proxyIP';
alter USER 'proxy'@'mysql-proxyIP' IDENTIFIED WITH mysql_native_password BY 'proxy';
测试:mysql -h {mysql-proxyIP} -u proxy -P {mysql-proxyPORT} -p

标签:数据库,分离,lua,proxy,mysql,操作,读写
From: https://blog.51cto.com/u_14871454/8963547

相关文章

  • MySQL常用服务器状态命令(运维)
    查询当前服务器运行的进程方式一:查询正在运行的所有MySQL进程,包括进程ID、用户、主机、当前数据库、命令、时间等信息。showprocesslist;方式二:可以查询正在运行的所有MySQL进程,包括进程ID、用户、主机、当前数据库、命令、时间等信息,并且可以添加筛选条件及排序方式。s......
  • MySQL导入导出 —— mysqldump 简介及常见用法
    一、导出导出用户需要有导出对象的权限,例如导出表要有select权限、导出视图要有showview权限、导出触发器要有trigger权限、需要锁表时要有locktables权限等。如果dump文件中包含了GTID信息,则无法导入到未启用GTID的数据库(低于5.6.9版本的数据库不支持GTID,因此也无法导入到这......
  • mysql集群模式分析
    集群的好处高可用性:故障检测及迁移,多节点备份。可伸缩性:新增数据库节点便利,方便扩容。负载均衡:切换某服务访问某节点,分摊单个节点的数据库压力。集群要考虑的风险网络分裂:群集还可能由于网络故障而拆分为多个部分,每部分内的节点相互连接,但各部分之间的节点失去连接。脑裂......
  • Debian 安装 Mysql
    参考地址:https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/1.下载aptRepohttps://dev.mysql.com/downloads/repo/apt/2.安装MysqlAptRepodpkg-imysql-apt-config_0.8.29-1_all.deb3.更新存储库包信息apt-getupdate4.安装Mysqlapt-get-yinstallmysql-s......
  • Linux 启动MySQL 报错:Status:“Server shutdown complete“ Error:13(权限不够)
    Status:“Servershutdowncomplete”Error:13(权限不够)我在银河麒麟V10系统中安装启动MySQL出现的一个错误:“Servershutdowncomplete”Error:13(权限不够),我在其他系统中没有遇到到。问题背景在国产化系统银河麒麟V10上尝试启动MySQL服务器时,可能会收到如下错误信息:Status:"Ser......
  • 【flink番外篇】4、flink的sink(内置、mysql、kafka、redis、clickhouse、分布式缓存、
    文章目录Flink系列文章一、maven依赖二、Jdbc/mysql示例1、maven依赖2、实现1)、userbean2)、内部匿名类实现3)、lambda实现4)、普通继承RichSinkFunction实现5)、完整代码3、验证本文介绍了Flink将数据sink到mysql中,其实是通过jdbc来将数据sink到rmdb中,mysql是一个常见的数据库,故......
  • MySQL核心技术原理之:MyISAM存储引擎
    作者:禅与计算机程序设计艺术1.背景介绍MyISAM是MySQL默认使用的存储引擎。它是一个高性能的静态表存储引擎,它保存了表结构信息及数据索引,适合于执行大量的静态SELECT操作。但是其不支持事物(transaction)、外键约束(foreignkeyconstraints)、FULLTEXT索引等特性。因此,对于需要使用这......
  • Redis 分片集群搭建并使用 RedisTemplate 实现读写分离
    上篇博客介绍了Redis哨兵集群的搭建,虽然已经解决了master在宕机后,与slave之间会自动切换的问题,但是其承载的数据量天花板仍然是单机的最大内存容量,无法承载更多的数据量。本篇博客介绍Redis分片集群的搭建,集群内部拥有多个master节点,每个master存放的数据不一样,从而......
  • mysql 判断字符串结尾
    mysql判断字符串结尾CREATETABLE`tbl_str`(`id`INTDEFAULTNULL,`Str`VARCHAR(30)DEFAULTNULL)INSERTINTO`mytest`.`tbl_str`(`id`,`Str`)VALUES('1','helloworld'),('2','mysqlstring'),('3','......
  • mysql 表注释查询
    驼峰函数CREATEFUNCTION`underlineToCamel`(paramStringVARCHAR(200))RETURNSvarchar(200)CHARSETutf8DETERMINISTICbeginsetparamString=LOWER(paramString);setparamString=replace(paramString,'_a'......