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均属错误)。***
测试:在主服务器添加一条记录,在从服务器也会添加一条记录
二、安装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.****.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.html和https://blog.****.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
日志后如下图所示: