linux配置mysql主从配置并搭建mycat

linux配置mysql主从配置并搭建mycat

mysql 分库分表原理


一、搭建mysql主从配置(一主一从)

1.前期准备

  1. 准备两个虚拟机
  2. 安装mysql数据库,安装教程看我csdn就行

2.现在设置主库

  1. 修改mysql配置文件
vim /etc/my.cnf


[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
tmpdir=/data/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
# 这个是主从库数据同步的数据库(不写这个就是主从全部同步)
# binlog-do-db=wqytest
# binlog-ignore-db=mysql 设置不同步的数据库
log-bin=mysql-bin

#Esc :wq 保存并退出
  1. 创建从库访问主库的用户
mysql -uroot -p123456
#给从库放权限
mysql> use mysql
mysql>GRANT FILE ON *.* TO 'root'@'49.232.134.35' IDENTIFIED BY 'root password';   #创建用户

mysql>GRANT REPLICATION SLAVE ON *.* TO 'root'@'49.232.134.35' IDENTIFIED BY 'root password';  #修改用户权限

mysql>select host ,user ,password from user;  #查看是否修改成功

mysql>FLUSH PRIVILEGES;   #刷新

在这里插入图片描述

  1. 查看刚刚创建的用户名密码

mysql> select Host,User from user;

在这里插入图片描述
4. 创建同步数据库

#创建数据库: 在从库中创建一个和主库相同的数据库,不然两个数据库不能同步(进行过数据迁移就跳过)
mysql> CREATE DATABASE wqytest CHARACTER SET utf8 COLLATE utf8_general_ci;
#查看日志文件名称
mysql> show master status;
#退出
mysql> exit

注:如果执行这个步骤始终为Empty set(0.00 sec),那说明前面的my.cnf没配置对
在这里插入图片描述
5. 查看日志文件(从库要用到的)
在这里插入图片描述

3.现在设置从库

vim /etc/my.cnf

[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
#添加server_id(比主库大就行)
server_id=5
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
#配置同步数据库
replicate-do-db=wqytest
log-slave-updates
#按Esc :wq 保存并退出
#重启mysql
service mysql restart
chkconfig --list  查询服务列表

#登录
mysql -uroot -p123456
#停止
mysql> stop slave;
#设置主库相关信息
mysql> change master to master_host='81.70.170.21',master_user='root',master_password='123456',master_log_file='mqsql-bin.000001';
#重启slave
mysql> start slave;
#复位为了防止出现错误
mysql>stop slave;  //停止
mysql>reset slave;  //清空
mysql>start slave;  //开启
#查看配置信息
mysql> show slave status \G;

在这里插入图片描述

二、安装mycat

mycat逻辑图
在这里插入图片描述

1.准备环境

刚刚安装mysql 主节点的服务器安装 jdk8

github安装地址
https://github.com/MyCATApache/Mycat-download
官网
http://www.mycat.org.cn/mycat.io
我的是1.6的 https://pan.baidu.com/s/1FBHU-hH6fO1xDkNxSykheQ
提取码是:ko98

2. 安装

下载的mycat上传到服务器 解压
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

mkdir -p /usr/local/mycat
tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/mycat
cd /usr/local/mycat/mycat
目录说明
binmycat命令,启动、重启、停止等
catletcatlet为Mycat的一个扩展功能
confMycat 配置信息,重点关注
libMycat引用的jar包,Mycat是java开发的
logs日志文件,包括Mycat启动的日志和运行的日志。

在这里插入图片描述

3.了解配置schema.xml server.xml rule.xml

mycat 主要配置这三个

1.了解schema.xml

配置参考:https://blog.csdn.net/lch520baby/article/details/89100176

配置参考解读链接:https://blog.csdn.net/lch520baby/article/details/89096327

2.了解server.xml

主要是找user标签

# name 登录的用户名(连接mycat的用户名)
	<user name="root">
		<property name="password">123456</property>
		# 逻辑库名 和schemas.xml 里面的关联,多个用,分割
		<property name="schemas">TESTDB</property>
		<property name="schemas">TESTDB</property>
		<!-- 表级 DML 权限设置 check sql表示不检测 -->
		<!-- 		
		<privileges check="false">
		# dml 就是规则配置 0110 第一个insert插入 第二个1 表示update 第三个表示select查询 第四了表示delete 0表示禁止
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>

	<user name="user">
		<property name="password">user</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">true</property>
	</user>

3.了解rule.xml

主要是tableRule 和function 对应
tableRule :指定分片规则的(读写分离用不到的,只有在分库的时候能用到)
在这里插入图片描述

<function name="murmur"
		class="io.mycat.route.function.PartitionByMurmurHash">
		<property name="seed">0</property><!-- 默认是0 -->
		<property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
		<property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160-->
		<!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
		<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
			用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
	</function>

三. 配置读写分离

我的表信息
在这里插入图片描述

1.配置schema.xml

配置一个主从数据库的读写分离就改4个地方
第一个:<schema name="
第二个:<table name=“user” dataNode=“dn1”
第三个:<dataNode name=“dn1” dataHost=“localhost1” database=“wqytest”
第四个:<dataHost name=“localhost1” maxCon="1000 里面的内容

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!-- 逻辑库的一个名字 随便取  checkSQLschema属性:当前端执行【select *from USERDB.tf_user;】时(表名前指定了mycat逻辑库名),两种取值:true:mycat会把语句转换为【select * from tf_user;】
false:会报错 -->
	<schema name="suibian" checkSQLschema="true" sqlMaxLimit="100">
		<!-- auto sharding by id (long)  -->
		<!-- 逻辑表(配置主从mysql真实的表名对应) dataNode和dataNode标签对应 -->
		<table name="user" dataNode="dn1" />
	</schema>
     <!--dataHost和dataHost标签对应 database对应真实的数据库名 -->
	<dataNode name="dn1" dataHost="localhost1" database="wqytest" />
	<!-- 对应dataNode标签  -->
	<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="81.70.170.21:3306" user="root"
				   password="123456">
			<!-- can have multi read hosts 对应从库地址 -->
			<readHost host="hostS2" url="49.232.134.35:3306" user="root" password="123456" />
		</writeHost>
		<writeHost host="hostS1" url="localhost:3316" user="root"
				   password="123456" />
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>
</mycat:schema>

2.配置server.xml

这里修改一下配置<property name="schemas 这里面是schema.xml 中的逻辑库名称一定到对应

<user name="root">
		<property name="password">123456</property>
		<property name="schemas">suibian</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>

	<user name="user">
		<property name="password">user</property>
		<property name="schemas">suibian</property>
		<property name="readOnly">true</property>
	</user>

3.启动mycat

cd /usr/local/mycat/mycat/bin
./mycat start
#看状态
./mycat status
#如果没启动看看日志
./mycat console
#停止
./mycat stop
#重启
./mycat restart

#看具体日志
cd ../logs/

在这里插入图片描述

4.测试mycat

我是用的navicat测试的,如果没有我这有安装包
链接:https://pan.baidu.com/s/1kTAQD3wUISo7Z2H4d3xKNw
提取码:eky0
在这里插入图片描述
这个用户名密码就是server.xml 里面的

<user name="root">
		<property name="password">123456</property>

打开以后有一个之前schem.xml逻辑库名称 还有一个表
在这里插入图片描述

四、配置分库

1.前期准备

  1. 先在主从库分别配置3个数据库 6个数据库建表
create database demo1 default character set utf8;
create database demo2 default character set utf8;
create database demo3 default character set utf8;

create table `t_users`(
	`id` int(11) not null auto_increment,
	`name` varchar(255) default null,
	primary key (`id`)
) engine=innodb default charset=utf8mb4 

在这里插入图片描述

2.配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!-- 逻辑库的一个名字 随便取  -->
	<schema name="suibian" checkSQLschema="true" sqlMaxLimit="100">
		<!-- auto sharding by id (long)  -->
		<!-- 逻辑表(配置主从mysql真实的表名对应) dataNode和dataNode标签对应  rule 对应rule.xml表中的 tableRule name="crc32slot" 名称-->
		<table name="t_users" dataNode="dn1,dn2,dn3"  rule="crc32slot"/>
	</schema>
	<!--dataHost和dataHost标签对应 database对应真实的数据库名 -->
	<dataNode name="dn1" dataHost="localhost1" database="demo1" />
	<dataNode name="dn2" dataHost="localhost1" database="demo2" />
	<dataNode name="dn3" dataHost="localhost1" database="demo3" />
	<!-- 对应dataNode标签  -->
	<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="81.70.170.21:3306" user="root"
				   password="123456">
			<!-- can have multi read hosts 对应从库地址 -->
			<readHost host="hostS2" url="49.232.134.35:3306" user="root" password="123456" />
		</writeHost>
	</dataHost>
</mycat:schema>

修改rule.xml

<function name="crc32slot"
			  class="io.mycat.route.function.PartitionByCRC32PreSlot">
		<property name="count">3</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
	</function>

3. 重启mycat

重启 mycat bin目录下

./mycat restart

1.重启之后会在conf目录下生成ruledata
2.如果要在schema.xml中改变分片规则,就要把这个目录删了重启mycat

4.测试mycat

在navicat 中连接mycat

  1. 删除主库表
    在这里插入图片描述
  2. 在mycat中创建表
    在这里插入图片描述
  3. 在mycat中插入一条数据
insert into t_users(id,name) VALUES(1,"zhangsan")

在这里插入图片描述
发现在主库的demo2的表中有刚刚插入的数据
在这里插入图片描述
里面的_slot是根据rule.xml算法crc32算出来的,在conf目录ruledata下的文件夹中的文件写明这个值在什么范围内会加到哪个表中
咱们现在是44983所以在demo1的数据库中
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值