安装两个mysql数据库:
我选择使用docker,可以直接本地安装两个,只要端口不冲突。
只要有两个mysql就直接看7.修改主从配置即可
架构图:
1. 安装docker
2. 下载mysql5.7镜像
查看镜像是否下载成功:
3. 创建主节点
运行mysql5.7镜像
docker run -itd --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
4. 创建副节点
运行mysql5.7镜像
docker run -itd --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
5. 数据库连接测试
6. Docker进入服务器
执行apt-get update,然后再次执行apt-get install -y vim
7. 安装Mycat1.6
7.1 安装jdk和Mycat
运行镜像
docker run -itd --name mycat -p 8066:8066 centos:centos7
安装jdk
Mycat1.6要求使用jdk,切换到Mycat用户,并把,将jdk1.8.0_112.tar上传到/home/Mycat目录下,进行解压执行如下命令
tar -xvf jdk1.8.0_112.tar |
删除压缩包,执行如下命令
rm -f jdk1.8.0_112.tar |
设置jdk环境变量,打开.bash_profile文件
cd /home/Mycat; vi .bash_profile; |
按i进入编辑模式,在行尾加入
##--------- JDK --------## export JAVA_HOME=$HOME/jdk1.8.0_112 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$HOME/bin:$PATH:/sbin:./:$PATH |
按Esc键,输入:wq!并且回车对内容进行保存(红色部分)
执行如下命令,使.bash_profile生效
source .bash_profile; |
检查jdk是否安装成功,执行命令
java -version |
成功则显示如下
安装MyCat
/home/Mycat目录下,进行解压执行如下命令
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz |
删除压缩包,执行如下命令
rm -f Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz |
设置jdk环境变量,打开.bash_profile文件
cd /home/Mycat; vi .bash_profile; |
按i进入编辑模式,在行尾加入
##--------- mycat --------## export MYCAT_HOME=/home/Mycat/mycat export PATH=$PATH:$MYCAT_HOME/bin |
按Esc键,输入:wq!并且回车对内容进行保存(红色部分)
执行如下命令,使.bash_profile生效
source .bash_profile; |
成功则显示如下
7.2 配置server.xml
路径:
添加两个mycat逻辑库:user,pay
system 参数是所有的mycat参数配置,比如添加解析器:defaultSqlParser,其他类推
user 是用户参数。
<user name="root">
<property name="password">123456</property>
<property name="schemas">test1,test2,test3</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>
7.3 配置schema.xml
路径:
修改dataHost和schema对应的连接信息,user,pay 垂直切分后的配置如下所示:
schema 是实际逻辑库的配置,user,pay分别对应两个逻辑库,多个schema代表多个逻辑库。
dataNode是逻辑库对应的分片,如果配置多个分片只需要多个dataNode即可。
dataHost是实际的物理库配置地址,可以配置多主主从等其他配置,多个dataHost代表分片对应的物理库地址,下面的writeHost、readHost代表该分片是否配置多写,主从,读写分离等高级特性。
以下例子配置了两个writeHost为主从。
<schema name="test1" checkSQLschema="true" sqlMaxLimit="100">
<table name="test1" type="global" dataNode="dn1" />
</schema>
<schema name="test2" checkSQLschema="true" sqlMaxLimit="100">
<table name="test2" type="global" dataNode="dn2" />
</schema>
<schema name="test3" checkSQLschema="true" sqlMaxLimit="100">
<table name="test3" type="global" dataNode="dn3" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="test1" />
<dataNode name="dn2" dataHost="localhost1" database="test2" />
<dataNode name="dn3" dataHost="localhost1" database="test3" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="172.17.0.2:3306" user="root"
password="123456">
<!-- can have multi read hosts -->
<!--<readHost host="hostS2" url="172.17.0.2:3306" user="slave" password="123456" />-->
</writeHost>
<writeHost host="hostS1" url="172.17.0.3:3306" user="root"
password="123456" />
<!-- <writeHost host="hostM2" url="172.17.0.3:3306" user="slave" password="123456"/> -->
</dataHost>
7.4 防火墙
开放8066端口
7.5 效果图:
8. 修改主从配置
8.1 新配my.cnf配置:本系统在/etc/mysql目录下
server-id:同一局域网内注意要唯一
log-bin:开启二进制日志功能,可以随便取(关键)
relay_log:relay_log配置中继日志
在my.cnf中添加如下配置:
master节点:
[mysqld]
server-id=100
log-bin=mysql-bin
slave节点:
[mysqld]
server-id=101
log-bin=mysql-bin
relay_log=edu-mysql-relay-bin
配置完成之后,使用service mysql restart重启mysql服务使配置生效。
8.2 链接Master和Slave
主从复制的话,就互为主从,即
1为主时;设置2为1的从
1为从时;设置2为1的主
master节点:
创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
flush privileges;
查看master节点的binlog状态:
show master status;
记住这个File和Position属性的值,配置slave的时候需要用
slave节点:
配置连接master
注意事项:在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 761, master_connect_retry=30;
mysql-bin.000014为show master status;中的File,154为show master status;中的Position
查看连接状态:
show slave status
启主从复制:
start slave;
9. 测试
9.1 新增数据是否同步
在主新增数据库,看从上是否有服务器
在从新增数据库,看主上是否有服务器
9.2 数据库宕机是否同步
关闭主节点,然后复制test1为test11
重启主节点,观察主节点是否有新增的表