栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Mycat环境搭建

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mycat环境搭建

1.Mycat环境搭建 1.1 Mycat下载和安装
  • 官网:http://www.mycat.io/

  • 下载地址 : http://dl.mycat.io/

  • 选择1.6.7.1的版本,下载到D盘,安装包入下图:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B0uCwNbI-1652284138759)(MySQL高级-04-授课笔记.assets/11.png)]

  • 上传:使用SecureCRT的SFTP命令,将文件发送到Linux虚拟机root目录下:

    sftp> put D:Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz 
    
  • 解压:解压mycat.tar.gz并查看

    tar -zxvf mycat.tar.gz
    cd mycat
    ll
    

  • 授权:设置mycat权限

    chmod -R 777 mycat
    
  • 环境变量:配置环境变量

    vi /etc/profile 
    // 添加
    export MYCAT_HOME=/root/mycat
    
    // 使环境变量生效
    source /etc/profile
    
  • 启动mycat

    // 进入bin目录
    [root@localhost]# cd /root/mycat/bin
    
    // 执行启动命令
    [root@localhost bin]# ./mycat start
    
  • 查看:检测端口监听状况,Mycat的端口号是8066

    [root@localhost bin]# netstat -ant|grep 8066
    

  • 连接:使用SQLYog连接Mycat

  • 连接后显示:

.2 环境准备
  • 配置模型

  • 克隆虚拟机

  • 修改配置网卡

    • 在第二个虚拟机中,生成全新mac地址


  • 重启网络
// 重启网络
service network restart
//查看ip地址
ip addr
  • 修改mysql配置文件,更改uuid

    • 在第二个服务器上,修改mysql的uuid
    // 编辑配置文件
    vi /var/lib/mysql/auto.cnf
    // 将server-uuid更改
    
  • 启动MySQL并查看

//将两台服务器的防火墙关闭
systemctl stop firewalld

//启动两台服务器的mysql
service mysqld restart

//启动两台服务器的mycat
cd /root/mycat/bin
./mycat restart

//查看监听端口
netstat -ant|grep 3306
netstat -ant|grep 8066

//使用sqlyog测试连接
1.主从复制
  • 主从复制的概念

    • 为了使用Mycat进行读写分离,我们先要配置MySQL数据库的主从复制。
    • 从服务器自动同步主服务器的数据,从而达到数据一致。
    • 进而,我们可以写操作时,只操作主服务器,而读操作,就可以操作从服务器了。
    • 原理:主服务器在处理数据时,生成binlog日志,通过对日志的备份,实现从服务器的数据同步。

  • 主服务器的配置

    • 在第一个服务器上,编辑mysql配置文件
    // 编辑mysql配置文件
    vi /etc/my.cnf
    
    //在[mysqld]下面加上:
    log-bin=mysql-bin # 开启复制操作
    server-id=1 # master is 1
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1
    
    • 登录mysql,创建用户并授权
    // 登录mysql
    mysql -u root -p
    
    // 去除密码权限
    SET GLOBAL validate_password_policy=0;
    SET GLOBAL validate_password_length=1;
    
    // 创建用户
    CREATE USER 'hm'@'%' IDENTIFIED BY 'itheima';
    
    // 授权
    GRANT ALL ON *.* TO 'hm'@'%';
    
    • 重启mysql服务,登录mysql服务
    // 重启mysql
    service mysqld restart
    
    // 登录mysql
    mysql -u root -p
    
    • 查看主服务器的配置
    // 查看主服务器配置
    show master status;
    

  • 从服务器的配置

    • 在第二个服务器上,编辑mysql配置文件
    // 编辑mysql配置文件
    vi /etc/my.cnf
    
    // 在[mysqld]下面加上:
    server-id=2
    
    • 登录mysql
    // 登录mysql
    mysql -u root -p
    
    // 执行
    use mysql;
    drop table slave_master_info;
    drop table slave_relay_log_info;
    drop table slave_worker_info;
    drop table innodb_index_stats;
    drop table innodb_table_stats;
    source /usr/share/mysql/mysql_system_tables.sql;
    
    • 重启mysql,重新登录,配置从节点
    // 重启mysql
    service mysqld restart
    
    // 重新登录mysql
    mysql -u root -p
    
    // 执行
    change master to master_host='主服务器ip地址',master_port=3306,master_user='hm',master_password='itheima',master_log_file='mysql-bin.000001',master_log_pos=4642;
    
    • 重启mysql,重新登录,开启从节点
    // 重启mysql
    service mysqld restart
    
    // 重新登录mysql
    mysql -u root -p
    
    // 开启从节点
    start slave;
    
    // 查询结果
    show slave statusG;
    //Slave_IO_Running和Slave_SQL_Running都为yes才表示同步成功。
    

  • 测试

    • sqlyog连接主服务器
    -- 主服务器创建db1数据库,从服务器会自动同步
    CREATE DATABASE db1;
    
    • sqlyog连接从服务器
    -- 从服务器创建db2数据库,主服务器不会自动同步
    CREATE DATABASE db2;
    
  • 启动失败的解决方案

启动失败:Slave_IO_Running为 NO 
方法一:重置slave
slave stop;
reset slave;
start slave ;
方法二:重设同步日志文件及读取位置
slave stop;
change master to master_log_file=’mysql-bin.000001’, master_log_pos=1;
start slave ;
2.读写分离
  • 读写分离的概念

    • 写操作只写入主服务器,读操作读取从服务器。
  • 在主服务器上修改server.xml

    • user标签主要用于定义登录mycat的用户和权限。如上面定义用户名mycat和密码123456,该用户可以访问的schema的HEIMADB逻辑库。

		123456
		HEIMADB
		
		
		

  • 在主服务器上修改schema.xml




	
	
	
	
	
		select user()
		
		
		
		
		
	
	

  • 配置详解

    • schema标签逻辑库的概念和mysql数据库中Datebase的概念相同,我们在查询这两个逻辑库中的表的时候,需要切换到该逻辑库下才可以查到所需要的表。

    • dataNode属性:该属性用于绑定逻辑库到某个具体的database上。

    • dataNode标签: dataNode标签定义了mycat中的数据节点,也就是数据分片。一个dataNode标签就是一个独立的数据分片。

    • name属性:定义数据节点的名字,这个名字需要是唯一的,我们需要在table标签上应用这个名字,来建立表与分片对应的关系。

    • dataHost属性:该属性用于定义该分片属于那个数据库实例,属性值是引用datahost标签定义的name属性。

    • database属性:该属性用于定义该分片属于那个具体数据库实例上的具体库,因为这里使用两个纬度来定义分片,就是:实例+具体的库。因为每个库上建立的表和表结构是一样的。所以这样做就可以轻松的对表进行水平拆分。

    • dataHost标签:该标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。

    • balance属性: 负载均衡类型
      ​ balance=0: 不开启读写分离,所有读操作都发送到当前可用的writeHost上。
      ​ balance=1: 全部的readHost与Stand by writeHost都参与select语句的负载均衡
      ​ balance=2: 所有的读操作都随机在writeHost,readHost上分发。
      ​ balance=3: 所有的读请求都随机分配到writeHost对应的readHost上执行,writeHost不负担读压力。

    • switchType属性:
      ​ -1:表示不自动切换。
      ​ 1 :默认值,表示自动切换
      ​ 2:表示基于MySQL主从同步状态决定是否切换,心跳语句: show slave status.
      ​ 3:表示基于mysql galary cluster的切换机制,适合mycat1.4之上的版本,心跳语句show status like “%esrep%”;

    • writeHost标签,readHost标签:这两个标签指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是,writeHost指定写实例、readHost指定读实例,组合这些读写实例来满足系统的要求。

      • host属性:用于标识不同的实例,对于writehost,一般使用M1;对于readhost一般使用S1.
      • url属性:后端实例连接地址,如果使用native的dbDriver,则一般为address:port这种形式,用JDBC或其他的dbDriver,则需要特殊指定。当使用JDBC时则可以这么写:jdbc:mysql://localhost:3306/。
      • user属性:后端存储实例的用户名。
      • password属性:后端存储实例的密码
  • 测试

    • 重启主服务器的mycat
    // 重启mycat
    cd /root/mycat/bin
    
    ./mycat restart
    
    // 查看端口监听
    netstat -ant|grep 8066
    
    • sqlyog连接mycat
    -- 创建学生表
    CREATE TABLE student(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	NAME VARCHAr(10)
    );
    -- 查询学生表
    SELECT * FROM student;
    
    -- 添加两条记录
    INSERT INTO student VALUES (NULL,'张三'),(NULL,'李四');
    
    -- 停止主从复制后,添加的数据只会保存到主服务器上。
    INSERT INTO student VALUES (NULL,'王五');
    
    • sqlyog连接主服务器
    -- 主服务器:查询学生表,可以看到数据
    SELECt * FROM student;
    
    • sqlyog连接从服务器
    -- 从服务器:查询学生表,可以看到数据(因为有主从复制)
    SELECt * FROM student;
    
    -- 从服务器:删除一条记录。(主服务器并没有删除,mycat中间件查询的结果是从服务器的数据)
    DELETe FROM student WHERe id=2;
    
3.分库分表