redis 4.0 安装

PHP redis 扩展下载:https://pecl.php.net/package/redis

redis 安装包下载:https://redis.io/download

tar zxvf redis-4.0.8.tar.gz

mv redis-4.0.8 redis

make

编译完成之后,可以看到解压文件redis中会有对应的src、conf等文件夹,这和windows下安装解压的文件一样,大部分安装包都会有对应的类文件、配置文件和一些命令文件。

编译成功后,进入src文件夹,执行make install进行Redis安装

cd src
make install

首先为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中

mkdir -p /usr/local/redis/bin
mkdir -p /usr/local/redis/ect

[root@CentOS6 redis]# mv redis.conf etc/
[root@CentOS6 redis]# cd src/
[root@CentOS6 src]# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis/bin

切换到/usr/local/redis/etc目录,编辑redis.conf文件,将daemonize属性改为yes(表明需要在后台运行)

启动redis
[root@CentOS6 bin]# ./redis-server /usr/local/redis/etc/redis.conf

参考地址:https://www.cnblogs.com/KunGe-13/p/8340309.html

mongodb 安装使用

1.下载mongodb

根据自己的系统类型下载指定安装包

下载地址:https://www.mongodb.com/download-center?jmp=nav#community

2.安装mongodb

#解压二进制安装包

tar -zxvf mongodb-linux-x86_64-rhel70-4.0.1.tgz

#安装包移动到知道目录

mv mongodb-linux-x86_64-rhel70-4.0.1 /usr/local/mongodb

3.启动配置mongodb

创建mongodb.conf配置文件

#日志文件位置
logpath=/data/db/journal/mongodb.log  (这些都是可以自定义修改的)
#监听ip
bind_ip = 0.0.0.0
# 以追加方式写入日志
logappend=true

# 是否以守护进程方式运行
fork = true

# 默认27017
#port = 27017

# 数据库文件位置
dbpath=/data/db

# 启用定期记录CPU利用率和 I/O 等待
#cpu = true

# 是否以安全认证方式运行,默认是不认证的非安全方式
#noauth = true
#auth = true

# 详细记录输出
#verbose = true

# Inspect all client data for validity on receipt (useful for
# developing drivers)用于开发驱动程序时验证客户端请求
#objcheck = true

# Enable db quota management
# 启用数据库配额管理
#quota = true
# 设置oplog记录等级
# Set oplogging level where n is
#   0=off (default)
#   1=W
#   2=R
#   3=both
#   7=W+some reads
#diaglog=0

# Diagnostic/debugging option 动态调试项
#nocursors = true

# Ignore query hints 忽略查询提示
#nohints = true
# 禁用http界面,默认为localhost:28017
#nohttpinterface = true

# 关闭服务器端脚本,这将极大的限制功能
# Turns off server-side scripting.  This will result in greatly limited
# functionality
#noscripting = true
# 关闭扫描表,任何查询将会是扫描失败
# Turns off table scans.  Any query that would do a table scan fails.
#notablescan = true
# 关闭数据文件预分配
# Disable data file preallocation.
#noprealloc = true
# 为新数据库指定.ns文件的大小,单位:MB
# Specify .ns file size for new databases.
# nssize =

# Replication Options 复制选项
# in replicated mongo databases, specify the replica set name here
#replSet=setname
# maximum size in megabytes for replication operation log
#oplogSize=1024
# path to a key file storing authentication info for connections
# between replica set members
#指定存储身份验证信息的密钥文件的路径
#keyFile=/path/to/keyfile

详细说明可参考:https://www.cnblogs.com/zhoujinyi/p/3130231.html

启动是提示以下错误,可以检查配置文件是否正确

4.安装php扩展

下载地址:https://pecl.php.net/package/mongodb

windows客户端

https://robomongo.org/download

《高性能mysql》第三版

第一章 mysql架构与历史

逻辑架构:

第一层:链接/线程处理,比如连接处理,授权认证,安全等等;

第二层:查询解析,分析,优化,缓存以及所有的内置函数(例如:日期,时间)。

第三层:包含存储引擎,负责mysql中的数据存储和提取

锁:共享锁和排它锁(读锁和写锁)

锁粒度:表锁,行锁

事务(ACID)

原子性(atomicity):不可分割的最小单元,全部成功或者全部失败;

一致性(consistency)

隔离性(isolation):一个事务所做的修改在最终提交之前对其他事务不可见

持久性(durability):数据提交永久保存在数据库中

隔离级别 (参考链接:)

设置隔离级别:set transaction isolatton level 【级别名】

未提交读(read uncommitted):脏读,事务中的修改,即使没有提交,对其他事务也是可见的

提交读(read committed):不可重复读,满足事务的隔离性要求;

可重复读(repeatable read):可重复读是mysql默认事务隔离级别,解决了脏读问题无法解决幻读(事务在读取某个范围内的记录时,另一个事务又在该返回插入了新的数据,再次读取产生幻行)

可串行化(serializable)

死锁:多个事务在同一资源上相互占用并请求锁定了对方的资源,从而导致事务一直无法提交

start transaction;                                                            update user set coin = coin - 100 where id = 1;                              update user set coin = coin + 100 where id = 2;                               commit;                                                              

start transaction;                                                            update user set coin = coin - 100 where id = 2;                              update user set coin = coin + 100 where id = 1;                               commit; 

选择存储引擎

事务:是否需要支持事务;

备份:是否需要在线热备;

崩溃恢复

特有的特性

mysql 备份(xtrabackup)

安装xtrabackup

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

yum -y install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

备份

innobackupex --user=root --password=test /data/backup/

innobackupex 参数选项

–defaults-file=[MY.CNF]    //指定配置文件:只能从给定的文件中读取默认选项。 且必须作为命令行上的第一个选项;必须是一个真实的文件,它不能是一个符号链接。

–databases=#    //指定备份的数据库和表,格式为:–database=”db1[.tb1] db2[.tb2]” 多个库之间以空格隔开,如果此选项不被指定,将会备份所有的数据库。

–include=REGEXP    //用正则表达式的方式指定要备份的数据库和表,格式为 –include=‘^mydb[.]mytb’ ,对每个库中的每个表逐一匹配,因此会创建所有的库,不过是空的目录。–include 传递给 xtrabackup –tables。

–tables-file=FILE    //此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称,格式为databasename.tablename。该选项传递给 xtrabackup –tables-file,与–tables选项不同,只有要备份的表的库才会被创建。

注意:部分备份(–include、–tables-file、–database)需要开启 innodb_file_per_table 。

–compact    //创建紧凑型备份,忽略所有辅助索引页,只备份data page;通过–apply-log中重建索引–rebuild-indexs。

–compress    //此选项指示xtrabackup压缩备份的InnoDB数据文件,会生成 *.qp 文件。

–decompress    //解压缩qp文件,为了解压缩,必须安装 qpress 工具。 Percona XtraBackup不会自动删除压缩文件,为了清理备份目录,用户应手动删除 * .qp文件:find /data/backup -name “*.qp” | xargs rm。

–no-timestamp    //指定了这个选项备份将会直接存储在 BACKUP-DIR 目录,不再创建时间戳文件夹。

–apply-log    //应用 BACKUP-DIR 中的 xtrabackup_logfile 事务日志文件。一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件使得数据文件处于一致性状态。

–use-memory=#    //此选项接受一个字符参数(1M/1MB,1G/1GB,默认100M),仅与–apply-log一起使用,该选项指定prepare时用于崩溃恢复(crash-recovery)的内存。

–copy-back    //拷贝先前备份所有文件到它们的原始路径。但原路径下不能有任何文件或目录,除非指定 –force-non-empty-directories 选项。

–force-non-empty-directories    //恢复时指定此选项,可使 –copy-back 和 –move-back 复制文件到非空目录,即原data目录下可以有其他文件,但是不能有与恢复文件中同名的文件,否则恢复失败。

–rsync    //此选项可优化本地文件(非InnoDB)的传输。rsync工具一次性拷贝所有非InnoDB文件,而不是为每个文件单独创建cp,在备份恢复很多数据库和表时非常高效。此选项不能和 –stream 一起使用。

–incremental    //这个选项告诉 xtrabackup 创建一个增量备份,而不是完全备份。它传递到 xtrabackup 子进程。当指定这个选项,可以设置 –incremental-lsn 或 –incremental-basedir。如果这2个选项都没有被指定,–incremental-basedir 传递给 xtrabackup 默认值,默认值为:基础备份目录的第一个时间戳备份目录。

–incremental-basedir=DIRECTORY    //该选项接受一个字符串参数,该参数指定作为增量备份的基本数据集的完整备份目录。它与 –incremental 一起使用。

–incremental-dir=DIRECTORY    //该选项接受一个字符串参数,该参数指定了增量备份将与完整备份相结合的目录,以便进行新的完整备份。它与 –incremental 选项一起使用。

–redo-only    //在“准备基本完整备份” 和 “合并所有的增量备份(除了最后一个增备)”时使用此选项。它直接传递给xtrabackup的 xtrabackup –apply-log-only 选项,使xtrabackup跳过”undo”阶段,只做”redo”操作。如果后面还有增量备份应用到这个全备,这是必要的。有关详细信息,请参阅xtrabackup文档。

–parallel=NUMBER-OF-THREADS    //此选项接受一个整数参数,指定xtrabackup子进程应用于同时备份文件的线程数。请注意,此选项仅适用于文件级别,也就是说,如果您有多个.ibd文件,则它们将被并行复制; 如果您的表一起存储在一个表空间文件中,它将不起作用。

2) xtrabackup 参数选项

–apply-log-only    //这个选项使在准备备份(prepare)时,只执行重做(redo)阶段,这对于增量备份非常重要。

参考链接:https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html

mysql 服务器性能剖析

1.理解性能剖析

  • 值得优化的查询:一些占总响应时间比重很小的查询是不值得优化的
  • 异常情况:某些任务执行次数很少,但每次执行都很慢

long_query_time 慢查询日志响应时间

2.分析查询日志(pt-query-digest)

安装:yum install -y perl-CPAN perl-Time-HiRes

wget https://www.percona.com/downloads/percona-toolkit/3.0.11/binary/redhat/7/x86_64/percona-toolkit-3.0.11-1.el7.x86_64.rpm

yum -y install percona-toolkit-3.0.11-1.el7.x86_64.rpm

参考链接:https://www.cnblogs.com/luyucheng/p/6265873.html

工具:performance schema    http://www.cnblogs.com/cchust/p/5061131.html

3.schema和数据类型优化

选择优化的数据类型

  • 更小的通常更好:更小的数据类型通常更快,因为他们占用更少的磁盘、内存和cpu缓存,并且处理时需要的cpu周期也更少
  • 简单就好:简单数据类型通常需要更少的cpu周期。例如:整型比字符串操作代价更低,因为字符集和排序规则使字符比较整型比较更复杂。
  • 尽量避免null:若果查询中包含null的列,对mysql来说更难优化,因为可为null的列使的索引、索引统计和值比较更为复杂。

整数类型:为整数类型指定宽度,例如:int(2),对于存储int(1)和int(10)是相同的;

存储货币:根据小数位乘以相应的倍数,例如:12.02元 = 1202分

字符串类型

varchar:使用1个或2个额外字节记录字符串长度。适合使用varchar存储,字符串列长度比平均值长很多,列很少更新,复杂的字符集(utf8)

char:适合存储短的字符串或者所有值都很相近的,例如MD5值

关联表时字段类型最好相同,包含unsigned这样的属性

linux shell script

#!/bin/bash  
############################
#desc:这只是练习案例
############################

read -t 10 -p '请输入你的名字: ' name;  #name变量提示用户输入,用户10秒未      输入结束

name=${name:- 'ace'}; #当name未定义时默认值为ace

1.判断

-e : 该文件名是否存在(目录或文件)

-f : 该文件是否存在

-d : 该目录是否存在

-r : 该文件是否具有读权限

-w : 该文件是否具有写权限

-x : 该文件是否具有执行权限

-eq : 两个值是否相等

-gt -lt : 大于,小于

== : 判断两个字符串是否相等

-a : and 相当于 &&

-o : or 相当于 ||

-! :  取反