Mariadb安装,主从热备操作步骤,MyCat配置安装实现读写分离

Posted 宇宙磅礴而冷漠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mariadb安装,主从热备操作步骤,MyCat配置安装实现读写分离相关的知识,希望对你有一定的参考价值。

Mycat安装步骤

上传压缩包到/home/app
解压
tar -xvf xxx.tar.gz
编辑conf下的文件
server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
        <property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0-->
	<property name="useHandshakeV10">1</property>
	<property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
	<property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->

		<property name="sequnceHandlerType">2</property>
      <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
        <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
	<!-- <property name="processorBufferChunk">40960</property> -->
	<!-- 
	<property name="processors">1</property> 
	<property name="processorExecutor">32</property> 
	 -->
        <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
		<property name="processorBufferPoolType">0</property>
		<!--默认是65535 64K 用于sql解析时最大文本长度 -->
		<!--<property name="maxStringLiteralLength">65535</property>-->
		<!--<property name="sequnceHandlerType">0</pruoperty>-->
		<!--<property name="backSocketNoDelay">1</property>-->
		<!--<property name="frontSocketNoDelay">1</property>-->
		<!--<property name="processorExecutor">16</property>-->
		<!--
			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
			<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
		<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
		<property name="handleDistributedTransactions">0</property>
		
			<!--
			off heap for merge/order/group/limit      1开启   0关闭
		-->
		<property name="useOffHeapForMerge">1</property>

		<!--
			单位为m
		-->
        <property name="memoryPageSize">64k</property>

		<!--
			单位为k
		-->
		<property name="spillsFileBufferSize">1k</property>

		<property name="useStreamOutput">0</property>

		<!--
			单位为m
		-->
		<property name="systemReserveMemorySize">384m</property>


		<!--是否采用zookeeper协调切换  -->
		<property name="useZKSwitch">true</property>

		<!-- XA Recovery Log日志路径 -->
		<!--<property name="XARecoveryLogBaseDir">./</property>-->

		<!-- XA Recovery Log日志名称 -->
		<!--<property name="XARecoveryLogBaseName">tmlog</property>-->

	</system>
	
	<!-- 全局SQL防火墙设置 -->
	<!--白名单可以使用通配符%或着*-->
	<!--例如<host host="127.0.0.*" user="root"/>-->
	<!--例如<host host="127.0.*" user="root"/>-->
	<!--例如<host host="127.*" user="root"/>-->
	<!--例如<host host="1*7.*" user="root"/>-->
	<!--这些配置情况下对于127.0.0.1都能以root账户登录-->
	<!--
	<firewall>
	   <whitehost>
	      <host host="1*7.0.0.*" user="root"/>
	   </whitehost>
       <blacklist check="false">
       </blacklist>
	</firewall>
	-->
	<!--用户标签-->
	<user name="root">
		<property name="password">xxxxx</property>
		<!--与schema.xml中的配置相同 注意数据库的大小写-->
		<!--<property name="schemas">db0,db1,db2,db3</property>-->
		<property name="schemas">db0</property>
	</user>

	<user name="user">
		<property name="password">user</property>
		<property name="schemas">db0</property>
		<!-- 只读的用户 -->
		<property name="readOnly">true</property>
	</user>
</mycat:server>

schema.xml文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	
	<!--name属性是自定义的  dataNode表示数据库的节点信息  db0表示逻辑库-->
	<schema name="db0" checkSQLschema="false" sqlMaxLimit="100" dataNode="db0"/>

	<!--定义节点名称/节点主机/数据名称-->
	<dataNode name="db0" dataHost="localhost1" database="db0" />
		<!--参数介绍 UTF-8 中文报错  使用单行注释 -->
		<!--balance 0表示所有的读操作都会发往writeHost主机 -->  
		<!--1表示所有的读操作发往readHost和闲置的主节点中-->
		<!--writeType=0 所有的写操作都发往第一个writeHost主机-->	
		<!--writeType=1 所有的写操作随机发往writeHost中-->
		<!--dbType 表示数据库类型 mysql/oracle-->
		<!--dbDriver="native"  固定参数 不变-->
		<!--switchType=-1 表示不自动切换, 主机宕机后不会自动切换从节点-->
		<!--switchType=1  表示会自动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会自动切换到第二个主节点-->
		<!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 表示第一个节点.该文件不要随意修改否则会出现大问题-->

		
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select 1</heartbeat>

		<!--配置第一台主机主要进行写库操作,在默认的条件下Mycat主要操作第一台主机在第一台主机中已经实现了读写分离.因为默认写操作会发往129的数据库.读的操作默认发往130.如果从节点比较忙,则主节点分担部分压力.
		-->
		<writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="xx">
			<!--读数据库1-->
			<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="xx" />
			<!--读数据库2-->
			<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="xx" />
		</writeHost>

			<!--定义第二台主机 由于数据库内部已经实现了双机热备.-->
			<!--Mycat实现高可用.当第一个主机129宕机后.mycat会自动发出心跳检测.检测3.-->
			<!--如果主机129没有给Mycat响应则判断主机死亡.则回启东第二台主机继续为用户提供服务.-->
			<!--如果129主机恢复之后则处于等待状态.如果130宕机则129再次持续为用户提供服务.-->
			<!--前提:实现双机热备.-->
		
		<writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="root">
			
			<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
			
			<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
		</writeHost>
		
	</dataHost>
</mycat:schema>

启动
进入bin目录下
./mycat 可查看命令提示
启动
./mycat start
查看状态
./mycat status
关闭
./mycat stop

Mysql安装

注意防火墙

关闭systemctl stop firewalld.service
启动systemctl start firewalld.service
手动开放防火墙端口
检查防火墙开放的端口 firewall-cmd --list-ports
检查端口是否开放 firewall-cmd --query-port 80/tcp
开启防火墙 firewall-cmd --zone=public --add-port=80/tcp --permanent
移除端口 firewall-cmd --zone=public --remove-port=9090/tcp --permanent

安装

yum  install mariadb-server 
1.   启动命令    [root@localhost src]# systemctl  start  mariadb
2.   重启命令    [root@localhost src]# systemctl  restart  mariadb
3.   关闭命令    [root@localhost src]# systemctl  stop  mariadb
4.   设定开机自起 [root@localhost src]# systemctl  enable mariadb 
5.   关闭开机自起 [root@localhost src]# systemctl  disable mariadb 

初始化

mysql_secure_installation

Enter current password for root (enter for none):<–初次运行直接回车
在这里插入图片描述
Y修改root用户的密码
然后输入密码
在这里插入图片描述
接下来
Remove anonymous users? [Y/n] 是否删除匿名用户,可以Y也可以直接回车

Disallow root login remotely? [Y/n] 是否禁止root远程登录,推荐n,这里Y有可能会导致数据库不可用

Remove test database and access to it? [Y/n] 是否删除test数据库,可以Y也可以直接回车

Reload privilege tables now? [Y/n] 是否重新加载权限表,可以Y也可以直接回车

进入数据库执行

mysql -uroot -p
use mysql;
update user set host="%" where host="localhost";
#然后刷新权限
flush privileges;

现在远程工具就能连接该数据库了

Mysql主从热备

先安装好两台数据库机器(ip尾号,这里有主100和从101两台)

vim /etc/my.cnf
在symbolic-links=0下面写
server-id=1
log-bin=mysql-bin

在symbolic-links=0下面写
server-id=2
log-bin=mysql-bin
在这里插入图片描述
重启两台数据库systemctl restart mariadb
重启后/var/lib/mysql/会多出文件(mysql-bin.000001)(如果之前有的话可以先删除了再重启,影响不大)
要把101当作从挂载到100主上
先在100主里执行命令
show master status
在这里插入图片描述
然后进入101(根据100的查询结果输入参数,File和Position参数)执行挂载命令
在这里插入图片描述
然后101再执行
start slave
在这里插入图片描述
常用命令
开启start slave
关闭stop slave
查看状态show slave status
在这里插入图片描述
现在对主库100写操作,从库也会同步操作,但是对101从库写操作的话,主库100不会同步
所以也可以让101和100进行互为主从(自行操作)
注意:
如果重启100主库,mysql-bin文件会多个mysql-bin.000002这时候从库状态改成正在重连主库状态
需要重新把从库挂载到100上,使用mysql-bin.000002参数

以上是关于Mariadb安装,主从热备操作步骤,MyCat配置安装实现读写分离的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB 主从同步与热备(14)

Demo之Mycat读写分离面试+工作

Linux安装mysql配置双机热备(主/主复制)+ Keepalived(故障转移)

linux中mycat的配置,分片,以及主从复制

Mariadb5.5.52 主从复制集群的安装步骤

Mycat——分表分库组件