读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。
三台虚拟机
mycat db1 db2
上传安装所需的文件夹gpmall-repo到/opt
上传压缩包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
vim /etc/hosts
内容:
10.30.59.238 mycat
10.30.59.239 db1
10.30.59.240 db2
mv /etc/yum.repos.d/* /media
vi /etc/yum.repos.d/local.repo
内容 :
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[mariadb]
name=mariadb
baseurl=file:///opt/gpmall-repo
gpgcheck=0
enabled=1
并挂载
mkdir /opt/centos
mount /dev/cdrom /opt/centos
mycat 节点安装mycat
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
iptables -F
iptables -X
iptables -Z
iptables-save
yum install -y mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb
初始化mariadb
mysql_secure_installation
默认回车 设置密码
最后四个 y n y y
db1 节点:
vi /etc/my.cnf
增添内容: (注释文字去掉)
[mysqld]
log_bin = mysql-bin #记录操作日志
binlog_ignore_db = mysql #不同步MySQL系统数据库
server_id = 239 #数据库集群中的每个节点id都要不同,一般使用IP地址的最后段的数字,例如172.16.51.18,server_id就写18
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
进入数据库
grant all privileges on . to root@’%’ identified by “000000”;
grant replication slave on . to ‘user’@‘db2’ identified by ‘000000’;
配置db2节点
更改master
change master to master_host='db1',master_user='user',master_password='000000';
开启 slave从节点服务
start slave;
show slave status\G
在db1节点创建数据库test中的表company
create database test;
use test
create table company(id int not null primary key,name varchar(50),addr varchar(255));
insert into company values(1,"facebook","usa");
再在db2中查看创建的表
select * from test.company;
解压上传的压缩包到/usr/local
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
chown -R 777 /usr/local/mycat/
在/etc/profile系统变量文件中添加Mycat服务的系统变量,并生效变量
echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile
source /etc/profile
在这里定义一个逻辑库schema,name为USERDB;该逻辑库USERDB对应数据库database为test(在部署主从数据库时已安装);设置数据库写入节点为主节点db1;设置数据库读取节点为从节点db2。(可以直接删除原来
schema.xml的内容,替换:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="USERDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="10.30.59.239:3306" user="root" password="000000">
<readHost host="hostS1" url="10.30.59.240:3306" user="root" password="000000" />
</writeHost>
</dataHost>
</mycat:schema>
修改权限
chown root:root /usr/local/mycat/conf/schema.xml
vim /usr/local/mycat/conf/server.xml
在配置文件的最后部分修改:
<user name="root">
<property name="password">000000</property>
<property name="schemas">USERDB</property>
然后删除如下几行:
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
/bin/bash /usr/local/mycat/bin/mycat start
mycat节点
yum install -y MariaDB-client
在Mycat虚拟机上使用mysql命令查看Mycat服务的逻辑库USERDB,因为Mycat的逻辑库USERDB对应数据库test(在部署主从数据库时已安装),所以可以查看库中已经创建的表company。
进入逻辑库
mysql -h127.0.0.1 -P8066 -uroot -p000000
查看逻辑库的表
show USERDB.tables;
insert into company values(2,"pingpang","china");
mysql -h127.0.0.1 -P9066 -uroot -p000000 -e "show @@datasource;"