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配置安装实现读写分离的主要内容,如果未能解决你的问题,请参考以下文章