MyCat2数据中间件应用

mysql主从配置与自动切换

环境准备

  1. 三台虚拟机192.168.2.5(mycat)、192.168.2.6(mysql1)、192.168.2.7(mysql2)
  2. jdk8
  3. mysql版本:mysql-8.0.20-linux-glibc2.12-x86_64.tar
  4. mycat版本:mycat2-1.11-05.tar.gz 下载地址:http://dl.mycat.org.cn/2.0/

数据库安装配置

  1. 关闭防火墙

    systemctl stop firewalld
    
    systemctl status firewalld
    
  2. 禁用防火墙(系统启动时不启动防火墙服务)

    systemctl disable firewalld
    
    systemctl is-enabled firewalld
    
  3. 解压

    tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64
    
  4. 重命名

    mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql8
    
  5. 移动

    mv mysql8 /usr/local
    
  6. 访问

    cd /usr/local/mysql8
    
  7. 创建mysql数据储存文件

    mkdir data
    
  8. 创建mysql用户组和mysql用户

    groupadd mysql
    useradd -g mysql mysql
    
  9. 改变msql8目录权限

    chown -R mysql.mysql /usr/local/mysql8/
    
  10. 初始化数据库

注意 lower-case-table-names =1 不区分大小写 在mysql8.x中只能在初始化时修改,安装完成后不能修改

bin/mysqld --initialize --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql8 --datadir=/usr/local/mysql8/data
  1. 记录初始密码

     A temporary password is generated for root@localhost: dvBbQz=yu8mP
    
  2. 修改配置 vi /etc/my.cnf

    最简配置

    [client]
    port=3306
    socket=/tmp/mysql8/mysql.sock[mysqld]
    port=3306
    user=mysql
    socket=/tmp/mysql8/mysql.sock
    basedir=/usr/local/mysql8
    datadir=/usr/local/mysql8/data
    

    优化配置

    在var/log中创建并赋权mysql日志文件夹、创建tmpdir文件夹并赋权

    mkdir /var/log/mysql8
    chown -R mysql.mysql /var/log/mysql8
    touch /var/log/mysql8/mariadb.log
    chown -R mysql.mysql /var/log/mysql8/mariadb.log
    chmod 777 /var/log/mysql8/mariadb.logmkdir /var/log/mysql8/run
    chown -R mysql.mysql /var/log/mysql8/runmkdir /tmp/mysql8
    chown -R mysql.mysql /tmp/mysql8
    

    注意 innodb_log_file_size-日志大小可根据实际磁盘大小配置、

    innodb_buffer_pool_size=251M-设置buffer pool size,一般为服务器内存60%

    [mysqld_safe] log-error=/var/log/mysql8/mariadb.log pid-file=/var/log/mysql8/run/mysqld.pid [client] socket=/tmp/mysql8/mysql.sockdefault-character-set=utf8 [mysqld] port=3306 user=mysql basedir=/usr/local/mysql8tmpdir=/tmp/mysql8/tmp datadir=/usr/local/mysql8/datasocket=/tmp/mysql8/mysql.sock # 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password # 创建新表时将使用的默认存储引擎default-storage-engine=INNODB#设置页大小 innodb_page_size=16384 #关闭ssl ssl=0 lower_case_table_names = 1#设置最大连接数 max_connections=2000 #设置会话请求缓存个数back_log=2048   #关闭性能模式performance_schema=OFF  max_prepared_stmt_count=128000 #服务器或客户端之间进行传输大小max_allowed_packet=128M#file #设置每个表一个文件innodb_file_per_table  #设置logfile大小 1500Minnodb_log_file_size=150M #设置logfile组个数 innodb_log_files_in_group=32 #设置最大打开表个数 innodb_open_files=4000#buffers #设置buffer pool size,一般为服务器内存60%innodb_buffer_pool_size=251M  #设置buffer pool instance个数,提高并发能力 innodb_buffer_pool_instances=16 #设置log buffer size大小 innodb_log_buffer_size=64M#tune #设置每次sync_binlog事务提交刷盘 sync_binlog=1 #每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去innodb_flush_log_at_trx_commit=1  #开启异步IOinnodb_use_native_aio=1  #设置spin_wait_delay 参数,防止进入系统自旋 innodb_spin_wait_delay=180 #设置spin_loops 循环次数,防止进入系统自旋 innodb_sync_spin_loops=25  #设置innodb数据文件及redo log的打开、刷写模式 innodb_flush_method=O_DIRECT # 设置innodb 后台线程每秒最大iops上限 innodb_io_capacity=20000 #设置压力下innodb 后台线程每秒最大iops上限 innodb_io_capacity_max=40000 #设置page cleaner线程每次刷脏页的数量 innodb_lru_scan_depth=9000 #设置将脏数据写入到磁盘的线程数 innodb_page_cleaners=16  #perf special #检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新,SSD关闭该功能innodb_flush_neighbors=0  #设置写线程数innodb_write_io_threads=16  #设置读线程数 innodb_read_io_threads=16 #设置回收已经使用并分配的undo页线程数 innodb_purge_threads=32  sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO,STRICT_ALL_TABLES
    
  3. 在tmp中创建mysql8文件夹 并赋权

    mkdir /tmp/mysql8/tmp
    chown -R mysql:mysql /tmp/mysql8/tmp
    
  4. 拷贝mysql启动文件到系统初始化目录

     cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysqld
    
  5. 启动mysql 服务器

    service mysqld start
    
  6. 连接mysql

    /usr/local/mysql8/bin/mysql -u root -p
    
  7. 登录不了 进行修改root密码

    修改配置文件免密码登录

    mysql vim /etc/my.cnf
    
     # 在 [mysqld]最后加上如下语句skip-grant-tables
    
  8. 重启mysql服务

    service mysqld restart
    
  9. 连接

    mysql /usr/local/mysql8/bin/mysql -u root -p
    
  10. 首先查看当前root用户相关信息,在mysql数据库的user表中

    use mysql;
    select host, user, authentication_string, plugin from user;
    
  11. 如果当前root用户authentication_string字段下有内容,先将其设置为空

    update user set authentication_string='' where user='root';
    
  12. 退出mysql, 删除/etc/my.cnf文件最后的 skip-grant-tables 重启mysql服务

  13. 使用root用户进行登录,因为上面设置了authentication_string为空,所以可以免密码登录

  14. 使用ALTER修改root用户密码

    ALTER user 'root'@'localhost' IDENTIFIED BY 'root';
    
  15. 修改root用户可以远程连接

    update mysql.user set host='%' where user='root';
    

数据库主从配置

  1. 安装好两个服务器的数据库后 修改主服务器配置

  2. 修改配置

    vim /etc/my.cnf
    
  3. 修改内容增加

    # 节点唯一id值
    server-id=1
    # 开启二进制日志
    log-bin=mysql-bin
    # 指定日志格式 有mixed|row|statement 推荐mixed
    binlog-format=mixed
    # 忽略mysql,information_schema库(可选配置)
    binlog-ignore-db = mysql,information_schema
    
  4. 重启服务 查看 master 的状态

 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200708164939927.png)
  1. 创建用于复制操作的用户

    CREATE USER 'repl'@'192.168.2.7' IDENTIFIED WITH mysql_native_password BY 'repl';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.2.7';
    flush privileges;
    
  2. 修改从服务器配置

  3. 修改配置

    vim /etc/my.cnf
    
  4. 修改内容增加

    # 节点唯一id值
    server-id=2
    # 开启二进制日志
    log-bin=mysql-bin
    # 指定日志格式 有mixed|row|statement 推荐mixed
    binlog-format=mixed
    
  5. 在从(Slave)节点上设置主节点参数

    CHANGE MASTER TO MASTER_HOST='192.168.2.6', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=856;
    
  6. 查看主从同步状态

    show slave status\G;
    
  7. 开启主从同步

    start slave;
    
  8. 再查看主从同步状态

    show slave status\G;
    
  9. 若I/O任务启动失败

    从机的server_id改成2

    set global server_id=2; #此处的数值和my.cnf里设置的一样就行

  10. 若出现错误 mysql-bin.000001’:

    1. the first event ‘mysql-bin.000001’ at 98, the last eventread from ‘.\mysql-bin.000001’ at 98, the last byte read from ‘.\mysql-bin.000001’ at 117.
    2. Slave_IO_Running: NO 或 Slave_SQL_Running: NO

    解决

    先进入slave中执行:"stop slave ;"来停止从库同步;

    再去master中执行:"flush logs;"来清空日志;

    然后在master中执行:"show master status;"查看下主库的状态,主要是日志的文件和position;

    然后回到slave中,执行:“CHANGE MASTER TO MASTER_LOG_FILE=‘查看到的日志文件’,MASTER_LOG_POS=查看到的position值;”,文件和位置对应master中的;

  11. 重新开启同步并查看状态

    start slave;
    show slave status\G;
    
  12. 测试主从

    在主创建数据库:

    CREATE DATABASE test;
    

    在从查看数据库:

    show databases;
    

Mycat2安装配置

  1. 下载并安装jdk8

    下载jdk-8u221-linux-x64.tar.gz,官网地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    解压:tar -zxvf jdk-8u221-linux-x64.tar.gz

    将解压后的文件夹移动到/usr/local目录下:mv jdk1.8.0_221 /usr/local/

    打开文件 vim /etc/profile,添加以下内容:

    export JAVA_HOME=/usr/local/jdk1.8.0_221
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib/dt.JAVA_HOME/lib/tools.jar:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:${PATH}
    

    重新加载配置文件

     source /etc/profile
    

    验证

    java -version
    
  2. 解压mycat2并运行

    tar -xvf mycat2-1.11-05.tar.gz
    cd mycat/bin./mycat start 启动
    ./mycat stop 停止
    ./mycat console 前台运行
    ./mycat install 添加到系统自动启动(暂未实现)
    ./mycat remove 取消随系统自动启动(暂未实现)
    ./mycat restart 重启服务
    ./mycat pause 暂停
    ./mycat status 查看启动状态
  3. 修改配置文件

    官方配置参考

    修改mycat.yml文件中

    读写分离,分配配置:

    schemas: [] 是读写分离,分配配置,默认无需修改,默认读写分离

    schemas.schemaName:‘配置逻辑库’

    数据库连接配置:

    datasources:[],配置需要连接的数据库

    集群配置:cluster []

    name: repli 和schemas的读写配置对应

    masters:主节点列表,普通主从,当主失去连接后,依次选择列表中存活的作为主节点

    replicas:从节点列表

  4. 连接测试

    适用navicat工具连接


测试

注意:mycay不存在创建库,创建表操作,需要主节点创建库(物理库)后在mycat配置文件中配置逻辑库,表同理,分库分表需额外配置。

  1. 创建库

    在主-数据库中创建 test1 配置mycat并重启

  2. 创建表

    在主-数据库中创建 test_table1 刷新mycat连接表

Mycat2管理与监控

Mycat2管理与监控相关配置

参考配置 配置9066管理端和7066监控信息列表

cd /usr/local/mycat2/mycat/conf
vim mycat.yml
# 增加以下配置
plug:
#此配置默认开启7066端口.并提供以下url供查询监控信息 http://127.0.0.1:7066/metricsextra: ["io.mycat.exporter.PrometheusExporter"]
manager:ip: 0.0.0.0port: 9066users: [{ip: '.', password: 'root', username: root}]
properties:
#此配置可以更改io.mycat.exporter.PrometheusExporter开启的端口prometheusPort: 7066

监控管理的命令

关闭连接
kill @@connection id1,id2...

id是mycat前端连接或者后端native连接的id(它们公用一个id生成器)

不能关闭jdbc连接,当关闭mycat前端连接的时候会自动关闭连接占用的jdbc连接

显示Mycat前端连接
show @@connection

ID 连接的标识符

USER_NAME 登录的用户名

HOST 客户端连接地址

SCHEMA 当前schema,与sql解析有关

AFFECTED_ROWS AFFECTED_ROWS

AUTOCOMMIT 是否自动提交

IN_TRANSACTION 是否处于事务状态

CHARSET 字符编码,一般是utf8

CHARSET_INDEX 对应mysql的字符编码序号

OPEN 连接是否打开

SERVER_CAPABILITIES 服务器能力数字

ISOLATION 事务隔离级别

LAST_ERROR_CODE 最后一次错误码

LAST_INSERT_ID 插入自增主键ID

LAST_MESSAGE 最后一次错误信息

PROCESS_STATE 请求处理状态,正在接收,正在处理,完成

WARNING_COUNT 警告数量

MYSQL_SESSION_ID 如果代理

TRANSACTION_TYPE 事务类型,XA,Proxy,Local

TRANSCATION_SNAPSHOT 事务管理器状态快照

CANCEL_FLAG 当前执行的任务是否已经被取消

显示native连接
show @@backend.native

显示mycat proxy native 连接的信息

SESSION_ID 连接ID,可被kill命令杀死

THREAD_NAME 所在线程名

DS_NAME数据源名字

LAST_MESSAGE 接收到的报文中的信息(错误信息)

MYCAT_SESSION_ID 如果有绑定前端连接,则显示它的ID

IS_IDLE 是否在连接池,即是否闲置

SELECT_LIMIT限制返回行数

IS_RESPONSE_FINISHED响应是否结束

RESPONSE_TYPE响应类型

IS_IN_TRANSACTION是否处于事务状态

IS_REQUEST_SUCCESS是否向后端数据库发起请求成功

IS_READ_ONLY是否处于readonly状态

显示数据源状态
show @@backend.datasource

显示配置中的数据源信息

显示心跳状态
show @@backend.heartbeat

显示配置中的心跳信息

显示可以使用的管理命令
show @@help
显示心跳中数据源实例中的状态

navite连接与jdbc连接使用相同的数据源配置,指向相同的服务器,那么它们的数据源实例只有一个

show @@backend.instance

NAME 数据源名字

ALIVE 是否存活

READABLE 是否可以选择为读节点

TYPE 数据源类型

SESSION_COUNT 当前连接数量

WEIGHT 负载均衡权重

MASTER是否主节点

HOST连接信息

PORT连接端口

LIMIT_SESSION_COUNT连接限制数量

REPLICA所在集群名字

显示逻辑库配置
show @@metadata.schema

显示配置中的逻辑库信息

显示逻辑表配置
show @@metadata.schema.table

显示配置中的逻辑表信息

显示reactor线程状态

reactor是mycat2的io线程,主要处理透传响应与接收报文,解析sql等任务

show @@reactor

THREAD_NAME线程名字

THREAD_ID 线程ID

CUR_SESSION_ID当前正在处理的前端,后端会话ID

BUFFER_POOL_SNAPSHOT 网络缓冲区池快照

LAST_ACTIVE_TIME 最近活跃时间

显示集群状态
show @@backend.replica

NAME 集群名字

SWITCH_TYPE 切换类型

MAX_REQUEST_COUNT 获取连接的时候尝试请求的次数

TYPE 集群类型

WRITE_DS 写节点列表

READ_DS 读节点列表

WRITE_L写节点负载均衡算法

READ_L读节点负载均衡算法

显示定时器状态
show @@schedule
显示sql统计信息
show @@stat

COMPILE_TIME 编译SQL的耗时

RBO_TIME 规则优化耗时

CBO_TIME 代价优化与生成执行器耗时

CONNECTION_POOL_TIME 连接池获取连接耗时

CONNECTION_QUERY_TIME 发起查询到获得响应耗时

EXECUTION_TIME 执行引擎耗时

TOTAL_TIME 查询总耗时

重置sql统计信息
reset @@stat
显示线程池状态
show @@threadPool

NAME 线程池名字

POOL_SIZE 线程最大数量

ACTIVE_COUNT 活跃线程数

TASK_QUEUE_SIZE 等待队列大小

COMPLETED_TASK 完成的任务数量

TOTAL_TASK 总任务数量

设置数据源实例状态
switch @@backend.instance = {name:'xxx' ,alive:'true' ,readable:'true'}

name是数据源名字

alive是数据源可用状态,值 true|false

readable是数据源可读状态,值 true|false

此命令供外部服务修改mycat里的数据源实例状态,可以以此支持多种集群服务

集群切换
switch @@backend.replica = {name:'xxx'}

name是数据源名字

手动触发集群切换

此命令供外部服务修改mycat里的数据源实例状态,可以以此支持多种集群服务

心跳开关
switch @@backend.heartbeat = {true|false}

当有心跳配置的时候,可以进心跳进行开启关闭

心跳会自动修改数据源实例的状态,关闭心跳可以自行通过上面的命令修改状态

此命令供外部服务修改mycat里的数据源实例状态,可以以此支持多种集群服务

显示心跳定时器是否正在运行
show @@backend.heartbeat.running
配置更新
reload @@config by file

修改本地的mycat.yml就可更新,支持更新metadata与jdbc数据源.请在低峰时段执行,配置更新停止IO请求,尽量选择没有事务的一刻进行更新,不保证配置前后一致性等问题

显示服务器信息
show @@server

MyCat2 mysql8 读写分离 主从自动切换相关推荐

  1. mycat定时向mysql存储数据_【实战演练】Linux操作系统20-MyCat实现Mysql数据库读写分离与自动切换...

    #本文欢迎转载,转载请注明出处和作者. 理论部分,详见:繁星亮与鲍包包:[理论研究]业务系统高可用及负载均衡​zhuanlan.zhihu.com 本篇主要实现"8.Mysql读写分离&qu ...

  2. k8s主从自动切换mysql_Kubernetes一键部署Mycat+Mysql主从集群

    Kubernetes一键部署一主一从,读写分离,自动切换的mycat+mysql架构,其中mycat配置文件.mysqsl数据文件的volume挂载未涉及,可根据实际情况进行修改.所有代码参照gith ...

  3. docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...

    一.MySQL读写分离主从模式 1. 下载镜像 docker pull mysql 当前最新版本:mysql Ver 8.0.19 for Linux on x86_64 (MySQL Communi ...

  4. rocketmq DLedger主从自动切换

    rocketmq DLedger主从自动切换 rocketmq从4.5开始,提供了故障自动切换功能,当主从集群中的master故障后,可自动从多个slave中选举出master,完成故障转移,不需要人 ...

  5. Linux企业化运维--(7)redis服务之redis配置及主从复制、主从自动切换、集群、redis+mysql、gearman实现数据同步

    Linux企业化运维 实验所用系统为Redhat-rhel7.6. 目录 Linux企业化运维 Linux企业化运维--(7)redis服务之redis配置及主从复制.主从自动切换.集群.redis+ ...

  6. redis的主从自动切换

    设置redis主从主要是在不同的主机上编辑配置文件 我们准备三台主机 分别是server1.server2.server3 redis的主从自动切换是基于sentinel(哨兵) 1.Redis 的 ...

  7. 双机高可用、负载均衡、MySQL(读写分离、主从自动切换)架构设计

    前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构. 架构简介 此架构主要是由ke ...

  8. php redis主从自动切换,Redis 集群的主从切换

    Redis 集群的主从切换不再使用 Sentinel 作为外置监控, 而是集群内部在主节点挂掉之后选举出一个从节点取代主节点, 处理相应的分片的数据请求. 当然前提条件是对应的主节点有至少一个可连通的 ...

  9. mysql读写分离主从原理、事务隔离级别及使用、锁表和锁行场景、乐观锁和悲观锁、lock锁和sychronized区别及使用自己学习之后总结和参考一些博客感觉系统了解了

    synchronized与Lock的区别 两者区别: 1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类: 2.synchronized无法判断是否获取锁的状态 ...

最新文章

  1. vlookup示例_VLOOKUP示例–如何在Excel中执行VLOOKUP
  2. Cylinder3D :3D环境下的Lidar 点云分割
  3. 长沙网络推广浅析影响网站快照更新时间的因素是什么?
  4. Ribbon_窗体_实现Ribbon风格的窗体
  5. Qt Creator使用自定义着色器
  6. python发送邮件 退回_python 发送邮件(收到的邮件要有发送方才能回复)
  7. 单体、分布式、微服务、Serverless软件架构一览
  8. 咕泡-模板方法 template method 设计模式笔记
  9. 九章基础算法02:栈和队列
  10. unity Console窗口的输出
  11. java研磨设计模式_研磨设计模式之单例模式(内部类)
  12. 两个简单方法快速解决怎么把kux格式转mp4
  13. 2009 中国协同软件机遇年?
  14. node文件通过不同的后缀名解析不同的文件类型
  15. 谁来拯救中国的语言文学
  16. 三种照片保存形式 :JPEG、TIFF、RAW
  17. [转载]无线网络优化
  18. 莪 、不 � 是 偷 偷 想 � 了 .
  19. windows字体转移至linux,由 Windows 向 Linux 迁移字体 和 Linux 等宽字体
  20. 定时器误触发功能详解

热门文章

  1. 用turtle库画旋转太极图
  2. 意大利语翻译软件测试,意大利语翻译软件app
  3. 基础篇:ios开发概述
  4. 2022-2028年中国移动互联网 打车软件行业市场分析预测及发展战略研究报告
  5. 高端电子芯片助力传统油液颗粒监测升级
  6. oracle数据字典翻译中文,OracleEBS中文数据字典.doc
  7. 无人驾驶仿真软件合集
  8. C/S、B/S与RIA
  9. 最强大脑之《数字华容道》游戏Android端的具体实现
  10. opencv1.0用笔记本打开摄像头画面为黑色