mysql+mycat实现主从复制、读写分离

一、主从复制

mysql:5.6 mycat1.6
主服务器:47.98.231.33 root root
从服务器:119.23.226.141 root root

1.主服务器my.cnf配置:

在`[mysqld]`加入如下配置
#主从复制的数据库的名字
binlog-do-db=qianbagongshe
#忽略mysql数据库(一般mysql不需要库不需要同步)
binlog-ignore-db=mysql
##启用二进制日志
log-bin=mysql-bin
##服务器唯一ID,一般取IP最后一段
server-id=33

重启mysql:service mysqld restart

2.在主服务器的mysql创建同步的用户,并赋予权限

mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';

注意:一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。
刷新权限:mysql> FLUSH PRIVILEGES;
查看master状态:mysql> show master status;

mysql> show master status;
+------------------+----------+---------------+------------------+
| File             | Position | Binlog_Do_DB  | Binlog_Ignore_DB |
+------------------+----------+---------------+------------------+
| mysql-bin.000002 |   431859 | qianbagongshe | mysql            |
+------------------+----------+---------------+------------------+
1 row in set (0.01 sec)

3.修改从服务器的my.cnf配置文件

在从服务器的[mysqld]段添加

server-id=141

配置从服务器:

mysql>change master to master_host='47.98.231.33',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=431859 ;

这里的master_host对应主服务器的ip,master_port对应主服务器的mysql端口,master_user对应主服务器允许远程连接的用户,master_password对应远程用户的密码,maste_log_file对应在主服务器生成的二进制文件名,master_log_pos对应上述通过show master status查询到的Position 栏的数字
开启 从服务器的复制模式start slave (关闭为stop slave
查看从服务器的的主从状态:show slave status
如下:

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 47.98.231.31
                  Master_User: backup
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 431859
               Relay_Log_File: iZwz9e4q6vwsdzhpxw4th0Z-relay-bin.000030
                Relay_Log_Pos: 40802
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes  #此处必须为yes
            Slave_SQL_Running: Yes #此处必须为yes

*** 注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。***
测试:在主服务器添加一条记录,在从服务器也会添加一条记录
mysql+mycat实现主从复制、读写分离
mysql+mycat实现主从复制、读写分离

二、安装mycat

1.安装jdk

下载地址:jdk下载
上传至/usr/lib/jvm目录下(mkdir -p /usr/lib/jvm)
解压:tar -zxvf jdk-11.0.1_linux-x64_bin.tar.gz
修改/etc/profile 在末尾添加如下几行代码:

export JAVA_HOME=/usr/lib/jvm/jdk-11.0.1
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export  PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile

查看java版本java -version

2.安装mycat及配置

1.下载地址:mycat下载
2.下载好后直接解压:tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
3.cd ./mycat目录
注:目录结构可参考:https://blog.csdn.net/YuYunTan/article/details/53196367
4.修改配置文件vim ./mycat/conf/schema.xml

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

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="database1">
        </schema>
        <dataNode name="database1" dataHost="localhost1" database="qianbagongshe" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
                <heartbeat>show slave status</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="localhost:3306" user="root"
                                   password="root">
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="119.23.226.141:3306" user="root" password="root" />
                </writeHost>
                <writeHost host="hostS1" url="localhost:3306" user="root"
                                   password="root941128" />
             
        </dataHost>
</mycat:schema>

详细配置介绍可参考博客:https://www.cnblogs.com/fxwl/p/7990906.htmlhttps://blog.csdn.net/sds15732622190/article/details/72190120
配置server.xml:

 80         <user name="root">
 81                 <property name="password">123456</property>
 82                 <property name="schemas">TESTDB</property>
 83 
 84                 <!-- 表级 DML 权限设置 -->
 85                 <!--            
 86                 <privileges check="false">
 87                         <schema name="TESTDB" dml="0110" >
 88                                 <table name="tb01" dml="0000"></table>
 89                                 <table name="tb02" dml="1111"></table>
 90                         </schema>
 91                 </privileges>           
 92                  -->
 93         </user>
 94 
 95         <user name="user">
 96                 <property name="password">user</property>
 97                 <property name="schemas">TESTDB</property>
 98                 <property name="readOnly">true</property>
 99         </user>

3.测试

1.vim conf/log4j2.xml文件 开启debug

        <asyncRoot level="Debug" includeLocation="true"><!--将level="info"开启debug模式  日志在mycat.log查看-->

            <AppenderRef ref="Console" />
            <AppenderRef ref="RollingFile"/>

        </asyncRoot>

进行读的操作:查看mycat.og日志后如下图所示:
mysql+mycat实现主从复制、读写分离