当前位置: 首页 > news >正文

mysql的主从创建及mycat的安装

目录

1.为何搭建mysql的主从关系

2.如何搭建mysql的主从关系

2.1 复制概述

2.2 复制原理

2.3 复制优势

2.4 搭建步骤

2.4.1 master(主节点)

 2.4.2 slave(从节点)

3.mycat的安装

3.1 为何安装mycat

3.2 安装mycat的步骤

3.2.1 安装软件

3.2.2 修改配置文件

3.2.3 启动程序

3.2.4 登录

4.测试

4.1 创建一个springboot项目

4.2 实体类

4.3 dao层

4.4 配置

4.5 pom

4.6 测试类

5.解决主从(主添从查)不成功问题


1.为何搭建mysql的主从关系

        解决mysql高并发的瓶颈

2.如何搭建mysql的主从关系

2.1 复制概述

        复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

        MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。

2.2 复制原理

MySQL 的主从复制原理如下 :

从上层来看,复制分成三步:

(1)Master 主库在事务提交时,会把数据变更作为事件Events 记录在二进制日志文件 Binlog 中。

(2)主库推送二进制日志文件 Binlog 中的日志事件到从库的中继日志 Relay Log 。

(3)slave重做中继日志中的事件,将改变反映它自己的数据。

2.3 复制优势

MySQL 复制的优点主要包含以下三个方面:

(1)主库出现问题,可以快速切换到从库提供服务。

(2)可以在从库上执行查询操作,从主库中更新,实现读写分离,降低主库的访问压力。

(3)可以在从库中执行备份,以避免备份期间影响主库的服务。

注意:mysql允许远程连接

2.4 搭建步骤

使用之前先进行虚拟机的克隆(这样的话可以不用再次下载mysql)

 因为克隆的虚拟机两者ip地址一致,使用命令进行ip更改

vi /etc/sysconfig/network-scripts/ifcfg-ens33

如何查看是否有mysql

注意:-u后边对应的是账号,-p对应的密码

mysql -uroot -p123456

如何启动mysql

systemctl start mysqld

2.4.1 master(主节点)

1) 在master 的配置文件(/etc/my.cnf)中,配置如下内容:

#mysql 服务ID,保证整个集群环境中唯一
server-id=1

#mysql binlog 日志的存储路径和文件名
log-bin=/var/lib/mysql/mysqlbin

#错误日志,默认已经开启
#log-err

#mysql的安装目录
#basedir

#mysql的临时目录
#tmpdir

#mysql的数据存放目录
#datadir

#是否只读,1 代表只读, 0 代表读写
read-only=0

#忽略的数据, 指不需要同步的数据库
binlog-ignore-db=mysql

#指定同步的数据库
#binlog-do-db=db01

2) 执行完毕之后,需要重启Mysql:

 systemctl restart mysqld

3) 查看master状态:

show master status;

字段含义:

File : 从哪个日志文件开始推送日志文件 给从节点
Position : 从哪个位置开始推送日志  从什么位置开始同步
Binlog_Ignore_DB : 指定不需要同步的数据库 

 2.4.2 slave(从节点)

1) 在 slave 端配置文件中,配置如下内容:

#mysql服务端ID,唯一
server-id=2

#指定binlog日志
log-bin=/var/lib/mysql/mysqlbin

2) 执行完毕之后,需要重启Mysql:

systemctl restart mysqld

3) 执行如下指令 :slaveof ip port

注意:master_password对应的是主节点连接数据库的密码;master_log_file,master_log_pos,要跟主节点查询到的master数据一致

change master to master_host= '192.168.227.175', master_user='root', master_password='123456', master_log_file='mysqlbin.000001', master_log_pos=154; 

指定当前从库对应的主库的IP地址,用户名,密码,从哪个日志文件开始的那个位置开始同步推送日志。

4) 开启同步操作

start slave;

show slave status\G;

对应查询结果:

进入mysql的方法:

mysql -uroot -p123456

5) 解决问题

The slave I/O thread stops because master and slave have equal MySQL server UUIDs;_被取名逼疯的男人的博客-CSDN博客

exit退出两个节点,找解决的办法:

停止同步操作语法:

stop slave;

 注意:关闭主节点,从节点不会受影响,从可以进行任何操作,注意id可能在之后会重复的问题。

3.mycat的安装

3.1 为何安装mycat

为了减轻数据库的压力,主只负责添,从负责查

3.2 安装mycat的步骤

3.2.1 安装软件

将安装包放进/usr/local里面,进行解压:

tar -zxvf 压缩文件 文件名

3.2.2 修改配置文件

主要是修改如下3个配置文件

①schema.xml:定义逻辑库,表、分片节点等内容

②rule.xml:定义分片规则

③server.xml:定义用户以及系统相关变量,如端口等

修改配置文件server.xml

<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <user name="mycat">
        <property name="password">123456</property>
        <property name="schemas">testdb</property>
    </user>

</mycat:server>

修改schema.xml

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

    <!--配置逻辑库 name:表示逻辑库的名称 dataNode:管理的节点名称-->
    <schema name="testdb" checkSQLschema="true" sqlMaxLimit="1000" dataNode="dn1"></schema>
    
    <!--dataNode表示定义数据节点的标签 name:节点名称 dataHost数据的主机名称 database表示真实数据库的名称-->
    <dataNode name="dn1" dataHost="localhost1" database="maincong" />
    <!--定义真实服务所在的地址 name表示名称-->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <!--按照心跳机制来判断真实的数据库是否正确运行-->
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.227.175:3306" user="root" password="123456">
            <readHost host="hostS1" url="192.168.227.176:3306" user="root" password="123456"></readHost>
        </writeHost>
        <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
    </dataHost>
</mycat:schema>

这里的testdb是我们mysql中的数据库名称

主要分schema、dataNode、dataHost三个主要配置。

3.2.3 启动程序

1、 控制台启动 :去 mycat/bin 目录下执行 ./mycat console

2 、后台启动 :去 mycat/bin 目录下 ./mycat start

为了能第一时间看到启动日志,方便定位问题,我们选择1控制台启动。

3.2.4 登录

此登录方式用于通过 Mycat 查询数据,我们选择这种方式访问 Mycat

mysql -umycat -p123456 -P 8066 -h 192.168.227.177

4.测试

注意:要将虚拟机的防火墙关闭或通过mycat接口

4.1 创建一个springboot项目

4.2 实体类

@Data
@TableName(value = "t_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;

    private String name;
}

4.3 dao层

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

4.4 配置

server.port=8080

#testdb数据源 192.168.227.177:8806  mycat接口默认为8066
spring.datasource.url=jdbc:mysql://192.168.227.177:8066/testdb?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8
spring.datasource.password=123456
spring.datasource.username=mycat
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

4.5 pom

注意此处的mysql版本不应该过高

<groupId>com.qy151wd.maincong</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <!--改mysql的版本-->
        <mysql.version>5.1.4</mysql.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
    </dependencies>

4.6 测试类

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    void contextLoads() {
        User user = userMapper.selectById(1);
        System.out.println(user);
    }
    @Test
    void contextLoads02() {
        User user=new User();
        user.setName("hhhh");
        userMapper.insert(user);
    }


}

5.解决主从(主添从查)不成功问题

上述配置文件schema.xml文件中的参数需要注意,balance和switchType

 

 

 

相关文章:

  • OSS存储开放接口规范 和 错误响应
  • 悲观锁、乐观锁和自旋锁
  • RTL8720CM WI-FI+蓝牙,低功耗IoT(物联网)应用 40QFN
  • 程序设计竞赛-过了这个村没这个店
  • C语言实现基于高效率IP路由查找的内容
  • 南大通用GBase8s 常用SQL语句(263)
  • Bootstrap Table 实现 分页选中
  • 嵌入式系统开发笔记89:认识AVR微控制器系统架构
  • GeoPandas安装
  • View-of-Delft数据集文件学习
  • 西门子PLC S7-1200如何实现远程上下载?
  • MySQL的SQL基础(五)
  • 图书巨头BakerTaylor遭勒索软件攻击 系统中断一周仍未恢复
  • 项目实战第三十六讲:基于 Sharding-JDBC 的商品分库⽅案
  • MySQL(进阶篇--InnoDB引擎)
  • 【comparator, comparable】小总结
  • JavaScript类型识别
  • 编写高质量JavaScript代码之并发
  • 初探 Vue 生命周期和钩子函数
  • 动态魔术使用DBMS_SQL
  • 高性能JavaScript阅读简记(三)
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 实现菜单下拉伸展折叠效果demo
  • 首页查询功能的一次实现过程
  • 我与Jetbrains的这些年
  • raise 与 raise ... from 的区别
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​queue --- 一个同步的队列类​
  • ​如何防止网络攻击?
  • # 计算机视觉入门
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (javascript)再说document.body.scrollTop的使用问题
  • (八)Flask之app.route装饰器函数的参数
  • (二)fiber的基本认识
  • (汇总)os模块以及shutil模块对文件的操作
  • (一) storm的集群安装与配置
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (已解决)什么是vue导航守卫
  • (源码分析)springsecurity认证授权
  • .gitignore文件_Git:.gitignore
  • .mysql secret在哪_MySQL如何使用索引
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 使用配置文件
  • .NetCore项目nginx发布
  • .NET开源纪元:穿越封闭的迷雾,拥抱开放的星辰
  • /3GB和/USERVA开关
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @Value读取properties中文乱码解决方案