为什么要做主从?
读写分离的好处
一主双从,使用mycat中间件实现读写分离
准备四台机器:
10.3.134.98 master
10.3.134.99 slave1
10.3.134.100 slave2
10.3.134.101 mycat
vim /etc/hosts 添加如下内容
10.3.134.98 master
10.3.134.99 slave1
10.3.134.100 slave2
10.3.134.101 mycat
先做好主从再进行读写分离:
M-S架构GTID(全局事务标识) 基于事务ID复制
3、编辑配置文件
[root@biudefor ~]# vim /etc/my.cnf
##### master 端添加如下配置
server-id=4098 #定义server id master必写
log-bin=mylog #开启binlog日志,master比写
gtid_mode=ON #开启gtid
enforce_gtid_consistency=1 #强制gtid
slave1操作: #添加如下配置
server-id=4099
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
slave2操作: #添加如下配置
server-id=4100
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
4、重启服务
5、登陆MySQL,并修改密码
[root@biudefor ~]# mysqladmin -uroot -p password"新密码"
Enter password: 旧密码
6、master上创建连接账户,slave上指定连接账户
在master上操作:
创建账户:
mysql> grant replication slave,reload,super on *.* to 'slave'@'%' identified by '密码' ;
mysql> flush privileges;
slave1和slave2上的操作是一样的:
slave1:
mysql> \e
change master to
master_host='master', #主ip 地址 最好用域名
master_user='授权用户', #主服务上面创建的用户
master_password='授权密码',
master_auto_position=1;
mysql> start slave; #启动slave角色
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G #查看状态,验证sql和IO是不是yes。
然后在slave2上进行相同的操作
7、测试
Mycat 数据库中间件
部署环境
安装jdk
将jdk上传到服务器中
[root@mycat ~]# tar xzf jdk-8u221-linux-x64.tar.gz -C /usr/local/
[root@mycat ~]# cd /usr/local/
[root@mycat local]# mv jdk1.8.0_221/ java
设置环境变量
[root@mycat local]# vim /etc/profile #添加如下内容,
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@mycat local]# source /etc/profile
部署mycat
下载
[root@mycat ~]# wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
解压
[root@mycat ~]# tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/
配置mycat
认识配置文件
MyCAT 目前主要通过配置文件的方式来定义逻辑库和相关配置:
/usr/local/mycat/conf/server.xml #定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。
/usr/local/mycat/conf/schema.xml #定义逻辑库,表、分片节点等内容。
编辑server.xml
[root@mycat ~]# cd /usr/local/mycat/conf/
[root@mycat conf]# vim server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<user name="root" defaultAccount="true">
<property name="password">Duan@123</property>
<property name="schemas">duan</property>
</user>
</mycat:server>
name='root' mycat的虚拟用户名
password 用于登陆这个虚拟用户的密码
schemas 虚拟库
schema配置详解:
maxCon="1000" minCon="10" // 连接
balance="0" // 负载均衡
writeType="0" // 写模式配置
dbType="mysql" dbDriver="native" // 数据库配置
switchType="1" slaveThreshold="100">
!--这里可以配置关于这个主机组的成员信息,和针对这些主机的健康检查语句-->
</dataHost>
<writeHost host="hostM1" url="master:3306" user="mycat" password="Duan@123">
<readHost host="hostS1" url="slave:3306" user="mycat" password="Duan@123" />
<readHost host="hostS2" url="slave1:3306" user="mycat" password="Duan@123" />
</writeHost>
配置schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="duan" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="localhost1" database="duan" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="master:3306" user="mycat" password="Duan@123">
<readHost host="hostS1" url="slave1:3306" user="mycat" password="Duan@123" />
<readHost host="hostS2" url="slave2:3306" user="mycat" password="Duan@123" />
</writeHost>
</dataHost>
</mycat:schema>
mycat已经配置好了,然后在master上给用户授权
mysql> grant all on testdb.* to 配置文件中指定的用户名@'%' identified by '配置文件里的密码';
mysql> flush privileges;
启动mycat
启动mycat之前需要调整JVM
在wrapper.conf中添加
[root@mycat mycat]# cd conf/
[root@mycat conf]# vim wrapper.conf #在设置JVM哪里添加如下内容
#wrapper.java.additional.1=
wrapper.startup.timeout=300 //超时时间300秒
wrapper.ping.timeout=120
启动:
[root@mycat conf]# /usr/local/mycat/bin/mycat start
Starting Mycat-server...
[root@mycat ~]# jps #查看mycat是否启动
13377 WrapperSimpleApp
13431 Jps
[root@mycat ~]# netstat -lntp | grep java
测试
在mycat的机器上面测试mycat用户登录
[root@biudefor conf]# mysql -uroot -hmaster -umycat -p
Enter password:
将master当做mycat的客户端
[root@mysql-master ~]# mysql -uroot -h mycat -p -P 8066