公司的一个项目生产环境采用读写分离,一主多从模式。参考的网上很多数据库中间件,决定选择用mycat搭建一主一从
、一主多从
、主从容灾切换
这些基本模式,先从一主一从
入手。家里一台电脑有限,决定使用ubuntu16+docker compose来搭建多镜像。
首先创建一个虚拟机:
开启用xshell连接上,docker、compose版本如下
image.png
一、docker compose搭建两个mysql
创建文件夹/usr/local/docker/mysql
,分别创建master
、slave1
两个文件夹,在master、slave1里创建文件my.ini
数据库初始化
master/my.ini
如下:
[mysqld]
# server-id是唯一值,主从复制的关键
server-id=1
# 设置3306端口,主节点
port=3306
## 开启二进制日志功能,让从节点同步
log-bin=mysql-master-bin
## relay_log配置中继日志
relay_log=slave1-relay-bin
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
slave1/my.ini
如下:
[mysqld]
[mysqld]
# server-id是唯一值,主从复制的关键
server-id=2
# 设置3307端口,从节点
port=3307
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
在/usr/local/docker/mysql
下创建docker-compose.yml
内容如下:
说明:当前最新的数据库2019年12月7日 mysql8.0.18,主节点端口3306,从节点3307,密码都是123456
version: '3.1'
services:
master:
image: mysql:8.0.18
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./master/data:/var/lib/mysql
- ./master/my.cnf:/etc/my.cnf
slave1:
image: mysql:8.0.18
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3307:3307
volumes:
- ./slave1/data:/var/lib/mysql
- ./slave1/my.cnf:/etc/my.cnf
image.png
运行docker-compose.yml:
docker-compose up
然后我们windows主机用navicat11连接虚拟机的数据库master和slave1
image.png
image.png
二、配置主从同步
检查状态
首先查询数据库的id: show variables like 'server_id';
slave1.png
也可以查看当前数据库开放的端口:
show global variables like 'port';
port.png
设置同步
1、master主节点
在master:3306中创建一个用户lingkang密码lingkang_top,用于从节点链接主节点时使用:
#192.168.75.129是VMWare的地址,使用 % 允许任何ip连接
CREATE USER 'lingkang'@'%' IDENTIFIED
WITH mysql_native_password BY 'lingkang_top';
GRANT REPLICATION SLAVE ON *.* TO 'lingkang'@'%';
#由于我使用Navicat执行sql,需要改下加密规则,否则Navicat链接lingkang这个用户失败!
ALTER USER 'lingkang'@'%' IDENTIFIED BY 'lingkang_top' PASSWORD EXPIRE NEVER;
# 刷新授权信息
flush privileges;
# 获取主节点当前binary log文件名和位置(position)
SHOW MASTER STATUS;
master.png
几下:
mysql-master-bin.000001
和6366
2、slave1从节点
reset slave; #先复位从节点
CHANGE MASTER TO
MASTER_HOST='192.168.75.129', #此处为vmware主机的地址
MASTER_USER='lingkang',
master_port=3306, #主节点端口
MASTER_PASSWORD='lingkang_top',
MASTER_LOG_FILE='mysql-master-bin.000001', # 主节点的
MASTER_LOG_POS=6366; # 主节点的
# 开启主从同步
start slave;
# 查看主从同步状态
show slave status;
slave1.png
slave1.png
在master创建一个数据库试试:然后刷新从库可以看到了,说明主从同步成功!
master.png
三、搭建Mycat
搭建Mycat根据官网就能完成搭建 http://www.mycat.io/
首先下载到Linux上的/usr/local/mycat,我们使用当前2019年12月7日最新release
版1.6.7.3
mkdir /usr/local/mycat
cd /usr/local/mycat
//下载最新release
wget http://dl.mycat.io/1.6.7.3/20190828135747/Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
//解压
tar -zxvf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
//删除,我这里暂时不删除,后面还要搭建一主多从、多主从从
rm -rf Mycat-server-1.6.7.3-release-20190828135747-linux.tar.gz
cd mycat
cd conf
vi server.xml
修改下最下面的user
、root
两个用户的数据库lingkangDB、密码666666
<user name="root" defaultAccount="true">
<property name="password">666666</property>
<property name="schemas">lingkangDB</property>
</user>
<user name="user">
<property name="password">666666</property>
<property name="schemas">lingkangDB</property>
<property name="readOnly">true</property>
</user>
image.png
编辑schema.xml(关键)
vi schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 这里对应 server.xml 的lingkangDB -->
<schema name="lingkangDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="myNode">
</schema>
<!--数据节点, 我们在数据库中先创建一个名为lingkang的数据库-->
<dataNode name="myNode" dataHost="mycat-node-host" database="lingkang" />
<dataHost name="mycat-node-host" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="master" url="192.168.75.129:3306" user="root" password="123456">
<readHost host="slave1" url="192.168.75.129:3307" user="root" password="123456">
</readHost>
</writeHost>
</dataHost>
</mycat:schema>
启动mycat
我们知道mycat用java写的,需要jdk环境,我们需要安装jdk,由于篇幅,在另一篇文章中介绍jdk的安装:https://www.jianshu.com/p/da1fb70123e1
启动前先去master数据库创建lingkang
这个数据库,然后运行mycat默认管理端口9066,连接端口8066
cd ..
cd bin
chmod +x *
//运行
./mycat console
image.png
启动成功!使用Navicat访问mycat:管理端口是9066,连接是8066
image.png
最后项目连接mycat即可,一主多从:多配置几个slave即可。
关于测压:
电脑2核4线程的cpu测不动,留着以后有机会再测压。
关于遇到的坑:
MySQL8设置下密码加密方式才能正常使用navicat了解。
网友评论