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 ...
MySQL-InnoDB存储引擎&优化
存储引擎目标:熟悉InnoDB核心原理:ACID MVCC,事务,锁等
介绍类似于Linux系统中文件系统
功能
数据读写
数据安全和一致性
提高性能
热备份
自动故障恢复
高可用方面支持 等.
种类Oracle的MySQL的引擎
InnoDB
MyISAM
CSV
MEMORY
ARCHIVE
1234mysql> show engines; //查看支持的存储引擎 mysql> select table_schema,table_name ,engine //查看所有InnoDB的表from information_schema.tables where engine='innodb';
说明:存储引擎是作用在表上的,也就意味着,不同的表可以有不同的存储引擎类型。
其他MySQL的引擎
PerconaDB:默认是XtraDB
MariaDB:默认是InnoDB
其他的存储引擎支持:
TokuDB
RocksDB
MyRocks
以上三种存储引擎的共同点:压缩比较高,数据插入性能极高现在很多的NewSQL,使用比较多的 ...
企业级备份方案x3
全网 Rsync 备份解决方案项目需求 对本项目中 web01、web02 服务器重要数据定时备份推送至后端 backpack 服务器 上。
要求如下 每天晚上 00 点整在 web 服务器上打包备份系统配置文件、网站程序目录及访问日 志并通过 rsync 命令推送到服务器 backup 上备份保留(备份思路可以是先在本地按日 期打包,然后再推到备份服务器 B 上)
服务器主机名分别为 web01、web02、backup 、nfs01,主机信息见下表:
服务器说明
外网 IP(NAT) SSH 用
内网 IP(NAT)交换数据用
主机名
Nginx web 服务器
10.0.0.7/24
172.16.1.7/24
web01
Nginx web 服务器
10.0.0.7/24
172.16.1.8/24
web02
NFS 存储服务器
10.0.0.31/24
172.16.1.31/24
nfs01
Rsync 备份服务器
10.0.0.41/24
172.16.1.41/24
back ...