本实验需要三台虚拟机,以为为IP地址实例表

IP

作用

192.168.20.50

主数据库

192.168.20.40

从数据库

192.168.20.30

mycat端

主从复制

1.在虚拟机中安装mariaDB并设置开机自启

yum -y install mariadb mariadb-server
systemctl start mariadb
systemctl enable mariadb

2.初始化数据库

 mysql_secure_installation

依次输入 回车 , y ,设置密码(在本例中设为000000), ynyy

配置主节点

1.修改配置文件:

vi /etc/my.cnf[mysqld] 中添加以下代码

log_bin=mysql-bin
binlog_ignore_db=mysql
server_id=50  #为实际IP的最后一位
read-only=0
systemctl restart mariadb

重启服务

2.开放主节点的数据库权限

登录到数据库

mysql -uroot -p000000

授权

grant all privileges on *.* to root@'%' identified by '000000';

验证是否授权成功,登录到从数据库

mysql -uroot -h 192.168.20.50 -p000000

在主节点中创建一个user远程用户让从节点链接,并赋予从节点同步主节点的数据库的权限

回到主节点,继续在数据库中执行一下命令:

create user 'user'@'192.168.20.50' identified by '000000';
grant replication slave on *.* to 'user'@'192.168.20.40';

刷新权限:

flush privileges;

查看主数据库中的状态:

show master status;

配置从节点

修改配置文件:

server_id=40  #id为实际IP最后一位
relay-log=mysql-relay

重启数据库

systemctl restart mariadb

在从节点中登录数据库:

配置从节点链接主节点的信息。Master_host:主节点的 IP 地址,master_user 是上一步中创建的用户user

change master to master_host='192.168.20.50',master_user='user',master_password='000000';

开启从节点服务,检查是否开启成功

start slave;
show slave status \G;

Slave_IO_RunningSlave_SQL_Running 都为Yes即为成功!

验证主从数据库同步:

在主节点登录数据库

create database test0;
use test0;
create table student (id int,name varchar(50),age int);
insert into student values (20050623,"zhaoda",18);

在从节点登录数据库

show databases;
select * from test0.student;

主从数据库同步,则搭建成功!

读写分离

安装JDK和mycat组件

将组件上传至根目录

tar -zxvf jdk-8u202-linux-x64.tar.gz
tar -zxvf Mycat-server-1.6-RELEASE-2016102804710-linux.tar.gz -C /usr/local

配置环境变量, vi /etc/profile ,将以下代码添加至末尾:

export JAVA_HOME=/root/jdk1.8.0_202
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export MYCAT_HOME=/usr/local/mycat/

使用 source /etc/profile 使环境变量生效

编辑mycat的逻辑库配置文件

vim /usr/local/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="dn3" />
        <dataNode name="dn3" dataHost="localhost1" database="test0" />  #database为自己实际创建的数据库名
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.20.50:3306" user="root"  #此url为自己的实际主数据库IP地址
                                   password="000000" >
                        <!-- can have multi read hosts -->
                        <readHost host="hostS2" url="192.168.20.40:3306" user="root" password="000000" />  #此处url为自己实际的从数据库IP
                </writeHost>
        </dataHost>
</mycat:schema>

修改配置文件权限

chown -R root:root schema.xml

编辑mycat的访问用户

vim /usr/local/mycat/conf/server.xml

将最后的 user name="user" 的几行代码删除

在 user name="root" 部分中,修改代码为

<property name="password">000000</property>
<property name="schemas">TESTDB</property>

启动mycat服务

/bin/bash /usr/local/mycat/bin/mycat start

查看端口号占用情况,8066和9066为LISTEN状态即为启动成功

netstat -ntpl

如果netstat无法执行,可以执行以下代码安装依赖

yum -y install net-tools

使用端口8066登录数据库并添加一条数据

mysql -h 127.0.0.1 -uroot -p000000 -P8066
show databases;
use TESTDB;
show tables;
select * from student;
insert into student values (3,"zhanghao",19);

通过9066端口查看对数据库读写操作的分离信息

mysql -h 127.0.0.1 -uroot -p000000 -e 'show @datasource'