mysql5.7安装可以网上百度,有很多教程。这里主要讲解主从配置的设置,从库不设置只读操作
# 编辑my.cnf文件
vi /etc/my.cnf
# 修改如下配置
[mysqld]
log_bin=mysql-bin # 二进制日志的文件名称
server_id=1 # 服务器的唯一id
# 为了在使用InnoDB和事务的复制设置中获得最大的持久性和一致性,建义配置以下两项
innodb_flush_log_at_trx_commit=1
sync_binlog=1
# 重启服务器
systemctl restart mysqld
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; # 创建用户,生产环境不建议放开ip
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; # 分配权限
flush privileges; # 刷新权限数据
SHOW MASTER STATUS;
[mysqld]
server-id=2 # 增加此项配置,值是唯一,与主库的不重复
systemctl restart mysqld
# MASTER_LOG_FILE指主服务器二进制文件名称,MASTER_LOG_POS指同步的下标位置,可通过查看主库master状态得到
CHANGE MASTER TO MASTER_HOST='192.168.174.130', MASTER_USER='slave', MASTER_PASSWORD='123456'; MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000012', MASTER_LOG_POS=1063;
START SLAVE; # 开启从库
STOP SLAVE; # 停止从库
SHOW SLAVE STATUS; # 查看从库状态
mycat是一款性能好、功能强大、稳定的数据库中间件。使用简单,可用于数据库读写分离、分库分表。提高数据存储层的性能和存储容量。对业务代码透明,不需要修改dao层即可无缝扩展。
可以把mycat看成一个数据库,就像使用mysql一样的去连接和使用,没有任何区别。mycat是用java语言开发的,可以想像成一个类似于tomcat的程序,安装简单。下载好tar包,解压后,修改配置文件,起动即可。
wget http://dl.mycat.io/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
tar -zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz -C /usr/local/
解压后的目录结构如下:
bin目录主要存放了启动、停止mycat服务器的脚本命令
conf目录下有几个重要的配置文件,比如:server.xml、schema.xml。后面会重点介绍。
lib目录下存放项目使用到的第三方jar包。
logs目录下存放系统的运行日志。
vi /etc/profile # 编辑文件
# 在文件的最尾处追加如下内容
export MYCAT_HOME=/usr/local/mycat
# 让配置文件生效
source /etc/profile
useradd mycat # 新建mycat用户
passwd mycat # 设置mycat用户的密码,可以不设置,通过root用户切换
chown -R mycat:mycat /usr/local/mycat # 把mycat的安装目录的用户和用户组修改成mycat
/usr/local/mycat/bin/mycat start # 起动mycat服务
/usr/local/mycat/bin/mycat stop # 停止mycat服务
/usr/local/mycat/bin/mycat restart # 重启mycat服务
ps -ef | grep mycat # 查看mycat服务进程,确认是否已起动
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="catdb" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
schema>
<dataNode name="dn1" dataHost="dh1" database="orders" />
<dataNode name="dn2" dataHost="dh2" database="orders" />
<dataHost name="dh1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()heartbeat>
<writeHost host="myhostM1" url="192.168.174.130:3306" user="root" password="123456">
<readHost host="myhostS1" url="192.168.174.128:3306" user="root" password="123456" weight="1" />
writeHost>
dataHost>
<dataHost name="dh2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()heartbeat>
<writeHost host="myhostM2" url="192.168.174.130:3306" user="root" password="123456">writeHost>
<writeHost host="myhostS2" url="192.168.174.128:3306" user="root" password="123456">writeHost>
dataHost>
mycat:schema>
<user name="root" defaultAccount="true">
<property name="password">123456property>
<property name="schemas">catdbproperty>
user>
/usr/local/mycat/bin/mycat restart
测试内容包括使用工具连接mycat,通过mycat创建表,增加、修改、删除、查询数据。
编者使用的是mysql workbench 6.3.10版本,8.0的版本实测无法连接mycat,一直报密码错误,此处需要注意一下。连接跟普通的mysql连接没有任何区别,只需要把端口改成8066就可以。
首先,直连mysql主库建立好orders数据库,OK了之后从库会同步到数据。然后在mycat上执行如下命令
# 新创t_order表
CREATE TABLE t_order(id BIGINT PRIMARY KEY, order_time DATETIME, customer_id BIGINT, order_amount DECIMAL(10,2));
# 插入一些测试数据
INSERT INTO t_order VALUES (2, NOW(), 1001, 200.88);
INSERT INTO t_order VALUES (3, NOW(), 1002, 168.88);
INSERT INTO t_order VALUES (4, NOW(), 1003, 198.88);
执行成功后,直连mysql主库和从库,检查表和数据是否已经创建好。
项目应用了读写分离机制后,写操作都会走主库节点。在代码层面读操作都不要事务,否则会去主库查询而非从库查询,并且如果读操作在其它事务方法里面,那么它也会去主库查询。