Linux下mysql基于mycat实现主从复制和读写分离
1.基础设施

  两台虚拟机:172.20.79.232(主) 172.20.79.233(从)
  1.1软件设施

    mysql5.6.39 , mycat1.6-RELEASE ,   jdk1.7及其以上版本
2.实现步骤一(mycat实现读写分离)

  1.首先在两台服务器安装mysql

    1.下载mysql的repo源

 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

    2.安装mysql-community-release-el7-5.noarch.rpm包

 $ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

      安装这个包后,会获得两个mysql的yum repo源:

 /etc/yum.repos.d/mysql-community.repo
 /etc/yum.repos.d/mysql-community-source.repo

    3.安装mysql并修改my.cnf文件(才能使用mycat)

$ sudo yum install mysql-server
vi /etc/my.cnf
在后面追加一行或修改
lower_case_table_names = 1

      根据提示安装就可以了,不过安装完成后没有密码,需要重置密码 
    4.重置mysql密码

 $ mysql -u root

      登录时有可能报这样的错:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2),原因是/var/lib/mysql的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:

      

$ sudo chown -R root:root /var/lib/mysql

    5.开启mysql远程连接
    

grant all on *.* to root@'%' identified by 'admin123' with grant option;
flush privileges;

    6.重启mysql服务
     

 $ service mysqld restart

    7.接下来登录重置密码:
  

 $ mysql -u root  //直接回车进入mysql控制台
      mysql > use mysql;
      mysql > update user set password=password('123456') where user='root';
      mysql > exit;

  2.在主服务器安装mycat
    1.下载mycat1.6
  

https://github.com/MyCATApache/Mycat-download

  

    2.上传至主服务器解压安装    

tar zxvf  Mycat-server-1.6-RELEASE-20160405120037-linux.tar.gz -C /usr/local
      cd /usr/local/mycat
      groupadd mycat
      useradd -g mycat mycat
      passwd mycat
      chown -R mycat.mycat /usr/local/mycat
      export MYCAT_HOME=/usr/local/mycat

     2.1 修改(新增)   

 vi /etc/hosts
   172.20.79.232 root232
   172.20.79.233 root233


     2.2 修改mycat启动jdk路径
     

vi /usr/local/mycat/conf/wrapper.conf
   修改wrapper.java.command=%JAVA_HOME%/bin/java


     2.3 配置mycat 文件schema.xml
        

vi /usr/local/mycat/conf/schema.xml
  <?xml version="1.0"?>
  <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  <mycat:schema xmlns:mycat="http://io.mycat/">
  <!-- 这里的mycatdb与server.xml 里面名称一致 dataNode有几个节点就配置几个节点,用逗号分隔-->
  <schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" />
  <!-- database有几个数据库就配置几行即可-->
  <dataNode name="dn1" dataHost="localhost1" database="db01" />
  <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  <!--
  balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
  balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
  balance="2",所有读操作都随机的在writeHost、readhost上分发。
  balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力
  writeType表示写模式
  writeType="0",所有的操作发送到配置的第一个writehost
  writeType="1",随机发送到配置的所有writehost
  writeType="2",不执行写操作
  switchType指的是切换的模式,目前的取值也有4种:
  switchType=‘-1‘ 表示不自动切换
  switchType=‘1‘ 默认值,表示自动切换
  switchType=‘2‘ 基于MySQL主从同步的状态决定是否切换,心跳语句为show slave status
  switchType=‘3‘基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为show status like ‘wsrep%‘。
  -->
  <heartbeat>select user()</heartbeat>
  <!--配置mysql写入的节点-->
  <writeHost host="hostM1" url="172.20.79.232:3306" user="root"
  password="admin123">
  <!--配置mysql读取的节点-->
  <readHost host="hostS2" url="172.20.79.233:3306" user="root" password="admin123" />
  </writeHost>
  </dataHost>
  </mycat:schema>

  



    2.4 配置mycat 用户名和密码在文件server.xml

vi /usr/local/mycat/conf/schema.xml<?xml version="1.0" encoding="UTF-8"?>

  <!DOCTYPE mycat:server SYSTEM "server.dtd">
  <mycat:server xmlns:mycat="http://io.mycat/">
  <system>
  <property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
  <property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
  <property name="sequnceHandlerType">2</property>
  <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
  <property name="processorBufferPoolType">0</property>
  <property name="handleDistributedTransactions">0</property>
  <!--
  off heap for merge/order/group/limit 1开启 0关闭
  -->
  <property name="useOffHeapForMerge">1</property>
  <!--
  单位为m
  -->
  <property name="memoryPageSize">1m</property>
  <!--
  单位为k
  -->
  <property name="spillsFileBufferSize">1k</property>
  <property name="useStreamOutput">0</property>
  <!--
  单位为m
  -->
  <property name="systemReserveMemorySize">384m</property>
  <!--是否采用zookeeper协调切换 -->
  <property name="useZKSwitch">true</property>
  </system>
  <user name="root">
  <property name="password">admin123</property>
  <property name="schemas">mycatdb</property>
  </user>
  <user name="user">
  <property name="password">user</property>
  <property name="schemas">mycatdb</property>
  <property name="readOnly">true</property>
  </user>
  </mycat:server>

  3.测试

   3.1 首先启动mycat

   

  cd /usr/local/mycat/bin
./mycat start

    3.2 查看mycat是否启动

   netstat -ntulp |grep 8066
8066为mycat监听端口

    3.3 修改日志级别为debug

    vi /usr/local/mycat/conf/log4j2.xml

    修改asyncRoot level="debug"

    3.4 使用mycat登录mysql

    mysql -uroot -padmin -h172.20.79.232 -P8066 -Dmycatdb

   3.5 测试是否读写分离

    首先动态打印日志

  tail -f -n 500 mycat.log

在mycat中,进行测试

    

     新建数据库(主从都必须建):create database db01;

       use db01;

    create table test(id int not null,name varchar(24) not null);

    insert into test vales(1,"test1");

    select * from test;
    
    写入的时候,日志打印记录如果是主mysql,查询的时候,日志打印记录是从mysql ,则实现读写分离

  

3.实现步骤二(mysql实现主从复制)

  1.修改Master服务器mysql的my.cnf文件

  [mysqld]
  log_bin = mysql-bin #记录操作日志
  binlog_ignore_db = mysql #不同步mysql系统数据库
  server_id = 1

  

  2.首先登录Master的mysql配置创建mysql 的slave用户

  mysql> grant replication slave,reload,super on *.* to slave@172.20.79.233 identified by 'slave';

  3.修改Master服务器slave的my.cnf文件

  

  log_bin = mysql-bin  #记录操作日志
  replicate_ignore_db = mysql #不同步mysql系统数据库
  slave_skip_errors = all
  server_id = 2

  4.主mysql执行sql

  show master status;

  

5.slave的mysql连接master的mysql

  根据第2步配创建的user(slave),password(slave) 和 第4步获取的file(mysql-bin.00004),position(120) 连接主mysql

  mysql> change master to master_host='172.20.79.232', master_user='slave', master_password='slave',master_log_file='mysql-bin.00004',master_log_pos=120;

 6.slave开启从mysql,mysql中执行 

  start slave;

 7.查看slave的mysql状态,mysql执行

 show slave status\G;

  

  8.测试主从复制

  首先在主从mysql上都新建数据库db02
  主mysql执行:
    use db02;
    create table user(id int not null primary key,name varchar(50));
  从mysql上也会产生user表,主从mysql配置成功!

  到此结束!

linux下mysql基于mycat做主从复制和读写分离之基础篇的更多相关文章

  1. Mycat 做简单的读写分离(转载)

    大漠小狼的个人空间   http://www.51testing.com/html/34/369434-3686088.html 使用Mycat 做简单的读写分离(一) 原本使用的是amoeba做的读 ...

  2. MySQL+Amoeba实现数据库主从复制和读写分离

    MySQL读写分离是在主从复制的基础上进一步通过在master上执行写操作,在slave上执行读操作来实现的.通过主从复制,master上的数据改动能够同步到slave上,从而保持了数据的一致性.实现 ...

  3. [mysql终极优化]之主从复制与读写分离详细设置教程

    读写分离与主从复制是提升mysql性能的重要及必要手段,大中型管理系统或网站必用之. 一.什么是读写分离与主从复制 先看图 如上图所示,当web server1/2/3要写入数据时,则向mysql d ...

  4. 利用mycat实现基于mysql5.5主从复制的读写分离

    整体步骤: 1.准备好两台服务器,一台作为主数据库服务器,一台作为从服务器,并安装好mysql数据库,此处略 2.配置好主从同步 3.下载JDK配置mycat依赖的JAVA环境,mycat采用java ...

  5. linux中MySQL主从配置(Django实现主从读写分离)

    一 linux中MySQL主从配置原理(主从分离,主从同步) mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到sl ...

  6. Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践

    一.为什么要做Mysql的主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

  7. mysql学习(3)-linux下mysql主从复制

    前言:为什么MySQL要做主从复制(读写分离)?通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低.为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻 ...

  8. 重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

    一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库 ...

  9. Linux下MySQL主从复制(GTID)+读写分离(ProxySQL)-实施笔记

    GTID概念: GTID( Global Transaction Identifier)全局事务标识.GTID 是 5.6 版本引入的一个有关于主从复制的重大改进,相对于之前版本基于 Binlog 文 ...

随机推荐

  1. python实现贴吧顶贴机器人

    前言------百度贴吧流量如何?全球最大的中文社区,虽然比不上阿里,腾讯! 此文章仅供交流学习.建议机器人用小号操作,切勿用作商业用途! 测试版本:python 3.7 64位火狐浏览器firefo ...

  2. 如何使用容器镜像服务 TCR 轻松实现容器 DevOps

    作者周明,腾讯云容器产品工程师.目前主要负责腾讯云TKE.TCR等产品控制台的相关研发工作. 概述 当你使用云厂商提供的容器服务部署业务服务后,是否对交付部署全链路的效率有更高的需求,例如实现基于容器 ...

  3. 伪静态 RewriteRule-htaccess

    伪静态实际上是利用PHP把当前地址解析成另一种方法来访问网站,要学伪静态规则的写法,要懂一点正则 一.正则表达式教程 有一个经典的教程:正则表达式30分钟入门教程 常用正则如下: . 换行符以外的所有 ...

  4. 瞄到BindingGroup用法

    文章转载于https://www.cnblogs.com/dangnianxiaoqingxin/p/12653988.html 2.BindingGroup的使用 public class MyCl ...

  5. 【Flutter】可滚动组件之SingleChildScrollView

    前言 SingleChildScrollView类似于Android中的ScrollView,它只能接收一个子组件. 接口描述 const SingleChildScrollView({ Key ke ...

  6. JPEG解码--(1)JPEG文件格式概览

    由于懒和人的忘性,以前做的一些笔记再回过头看时又有些生疏了,我决定把一些内容整理出来,以供有需要的来参考. 了解的人知道其价值所在,不知道的人就弃之如废物吧. 本篇是JPEG解码系列的第一篇--JPE ...

  7. MySQL 使用MD5对数据进行加密

    数据库MD5加密 -- ================ 测试 MD5 加密 ============== CREATE TABLE `testmd5`( id INT(11) NOT NULL AU ...

  8. 用percona monitoring plugins 监控mysql

    下载:http://www.percona.com/redir/downloads/percona-monitoring-plugins/1.1.1/percona-zabbix-templates- ...

  9. SQL语句中 ` 的作用

    SQL语句中 ` 的作用 做攻防世界WEB区 supersqli 题目,在构建SQL语句时,遇到SQL语句中有 ` 时可以解析,没有则不能. 查阅资料得知,` 通常用来说明其中的内容是数据库名.表名. ...

  10. SWPU2019

    一.题目打开介绍 这是题目本身打开的样子,继续进入题目 二.做题 简单的登陆界面和注册界面,没有sql注入已经尝试 申请发布广告 习惯性的测试 然后开始尝试注入,抓包, 两个都要,经过union注入判 ...