首页 > 数据库 >Mysql主从复制(一主一从)+Mycat(windows-1.X版本)实现读写分离

Mysql主从复制(一主一从)+Mycat(windows-1.X版本)实现读写分离

时间:2023-08-31 17:44:07浏览次数:49  
标签:主从复制 windows 主机 数据库 配置 mycat Master mysql Mycat

项目中,如果数据量大的情况下,可以使用【数据库主从复制+读写分离】的方式优化,其他方式也很多,这里只记录下这种方式

一、说明

1.需要的环境等:

序号 环境 说明
1 mysql5.7服务器 两台数据库服务器,一台作为主数据库,一台作为从数据库
2 jdk 安装mycat的时候会用到jdk
3 mycat windows/linux版本都可以,我测试用的是windows版本
4 数据库管理工具 我用的navicat,方便测试数据

二、搭建一主一从

1.安装mysql+jdk1.8

直接略过,具体安装方式,可以查看我的博客:

linux系统安装jdk1.8、mysql5.7、redis(压缩包版本教程)

2.主数据库配置

注意:数据库如果是windows系统安装的,需要在安装目录的my.ini这个文件配置
修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

vi /etc/mysql/mysql.conf.d/mysqld.cnf

具体配置如下:

# 主机配置-主机配置
# 主服务唯一ID
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 设置需要复制的数据库(这里可以不设置)
binlog-do-db=需要复制的主数据库名字
# 设置 logbin 格式
binlog_format=STATEMENT

binlog日志三种格式

  • STATEMENT
  • ROW
  • MIXED

3.从数据库配置

注意:数据库如果是windows系统安装的,需要在安装目录的my.ini这个文件配置
修改配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf

vi /etc/mysql/mysql.conf.d/mysqld.cnf

具体配置如下:

# 主机配置-从机配置
# 从服务器唯一ID
server-id=2
# 启用中继日志
relay-log=mysql-relay

4.注意事项及其他配置

  • 主机、从机配置好后需要重启MySQL 服务
# 查看启动状态
systemctl status mysql.service
# 停止MySQL服务
systemctl stop mysql.service
# 启动MySQL服务
systemctl start mysql.service
# 重启MySQL服务
systemctl restart mysql.service
  • 主机、从机需要关闭防火墙
# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙
systemctl stop firewalld
# 开启防火墙
systemctl start firewalld
  • 在主机上建立账户并授权 slave
# 登录MySQL
mysql -uroot -p123456
# 切换数据库
use mysql;
#在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
#123456改成自己的数据库密码
  • 登录主机,查询master的状态
mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000001 |      430 | testdb       | mysql,information_schema |                   |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

记录 FilePosition的值。
**执行完次步骤后不要再操作主服务器MySQL,防止主服务器状态值发生变化**

  • 登录从机,配置需要复制的主机,把上一步的两个记录值填写上
CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_PORT=3306,
MASTER_USER='主数据库的用户名',
MASTER_PASSWORD='主数据库的密码',
MASTER_LOG_FILE='mysql-bin.000013',MASTER_LOG_POS=154;
  • 启动从服务器复制功能
start slave;
  • 如果该服务配置过主从复制,则需要先进行重置
# 停止从服务复制功能
stop slave;
# 重新配置
reset master;
#查看从服务器状态
show slave status\G;
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.110.146
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 430
               Relay_Log_File: mysql-relay.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 430
              Relay_Log_Space: 523
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
                  Master_UUID: 41b59ebe-ea5d-11ec-9dd9-000c2930ff90
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

ERROR: 
No query specified

Slave_IO_Running Slave_SQL_Running都为Yes,则说明主从配置成功

5.验证

  1. 登录主数据库
mysql -uroot -p123456
#创建数据库
create database testdb;
#创建表
use testdb;
create table test_table(id int, name varchar(255));
#插入数据
insert into test_table values (1, 'Micromaple');
#查询数据
select * from test_table;
  1. 正常情况下:在主数据库创建一个数据库,从数据库就有一个相同的数据库,主数据库创建一张表,从数据库也有相同的一张表,主数据库增删改,从数据库也跟着增删改

6.安装mycat

6.1 下载地址:mycat下载地址

image
找一个windows-1.x版本的下载即可
下载完成后解压
image

6.2 配置windows环境变量

  • 新增系统变量 MYCAT_HOME,配置mycat根目录
    image

  • 修改Path变量,新增
    %MYCAT_HOME%\bin
    image

修改配置文件 -->mycat–>conf

6.3 修改wrapper.conf文件,配置jdk环境

image

6.4 修改server.xml文件

image
这里的root和123456就是登陆mycat的用户和密码

6.5 修改schema.xml文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	</schema>

	<dataNode name="dn1" dataHost="localhost1" database="testdb" />

	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="主数据库ip地址:3306" user="主数据库用户名"
				   password="主数据库密码">
				   <readHost host="hostS1" url="从数据库ip地址:3306" user="从数据库用户名" password="从数据库密码" />
		</writeHost>
	</dataHost>
</mycat:schema>
  • balance(负载均衡)类型目前有4种:
  1. balance="0":不开启读写分离机制,所有读操作都发送到当前可用的 writeHost上
  2. balance="1":全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从 模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2 都参与select语句的负载均衡。
  3. balance="2":所有读操作都随机的在writeHost、readhost 上分发。
  4. balance="3":所有读请求随机的分发到readhost执行,writerHost不负担读压力。
    为了能看到效果,把BALANCE设置成1,会在两个主机之间切换查询。

6.6 启动mycat

  • 安装完jdk和mysql后,进入mycat解压目录下的bin目录(如果未配置环境变量):
    E:\environment\mycat\bin
  • 在打开的cmd命令行窗口中,执行如下命令安装mycat(注意需要管理员账户登录,如果不是请使用管理员身份运行cmd打开命令行窗口):
#安装服务
mycat.bat install
#启动mycat服务
mycat.bat start
#查看mycat的运行状态:
mycat.bat status
#停止mycat服务
mycat.bat stop
#重启服务
mycat.bat restart

image

6.7 测试连接

  • 启动成功后,使用navicat连接mycat,新建一个mysql连接如下图:连接成功,其中8066端口是mycat的默认端口
  • 账户:root
  • 密码:123456
  • 端口:8066
  • ip地址:输入安装mycat的服务器的ip地址
    image

6.8 验证配置

  • 在主数据库插入数据带系统变量数据,造成主从数据不一致,方便查看效果
insert into test_table values(1, @@hostname)

@@hostname:主机名称

  • 如果主机和从机名称一样可以修改主机名称,让主从插入数据不一致
hostnamectl set-hostname mysql-master
  • 远程登录Mycat
mysql -umycat -p123456 -h192.168.110.145 -P8066

ip换成自己的

  • 切换数据库
use TESTDB
  • 执行查询语句,观察是否随机切换查询
select * from test_table;

image

发现查询时,已经是两个数据库之间随机切换了,说明mycat已经配置成功了,后续如果想具体实现读写分离,只需要修改配置文件即可,具体怎么配置,后续持续学习中,到时候会在这里记录

--2023-08-31 17:35:26 星期四

标签:主从复制,windows,主机,数据库,配置,mycat,Master,mysql,Mycat
From: https://www.cnblogs.com/xiaoguo-java/p/17670109.html

相关文章

  • svchost.exe占用内存过高--(windows update检查更新时一直处于正在检查)
    1.打开任务管理器-进程,找到svchost对应占用内存过高对应PID值例如:60982.打开任务管理器-服务,查找PID为6098的服务,如果是windowsupdate引起的则操作以下步骤 1)右击windowsupdate-属性设为停止 2)C:\windows\softwaredistribution删除里面......
  • 使Windows11支持同时多个用户远程桌面连接(RDP)
    参考:https://www.wyr.me/post/701一、配置远程桌面服务更改限制连接的数量将用户限制到单独的远程桌面服务会话(可选)二、为termsrv.dll增加修改权限C:\Windows\System32\termsrv.dll详情请参考:https://www.wyr.me/post/701三、停止RemoteDesktopServices服务打开......
  • 使用第三方RDP(远程桌面)客户端远程连接Windows10/11
    一、打开「编辑组策略」并定位  二、指定RDP为安全层三、禁用「要求使用网络级别的身份验证……」......
  • windows10创建conda环境失败:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <htt
    问题描述创建新环境时,报错,创建不成功Collectingpackagemetadata(current_repodata.json):doneSolvingenvironment:doneCondaHTTPError:HTTP000CONNECTIONFAILEDforurl<https://conda.anaconda.org/conda-forge/linux-64/current_repodata.json>Elapsed:-AnHTTP......
  • windows 批处理 检查并启动 windows 服务
    windows批处理检查并启动windows服务 setsrvname="YSWindowsService"scquery|find%srvname%&&echoitsok||netstart%srvname% 这段批处理意思,如果服务已启动,显示itsok。没启动,则启动服务.srvname是windows服务名,根据你的情况修改。......
  • 远程连接阿里云服务器的几种方式(包括Windows和linux系统)
    远程连接阿里云服务器的几种方式(包括Windows和linux系统)_远程登录阿里云_库博客的博客-CSDN博客远程连接Windows系统阿里云服务器:1、workbench远程连接方式点击“立即登陆”,然后输入Administrator用户的密码,即可登录云服务器。2、VNC连接方式输入远程连接密码后,按照提示......
  • PyQt/PySide's qwindows.dll qwindowsvistastyle.dll is corrupted by UPX
    Windows1064-bitsPython3.8.1064-bitsPySide25.15.2PyInstaller4.3UPX4.1.0itraises:"ThisapplicationfailedtostartbecausenoQtplatformplugincouldbeinitialize"Solutioninspecfiles,addupx_exclude=['qwindows.dll'......
  • windows本地部署AI实现无限对话
    前言:最低显卡配置2G本都部署步骤:一、安装服务模型1、下载地址github地址:https://github.com/josStorer/RWKV-Runner视频教程:https://www.bilibili.com/video/BV1hM4y1v76R/?vd_source=2d24c0d12aefeea933bdc676f039cab62、选择下载版本 3、......
  • 搭建JMeter 5.0 + InfluxDB + Grafana 性能测试监控平台(Windows平台)
    前言JMeter往往需要执行完之后拼凑完测试报告,才能看到结果。命令行里的内容也不够详细。那么如何在执行过程中实时监控执行效果呢?使用InfluxDB+Grafana 这个组合可以解决我们的痛点,那就是性能测试过程中的不透明。InfluxDB和Grafana是什么InfluxDB是一种时序数据库,用来存放......
  • 使用samba创建共享文件夹(Linux - Windows)
    1.安装samba有些Linux已经自带了samba$sudoaptinstallsamba-y2.配置防火墙详情请参考https://zhuanlan.zhihu.com/p/508580900,因本人使用的是MX23,不是很会设置,且无其它安全需求,故直接关闭防火墙3.配置samba$sudovim/etc/samba/smb.conf#按个人需要可以备份......