mysql-mycat(读写分离)

peiz先部署一个双主,双从的环境

先部署坏境(准备4个干净的虚拟机)

#防火墙和selinux
[root@localhost ~]# systemctl disable firewalld --now &&  setenforce 0
#主机名解析
# 修改主机名
[root@localhost ~]# hostnamectl set-hostname master1
[root@localhost ~]# hostnamectl set-hostname master2
[root@localhost ~]# hostnamectl set-hostname slave1
[root@localhost ~]# hostnamectl set-hostname slave2
可以在本地解析一个ip,线程连接的时候就不用写IP了
[root@master ~]# cat /etc/hosts
192.168.19.136 master1
192.168.19.138 slave1
192.168.19.137 master2
192.168.19.139 slave2
清理环境

[root@master ~]# yum -y erase `rpm -qa |  egrep  "mysql|mariadb"`
[root@master ~]# rm -rf /etc/my*;rm -rf /var/lib/mysql*;rm -rf /var/log/mysql*;rm -rf /usr/bin/mysql*
[root@master ~]# [[ ! -f /etc/my.cnf ]] && [[ ! -d /var/lib/mysql ]] && [[ ! -f /var/log/mysqld.log ]] && [[ ! -f /usr/bin/mysql ]] && echo "环境已经清理完成" || echo "环境未清理"

#时间
[root@master ~]# ntpdate ntpdate ntp.aliyun.com
#固定ip
[root@master ~]# curl langlangago.org.cn/os/static_ip.sh | sh
# 配置本地源,需要先清理环境
[root@master ~]# rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/centos.repo http://www.langlangago.org.cn/repo/centos7.repo && \
yum clean all && \
yum repolist

#安装数据库
# 内网环境
[root@master ~]# yum -y install mysql-server
[root@master ~]# systemctl start mysqld
# 修改密码
[root@master ~]# mysqladmin -uroot -p"`awk '/A temporary password/{p=$NF}END{print p}' /var/log/mysqld.log`" password "Qq111111."

 主库配置master1:开启bin-log日志

[root@master ~]# vim /etc/my.cnf
[mysqld]
server-id=201 --几个连接的id必须是不一样的
log-bin=/data/mysql-bin -- 默认存放的位置,可以修改,但是需要先创建一个目录

log-slave-updates          --写入这行就可以连接/授权多个从库

# 授权主从复制的账号
mysql> grant replication slave  on *.* to 'replication'@'%' identified by 'Qq111111.';
mysql> flush privileges;
mysql> show master status;

!!!!注意master1需要给slave1授权;master1需要给master2授权;

master2需要给master1授权;master2需要给slave2授权;

从库配置(这个是slave2的配置
# 开启binlog
[root@slave ~]# mkdir -pv /data --这个就创建了一个空目录
[root@slave ~]# chown -R mysql.mysql /data  --但是是需要授权的
[root@slave ~]# vim /etc/my.cnf
[mysqld]
server-id=202
log-bin=/data/mysql-bin   
mysql> change master to  --连接
    -> master_host='master1',  
    -> master_user='replication', --授权的用户
    -> master_password='Qq111111.', --密码
    -> master_port=3306,
    -> master_log_file='mysql-bin.000001',  --日志名字
    -> master_log_pos=154;  --位置点
mysql> start slave;
mysql> show slave status\G
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: master
                  Master_User: replication
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: slave-relay-bin.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: 154
              Relay_Log_Space: 527
              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: 201
                  Master_UUID: 2e787e7c-1bd5-11ef-86cf-000c298a6e96
             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: 

#重点关注一下行
# 第13 14 行两个YES表示主从复制正常
# 第21 22 行 表示错误码和错误信息
# 第35行    表示主从复制是否有延迟

其他三个从库也需要配置这些文件,把配置文件里面的id写了,就可以了

可以创建表测试一下

主从重复(执行了一样的命令怎么办)

在/etc/my.cnf配置文件里面加入

这个语句的意思是可以跳过这个错误

error1053:主库宕机 就没有办法了

了解一下步长,在配置文件里面改

两个主键的步长设置不一样的,就可以避免重复,错误

读写分离

假的和真的存在一个映射关系

高可用:避免单点故障,无缝衔接,mastr1宕机后,启动master2

这就叫负载均衡

 Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。

MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。

部署环境

从官网下载,可以下载到/usr/local/下

jdk的名字比较长,可以设置一个环境变量

第一种

[root@mycat ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

使环境变量生效
[root@mycat ~]# source /etc/profile.d/java.sh

第二种

mv jdk....   jdk

vim /etc/profile/ 

最后插入一句 

export PATH=/usr/jdk/bin:$PATH

用java-version来测试启动jdk

部署mycat

从官网下载,可以下载到/usr/local/下

在bin 目录下启动mycat

可以在 /vim/etc/hosts/下把mycat的IP也加入

master1必须给mycat授权

mysql> grant all on *.* to 'mycat'@'%' identified by 'Qf@123456';

配置 server.xml

配置schema.xml

 

注意里面要修改的东西

 balance 属性

1. balance="0"  只读master1

2. balance="1"   m1只读 ,m2,s1,s2随机

4. balance="2"   m1,m2,s1,s2随机

5. balance="3" m1只写,s1,s2随机只读,m2备用,m1宕机,m2无缝衔接m1

测试登录

mysql > mysql -uroot -p123456  -hmycat -P8066 登录成功

随便用一个s2窗口去测试

注意,schema.xml配置文件里面的库是db1

测试的几个库必须创建db1这个数据库

在里面的db1库里面创建不同的表好区分

 根据balance 属性的不同值来测试

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值