Redis-主从复制&数据恢复&故障处理&哨兵的故障转移
redis主从复制准备工作12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061使用rsync服务将db01目录下已经编译好的redis安装目录推送到从节点db02上。[root@db01 ~]# rsync -avz -e "ssh -p 22" /application/redis_cluster root@10.0.0.52:/application/检查db02:[root@db02 ~]# tree /application/redis_cluster/ -L 1/application/redis_cluster/├── redis -> /application/redis_cluster/redis-5.0.5/├── redis-3.2.12├── redis-5.0.5└── redis_6379修改配置文件:[root@db02 ~]# cat /applicatio ...
Redis-数据类型&持久化&安全认证和配置的热更新
全局命令Redis 有 5 种数据结构,他们是键值对中的值,对于键来说有一些通用的命令.
查看所有命键Keys * // 十分危险的命令,线上禁止使用
查看键的总数Dbsize // dbsize 命令在计算键总数时不会遍历所有键,而是直接获取 Redis 内置的键总数变量.
检查键是否存在Exists key // 如果键存在则返回 1,不存在则返回 0
删除键Del key [key …] // 通用命令,无论值是什么数据结构类型,del 命令都可以将其删除.
1234127.0.0.1:6379> DEL key3(integer) 1 //存在并成功删除127.0.0.1:6379> EXISTS key3(integer) 0 //不存在,且删除失败
键过期Expire key seconds // Redis 支持对键添加过期时间,当超过过期时间后,会自动删除键.// 通过 ttl 命令观察键的剩余时间大于等于 0 的证书: 键剩余过期时间
-1: 键没设置过期时间
-2: 键不存在
PERSIST key//去掉键过期时间,转永久
12345678910 ...
Redis-5.0.5介绍与C7下的编译安装
Redis 是什么
Redis 是一种基于键值对的 NoSQL 数据库,与很多键值对数据库不同,redis 中的值可以有string,hash,list,set,zset,geo 等多种数据结构和算法组成.
Redis 会将所有的数据都放在内存中,所以他的读写性能非常惊人.Redis 还可以将内存中的数据利用快照和日志的形式保存到硬盘上
Redis 提供了键过期,发布订阅,事务,流水线等附加功能.
Redis 重要特性
1.速度快
Redis 所有的数据都存放在内存中
Redis 使用 C 语言实现
Redis 使用单线程架构
2.基于键值对的数据结构服务器
5 中数据结构:字符串,哈希,列表,集合,有序集合
3.丰富的功能
提供了键过期功能,可以实现缓存
提供了发布订阅功能,可以实现消息系统
提供了 pipeline 功能,客户端可以将一批命令一次性传到 Redis,减少了网络开销
4.简单稳定
源码很少,3.0 版本以后 5 万行左右.
使用单线程模型法,是的 Redis 服务端处理模型变得简单.
不依赖操作系统的中的类库
5.客户端语言多
java,PHP ...
MySQL终章-系列优化
环境准备:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859准备100w行数据包,留作压力测试。db03 [(none)]>create database oldboy;Query OK, 1 row affected (0.00 sec)db03 [(none)]>use oldboy;Database changeddb03 [oldboy]>create table t100w ( -> id int,num int, -> k1 char(2), -> k2 char(4), -> dt timestamp) charset utf8mb4 collate utf8mb4_bin;Query OK, 0 rows affected (0.01 sec)db03 [oldboy]>delimiter //db03 [oldboy]>cre ...
MySQL-MyCAT多主多从环境下实现表的水平拆分
水平拆分算法范围分片:数据进行范围分割,分布到不同的节点上取模分片:通过将数据行的id值和节点数量进行取模得到的余数=节点编号(从0开始),从而实现将数据行平均分布到各个节点枚举分片:数据通过省市等等范围进行枚举分片。不同地区或者不同条件的数据归类到一个节点时间分片:对数据按照时间进行归纳,分布到不同的节点上
范围分片:适用情况
(1)行数非常多,2000w(1-1000w:sh1 1000w01-2000w:sh2)
(2)访问非常频繁,用户访问较离散
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566//定义哪张表要被分片[root@db02 /application/mycat/conf]# cat >schema.xml <<'EOF'<?xml version="1.0"?><!DOCTYPE myca ...
MySQL-MyCAT多主多从环境下实现表的垂直拆分
双主环境搭建参见:https://cakepanit.com/forward/d3c702fe.html
垂直拆分:
mycat垂直分表配置文件1234567891011121314151617181920212223242526272829303132[root@db02 ~]# cd /application/mycat/conf/[root@db02 /application/mycat/conf]# mv schema.xml schema.xml.ha[root@db02 /application/mycat/conf]# cat >schema.xml <<'EOF'<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB&qu ...
MySQL-MyCAT基础架构&实现高可用和读写分离
环境准备:两台虚拟机 db01 db02创建四个mysql实例:3307 3308 3309 3310架构图:
删除历史环境pkill mysqldrm -rf /data/*mv /etc/my.cnf /etc/my.cnf.bak
创建数据目录,并初始化数据12345mkdir /data/33{07..10}/data -pmysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/application/mysqlmysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/application/mysqlmysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/application/mysqlmysqld --initialize-insecure -- ...
MySQL-MHA+Atlas+VIP+Binlog server实现MySQL的高可用和读写分离
说明MHA&VIP&邮件告警构建参见:https://cakepanit.com/forward/c919a25c.htmlbinlogserver:实时抓取主库的binlog日志,防止极限情况下的主库宕机,而从库接管时出现数据不全的情况Atlas:配合MHA的vip高可用,实现主从复制的读写分离相关操作
binlogserver配置:修改配置文件找一台额外的机器,必须要有5.6以上的版本,支持gtid并开启,我们直接用的第二个slave(db03)
12345vim /etc/mha/app1.cnf [binlog1]no_master=1 //表示此节点不参与主从选举hostname=192.168.56.4master_binlog_dir=/data/mysql/binlog //用于保存主库Pull过来的二进制的本地路径
创建必要目录12mkdir -p /data/mysql/binlogchown -R mysql.mysql /data/*
修改完成后,将主库binlog拉过来(从000001开始拉,之后的binlog会自动按顺序过来)拉取主库binl ...
MySQL-MHA的VIP高可用_邮件告警
MHA 的vip功能MHA开启vip的作用
用于支持应用透明,是构建主从高可用必须开启的功能
构建主从高可用参见:https://cakepanit.com/forward/c70898d5.html
MHA的vip功能参数:master_ip_failover_script=/usr/local/bin/master_ip_failover注意:/usr/local/bin/master_ip_failover,必须事先准备好
编写perl脚本12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485vim /usr/local/bin/master_ip_failover#!/usr/bin/env perluse strict;use warnings FATAL => 'all';use G ...
MySQL-MHA环境准备_搭建_故障恢复
需要用到的软件包;
Atlas-2.2.1.el6.x86_64.rpm
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm
分别上传到三个主从节点上基于GTID的1主2从构建过程参见:https://cakepanit.com/forward/c3e1b71a.html
配置关键程序软连接123ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlogln -s /application/mysql/bin/mysql /usr/bin/mysql#MHA 无法调用环境变量
各个节点配置互信12345678#db01rm -rf /root/.ssh ssh-keygen //生成密钥对cd /root/.ssh/mv id_rsa.pub authorized_keysscp -r /root/.ssh 192.168.56.3:/rootscp -r /root/.ssh 1 ...
MySQL-主从复制_过滤复制_半同步复制_GTID复制
环境准备延迟从库后进行环境恢复
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657581.主从之间差一个数据库。2.删掉3308中的delay数据库。从库:mysql> drop database delay;3.检查3308数据库是否同步主库:mysql> show master status \G //查看主库起点File: mysql-bin.000001Position: 1730从库:mysql> show slave status \G Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 1730 //由于主库3307中最后一个操作是删除delay库。从库中在第二步也将恢复的数据删除了。所以刚好同步Slave_SQL_Running: No4.重启主从复制:mysql> stop slave;Query OK, 0 rows affe ...
MySQL-主从复制_延时从库
延时从库解决数据损坏
物理损坏
误操作rm
磁盘阵列损坏
机房爆炸
逻辑损坏
删库跑路
对于传统的主从复制,比较擅长处理物理损坏。
设计理念对SQL线程进行设置延迟。
延迟多久合适企业生产中一般设置延迟3-6个小时
如何设置12345678910111213141516171819202122232425262728从库:mysql> show slave status \GSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesmysql> stop slave;mysql> CHANGE MASTER TO MASTER_DELAY = 300;mysql> start slave;mysql> show slave status \GSQL_Delay: 300SQL_Remaining_Delay: NULL //最近一个事务的SQL剩余延迟Slave_SQL_R ...
MySQL-主从复制基础&故障分析
主从复制介绍依赖于二进制日志的,“实时”备份的一个多节点架构
主从复制的前提(搭建主从复制)
2.1至少两个实例
2.2不同的server_id
2.3主库开启二进制日志
2.4主库需要授权一个专用复制用户
2.5主库数据备份(插班生补课)
2.6开启专用复制线程
主从复制环境准备准备多实例略[参见:链接]
123456789101112131415161718192021222324252627282930[root@db01 ~]# mv /etc/my.cnf{,.bak}[root@db01 ~]# cat /etc/systemd/system/mysqld3309.service [Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-u ...
MySQL-数据备份&恢复&迁移
知识点回顾:存储引擎(1)InnoDB(默认使用引擎,也是企业常用的)
热备
独立表空间(每个表一个表空间)
redo:重做日志,用来前滚
undo:回滚日志,用来回滚(未提交的事务)
行级别锁,基于索引来实现的,GAP锁
支持事务。
(2)MyISAM
温备
三个文件构成
表级锁
2、二进制日志(1)记录的是什么?
DDL、DCL这些种类语句,记录的就是操作语句
DML:他记录的已提交的事务日志,并支持多种格式记录(row、statement、mixed)
(2)事件
开始位置(at xxx)
结束位置(下一个at)
一个事务,有多个事件做成(begin到commit)
(3)截取二进制日志
1、分析二进制日志
找到要截取日志的开始位置(start-position)和结束位置(stop-position)
解码查看:mysqlbinlog –base64-output=decode=rows -vvv
2、截取日志
mysqlbinlog –start-position=xxx –stop-position=xxx。//基于position号截取
mysqlbinlog ...
MySQL-日志管理[slowlog慢日志]
优化相关日志-slowlog作用
记录慢SQL语句的日志,定位低效SQL语句的工具日志
开启慢日志
开关:
slow_query_log=1
文件位置及名字
slow_query_log_file=/data/mysql/slow.log
设定慢查询时间:
long_query_time=0.1
没走索引的语句也记录:
log_queries_not_using_indexes
慢日志默认位置:123456mysql> select @@slow_query_log_file;+-------------------------------+| @@slow_query_log_file |+-------------------------------+| /data/3307/data/db01-slow.log |+-------------------------------+
慢日志记录容忍度:123456mysql> select @@long_query_time;+-------------------+| @@lo ...
MySQL-日志管理[GTID]
GTID思考问题?下面怎么恢复?1234567891011121314151617#1. create database binlog charset utf8mb4;#2. use binlog;create table t1(id int);#3. insert into t1 values(1);commit;insert into t1 values(2);commit;truncate table t1;insert into t1 values(3);commit;#4. drop database binlog;
原因:基于position号恢复需要多次截取,找起点和终点过程很复杂。
什么是GTID(全局事务编号)5.6 版本新加的特性,5.7中做了加强5.6 中不开启,没有这个功能.5.7 中的GTID,即使不开也会有自动生成SET @@SESSION.GTID_NEXT= ‘ANONYMOUS’ //匿名的GTID。用于系统自身维护
是对于一个已提交事务的编号,并且是一个全局唯一连续的编号。它的官方定义如下:GTID = source_id :transaction_ ...
MySQL-日志管理[bin_log原理&恢复案例]
日志管理:排错1.1.1 错误日志查看:
1234567mysql> select @@log_error;+----------------------+| @@log_error |+----------------------+| /data/3307/mysql.log |+----------------------+#默认日志路径 :DATADIR/hostname.err
1.1.2配置方式修改:
12vim /data/3307/my.cnflog_error=/data/3307/mysql.log //多实例下日志路径
数据恢复binlog(二进制日志)作用:数据恢复、主从复制
如何配置
log_bin //开关、设定存放位置
server_id(5.6不需要添加此参数,5.7以上必须加)
*生产要求:**日志和数据分开存放
1234567891011121314151617181920212223[root@db01 ~]# mkdir /data/binlog -p[root@db01 ~]# vim /data/3307/my.c ...
树莓派3B-安装java8部署Minecraft服务器
java8(arm)下载地址
1)32位:https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-arm32-vfp-hflt.tar.gz
2)64位:https://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-arm64-vfp-hflt.tar.gz
安装创建安装目录:mkdir -p /app/java
解压:1tar -xf jdk-8u212-linux-arm64-vfp-hflt.tar.gz -C /app/java/
添加环境变量:123456vim /etc/profileexport JAVA_HOME=/app/java/jdk1.8.0_212export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar. ...
MySQL-锁
锁什么是“锁”?
“锁”顾名思义就是锁定的意思。
“锁”的作用是什么?
在事务ACID过程中,“锁”和“隔离级别”一起来实现“I”隔离性的作用。
避免争抢资源
锁的粒度:
1、MyIasm:低并发锁——表级锁
2、Innodb:高并发锁——行级锁
InnoDB锁级别
行级锁
Next lock下键锁
GAP lock 间隙锁
悲观锁:排他性,不能不能同时修改同一行数据
乐观锁
行级锁,谁先操作某个数据行,就会持有<这行>的锁
扩展内容
Next lock下键锁
GAP Lock间隙锁
为何出现锁等待/死锁等情况:交叉的事务出现,导致的锁等待事务1:状态未提交事务2:一同更新同一行数据,会出现锁等待
死锁:事务交叉,互相依赖造成死锁
四种隔离级别12345678910111213141516READ UNCOMMITTED 允许事务查看其他事务所进行的未提交更改READ COMMITTED 允许事务查看其他事务所进行的已提交更改//屏蔽脏读,会出现不可重复读。和幻读现象REPEATABLE READ****** 确保每个事务的 SELECT ...
MySQL-事务的ACID特性
事务的ACID特性作用是什么?
影响了DML语句(insert update delete 一部分select)
Atomic(原子性)》我收你发要么全部成功,要么一起失败,原子性(所有语句作为一个单元全部成功执行或全部取消。不能出现中间状态。)
Consistent(一致性)》我发多少你收多少,不出现错误。一致性(如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。)
Isolated(隔离性)》不能并发修改同一数据(事务之间不相互影响。)
Durable(持久性)》不管宕机与否,业务操作都落地到磁盘中(事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。)
定义:具备ACID特性的一组操作,被定义为事物事务的生命周期(事务控制语句)
事务的开始begin; / start transaction;**说明:**在5.5 以上的版本,不需要手工begin,只要你执行的是一个DML,会自动在前面加一个begin命令。
事务的结束
commit:提交事务(完成一个事务,一旦事务提交成功 ,就说明具备ACID特性了。)
rollback ...