1 mysql主从配置
1.1 主虚拟机配置(192.168.137.128)
1.2 从虚拟机配置(192.168.137.129)
1.3 测试
2 配置mycat
2.1 安装jdk
2.2 安装mycat
2.3 配置server.xml
2.4 配置schema.xml
2.5 测试
1主虚拟机配置(192.168.11.109)
- 1.1 修改/etc/mysql/mysql.conf.d/mysqld.cnf文件
- 1.1.1 在[mysqld]下添加以下
character_set_server = utf8
init_connect = 'SET NAMES utf8'
log-bin=mysql-bin
server-id=1
1.2 在[mysqld]下注释掉bind-address = 127.0.0.1
进入%home%/bin,执行mysql -uroot -proot
#授权。允许root用户,从192.168.137.*的IP范围 远程访问A主mysql
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.137.*' IDENTIFIED BY 'root' WITH GRANT OPTION;
#生效。该操作很重要!
mysql>FLUSH PRIVILEGES;
- 1.3.3 显示master
show master status;
1、使用 service 停止:service mysqld stop
2、使用 service 启动:service mysqld start
service mysqld restart
service mariadb restart
从虚拟机配置(192.168.11.117)
2.1 修改/etc/mysql/mysql.conf.d/mysqld.cnf文件
2.1.1 在[mysqld]下添加以下
vi /etc/mysql/mysql.conf.d/mysqld.cnf
character_set_server = utf8
init_connect = 'SET NAMES utf8'
log-bin=mysql-bin
server-id=2
- 2.3.1 进入mysql,重置slave
这里的 master_log_file 和 master_log_pos 在主虚拟机的 mysql 的 master 中,就是上面的图所示!
stop slave;
reset slave;
change master to master_host='192.168.137.128',master_user='root',master_password='123',master_log_file='mysql-bin.000002',master_log_pos=120;
-
- 2.3.2 启动slave
start slave;
- 2.4 测试
在master虚拟机中创建一个数据库,然后再slave虚拟机中查看,如果,slave中有刚刚测试的数据库,说明mysql主从配置成功。
主:
create database testMS;
use testMS;
create table ming(id int,name varchar(200));
insert into ming values(1,'ming');
select * from ming;
3.配置server.xml
到 mycat 的 conf 目录下,修改 server.xml 文件添加 test 和user 用户,test 用户,密码也为 test,user 用户,密码也为user
<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
4.配置schema.xml
设置读和写服务器的ip与端口,以及集群策略。这里的 schema 的 name 要与 server.xml 的 schema 保持一致, database 对应的是 mysql 里面已经存在的数据库,也就是说,mycat 的 TESTDB 代理了 主/从虚拟机的 mysql 的 test 数据库
<?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="dn1">
</schema>
<dataNode name="dn1" dataHost="master" database="testms" />
<dataHost name="master" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>show slave status</heartbeat>
<writeHost host="host2" url="192.168.137.128:3306" user="root" password="123" />
<writeHost host="host4" url="192.168.137.129:3306" user="root" password="123" />
</dataHost>
</mycat:schema>
show slave status 表示一种集群策略,只适用在一主一从的环境中,当主 down 掉, 从可以充当主和从
balance属性
balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡
balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。
balance=”3”, 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力
writeType 属性
负载均衡类型,目前的取值有 3 种:
writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost, 重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties
writeType=”1”,所有写操作都随机的发送到配置的 writeHost
- 5 启动mycat
cd /opt/mycat/bin
./mycat start
补充:mycat的常用命令
关闭
mycat stop
重启
mycat restart
查看mycat状态
mycat status
- 6 测试
现在 mycat 可以代理 mysql 了,用 navicat 连接 mycat(8066端口)
现在到主虚拟机用命令行查看数据库,看看刚在 navicat 写进 mycat 的数据有没有显示出来
用 mycat 的账号密码登录到主虚拟机的 mycat,查看并添加一条数据 tom
mysql
-uroot-ptest
-h127.0.0.1
-P8066
1:注意不要用mysql
-uroot-ptest
-hlocalhost
-P8066
localhost会直接连接到mysql
注意要mysql
-uroot-p
-hlocalhost
-P8066
先不要密码,然后在输入密码。
2:
schema.xml中数据库名称注意要对称。