第七周作业

1. 总结pg和mysql的优劣势。

mysqlpostgreSQL
1innodb被甲骨文公司控制完全开源,无大公司垄断
2复杂查询处理较弱,如多索引查询下,使用查询优化器后的比表扫描还要慢查询优化器强
3主键不能太长,且最好顺序递增,否则影响性能不存在此问题
4表增加列,基本是重建表和索引,时间较长新加列只是在数据字典里增加定义,不会重建表
5时间类型到不了秒以下可以精确到秒以下
6集群做的较差有丰富1的cluster软件
7如create table不支持事务,不能回滚DDL也支持事务
8mysql多线程pg多进程,在现场多核的机器上,更能发挥性能
9不支持操作系统认证,PAM认证等外部验证支持


2.  总结pg二进制安装和编译安装。

二进制安装:

yum install postgresql-server

需要初始化才能起来

 postgresql-setup --initdb

编译安装:

先下载依赖

yum install gcc make readline-devel zlib-devel

解压下好的源码包

cd进去,

./configure --prefix=/apps/pg

make

make install

创建postgre用户

useradd -s /bin/bash -m -d /home/postgres postgres
 echo -e '123456\n123456'|passwd postgres

/pgsql/data目录需要在root下创建并chown成postgres

设置环境变量并source

[root@localhost pg]# cat /etc/profile.d/pgsql.sh
export PGHOME=/apps/pg
export PATH=$PGHOME/bin/:$PATH
export PGDATA=/pgsql/data
export PGUSER=postgres
[root@localhost pg]#

数据库初始化:

initdb (设置了环境变量,不用写绝对路径,默认路径是)

pg_ctl -D /pgsql/data/ -l logfile start

启动多实例时记得修改端口

然后psql进去看看


3. 总结pg服务管理相关命令 pg_ctl 和pgsql命令选项及示例和不同系统的初始化操作

初始化数据库,也可以新建数据库:(默认是环境变量里设置的,可以-D 指定某个实例的路径)

新建时需要修改目录下的postgresql.conf中的监听地址和端口,不然通过pg_ctl启动多个实例会冲突

pg_ctl -D /pgsql/data2 -l logfile start

pg_ctl start  /pgsql/data2

pg_ctl restart  /pgsql/data2

pg_ctl stop  /pgsql/data2

pg_ctl status  /pgsql/data2


4. 总结pg数据库结构组织

1.实例,一个pgsql实例就是一个对应的数据库目录,如/pgsql/data2

2.数据库:一个pgsql服务可以管理多个数据库,当连接到一个数据库时。一般只能访问这个数据库里面的数据

3.模式:schema,一个数据库可以创建多个名称空间,分割不同的业务数据。

4.表和索引:pgsql中术语是relation,其他叫table

5.行和列:pgsql中行的术语叫Tuple,其他数据库叫row


5.  实现pg远程连接。输入密码和无密码登陆

pgsql有一个文件pg_hba.conf来管理那些主机可以访问数据库

在最下面添加

还需要修改密码:

alter user postgres with password '123456';

可以看到做过修改的实例远程可以连接,默认状态的实例连不上


6.  总结库,模式,表的添加和删除操作。表数据的CURD。同时总结相关信息查看语句。

可以\h 跟上相关命令查询用法

库操作:

创建数据库:create database ceshi;

删除库:drop database ceshi;

列出数据库: \l

模式:

创建:create schema  scname;

drop schema  scname;

列出:\dn

表:

列出表:\dt  (\d t1相当于desc)

C:

与MySQL类似create table tb2(id serial primary key ,name varchar(10));

注意pgsql中,使用serial类型自带auto_increment

insert into tb2 (name) values('abb');

R:

select * from tb2;

U:

update tb2 set name='ccc' where id=1;

D:

drop table tb2;


7. 总结pg的用户和角色管理。

\du查看用户

查看当前用户:select user;

pgsql中,一个角色可以等同于一个用户

create user  默认可以登录

create  role   默认不可以登录

除是否默认login外,两个无区别

例:

创建可以登录的用户与密码:

create user abb with password '123456';

with 后面还能带上权限:login(可以登录)superuser(管理员)replication(复制)

修改密码:

alter user abb with password '1234567';

删除用户:

drop user abb;


8. 添加mage用户,magedu模式,准备zabbix库,配置mage用户的默认模式magedu,要求mage用户给zabbix库有所有权限。

添加用户:

create user mage with password '123456';

添加模式:

create schema magedu;

添加zabbix库:

create database zabbix;

指定模式:

alter schema magedu owner to mage;

grant all on all tables in schema magedu to mage;

\c zabbix(连接数据库)


9. 总结pgsql的进程结构,说明进程间如何协同工作的。

postmaster主进程:

是数据库实例的主控制进程,负责启动和关闭数据库。还会fork出其他的子进程并管理。

当用户与pgsql连接时,先与主进程进行连接进行身份验证,验证通过就fork一个会话进程来进行服务。

辅助子进程:

BgWriter:周期性的将内存中的脏数据进行落盘。

walWriter进程:

预写式日志进程,相当于mysql中的redo log。修改磁盘上数据库数据前,必须先将此操作记录到磁盘里然后才能修改

Checkpointer:检查点进程,保证检查点之前的日志信息和脏数据都存到磁盘里了。

AutoVacuum:自动清理进程,进行删除时,不会删除旧数据,只是打上删除的标识

  当在PostgreSQL中执行DELETE时,行不会立即从数据文件中删除.而是仅通过在页头中设置xmax字段将其标记为已删除.同样对于UPDATE,它可能在PostgreSQL中被视为DELETE+INSERT.

  这是PostgreSQL MVCC背后的基本思想之一,因为它允许更大并发,在不同的进程之间最小的锁定.这个MVCC实现的缺点是留下了已删除的元组,即使在所有可能看到这些版本的事务完成之后也是如此.

  如果没有清理,那些"死元组"(对于任何事务实际上是不可见的)将永远留在数据文件中.对于DELETE和UPDATE比较多的的表,死元组可能占据很多磁盘空间.同时,死元组也将从索引中引用,进一步增加了浪费的磁盘空间量.这就是我们在PostgreSQL中称之为“膨胀”的东西,同时因为查询也会变慢。
Pgstat:统计数据收集进程,作为查询优化时的代价估算

Pgarch:归档进程

可以看作是bin-log的作用。开启后wal日志在自动覆盖前给他复制出来。

session:会话进程,负责用户连接


10. 总结pgsql的数据目录中结构,说明每个文件的作用,并可以配上一些示例说明文件的作用。

数据库目录在安装时指定的目录下。如、pgsql/data

初始化完成后有三个文件:

postgresql.conf:主配置文件,监听地址与端口都在此修改

pg_hba.conf:认证配置文件,那些主机允许访问数据库

pg_ident.conf:认证方式的用户映射文件

还有一些子目录:

base:表空间目录,每个表与索引都是一个单独的文件

对应关系

pg_wal目录:存放wal日志的

wal日志中的最后八位的前6位为0,最后两位是lsn的低32位的前两位。


11.  尝试将pgsql新版本的运行日志存储到数据库。


12. 图文并茂总结LSN和WAL日志相关概念

LSN:log sequence number,用于记录WAL文件当前的位置,在WAL日志中全局唯一

WAL日志写入是有顺序的,所以需要记录wal日志的写入顺序,LSN就是给每条wal日志记录编号。

WAL日志LSN编号:高32位/低32位

查询当前lsn可见,wal文件的最后两位就是LSN的低位的前两位(最前面的省略了,只有7位了)


13. 实现WAL日志多种类型的备份,及数据还原。

本地备份:

需要修改配置文件,开启归档备份

注:配置文件规范中,一般不省略默认的配置项,而是将默认的参数写出来如wal_level = replica,然后注释掉,变成#wal_level = replica,易于别人理解。

archive_mode = on

archive_command = 'cp %p /pgsql/backup/%f'

远程备份:

可以在archive_command 后面的命令使用scp来拷贝到其他主机(需要提前做ssh免密)

备份还原:

备份:

pg_dump -h 192.168.22.12 -U postgres -C hellodb > yyl.sql

还原:psql < yyl.sql

自定义格式的需要使用pg_restore


14. 实现WAL日志完成主从流复制,要求在从节点上进行crontab数据备份,同时手工让主节点宕机,让从节点切换为主节点,并添加新的从节点。

流复制可以看作一个没有边界的字符串流,如果是基于文件来同步的话,从库总是落后主库一个wal文件。流复制可以让从库保持最新的状态。

master节点:

创建复制的账号:

还需要在配置文件中listen address改为*

修改pg_hba文件,添加一行:

host    replication     repluser        0.0.0.0/0               md5

修改postgresql.conf文件:

然后重启,注意/archive需要先创建然后chown(/pgsql/backup也相同)

从节点:

先停止数据库,/pgsql/data,/pgsql/backup/   /pgsql/backup下内容清空

    pg_ctl stop -D /pgsql/data
    rm -rf /pgsql/data/*
    rm -rf /archive/*

    rm -rf /pgsql/backup/*

从主库备份数据过来

pg_basebackup -D /pgsql/backup/ -Ft -Pv -Urepluser -h 192.168.174.10 -p 5432 -R

解压:

    tar xf /pgsql/backup/base.tar -C /pgsql/data/
    tar xf /pgsql/backup/pg_wal.tar -C /archive/

修改postgre配置文件,添加:

primary_conninfo = 'host=192.168.174.10 port=5432 user=repluser password=123456'
restore_command = 'cp /archive/%f %p'

启动数据库:

查看状态:

主库:

从库:

验证:进入主库创建zabbix数据库,可见从库也自动更新,\l也可以看见zabbix被创建了


15. 总结日志记录的内容包含什么

历史事件:时间,地点,人物,事件

日志级别:事件的关键性程度,log level


16. 总结日志分类, 优先级别。图文并茂解释应用如何将日志发到rsyslog,并写到目标。

facility:设施,从功能或程序上对日志进行归类:

#内置分类

auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user(default), uucp, syslog

#自定义的分类

local0-local7

Priority 优先级别,从低到高排序:

debug,info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)

应用如何将日志发到rsyslog,并写到目标:

启用网络日志服务,打开对外接收日志的端口,udp监听端口514,把应用上发生的所有info级别及以上的设施都发送到日志服务器上,514收到后就会写到/var/log/syslog文件中
 


17. 总结rsyslog配置文件格式

MODULES:相关模块配置,如UDP模块,TCP模块,开启后可以日志远程记录

GLOBAL DIRECTIVES:全局配置

RULES:日志记录相关的规则配置


18.完成功能,sshd应用将日志写到rsyslog的local6分类,过滤所有级别,写入到/var/log/ssh.log。

修改sshd_config(sshd是服务端,ssh是客户端)

修改rsyslog配置文件:

把前面的local6写入到/var/log/ssh.log里

重启sshd与rsyslog服务

tail查看/var/log/ssh.log是否有日志生成 


18. 完成功能,将3个主机(要求主机名为ip)的ssh日志,通过rsyslog服务将ssh日志写入到集中的主机上的rsyslog服务,写入到/var/log/sshceshi.log文件

服务器:

在日志服务器上开启udp或者tcp这个模块(修改rsyslog配置文件,取消注释)

添加

local6.*                                                /var/log/sshceshi.log

重启rsyslog服务,可以看到udp的514端口已经处于监听了

客户端:

修改sshd配置文件:先划到local6下

然后在rsyslog的配置文件添加

local6.*                                                @192.168.174.6
重启服务

最终结果:

在日志服务器上可以看到客户端的ssh日志

19. 总结/var/log/目录下常用日志文件作用。

/var/log/secure:系统安全日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行 查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
/var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化 将不再记录,也可以通过专用命令
dmesg查看,可持续记录硬件变化的情况
/var/log/boot.log:系统服务启动的相关信息,文本格式,Ubuntu无此文件
/var/log/messages:系统中大部分的信息
/var/log/anaconda:anaconda的日志


20. 总结journalctl命令的选项及示例

查看所有日志(默认保留此次启动的日志):

journalctl

内核日志:

journalctl -k

指定时间:

journalctl --since 09:00 --until "1 hour ago"

查看指定进程日志:

如:journalctl _PID=1

查看某一个UNIT

journalctl -u sshd


21. 完成将多个主机(要求主机名为ip)的nginx日志集中写入到mysql表中

客户端:

服务端:


22. 尝试使用logrotate服务切割nginx日志,每天切割一次,要求大于不超过3M, 保存90天的日志, 旧日志以时间为后缀,要求压缩。


23. 总结DAS, NAS, SAN区别,使用场景


24.  实现nfs共享/data/nfs目录,所有压缩为666用户。并配置其他虚拟机自动挂载。

centos8自带nfs软件

nfs,network file sysytem

服务端:

mkdir -p /data/nfs

exportfs -r

客户端:

临时挂载

mount 192.168.174.6:/data/nfs /data/nfs

永久挂载需要写道配置文件中/etc/fstab


25. 总结inotify原理,命令及使用

inotify是监控服务,监听同步数据服务器目录中的信息变化

前台记录


26. 总结rsync原理,命令及ssh命令和rsync协议使用。完成目录文件同步。

服务端:

配置密码:

conf文件:

客户端:

配置密码:

测试:

服务端:

客户端输入:

可以见到与服务端保持一致了,带上了--delete,多了删除,少了补上。


27. 总结sersync的配置,同时基于sersync替换inotify+rsync.


28. 配置LAMP要求 域名使用主从dns, dns解析到2个apache节点,apache和php在同一个节点,同时将wordpress的upload目录基于nfs挂载,同时基于rsync协议将网站同步到备份的nfs服务器, mariadb使用mycat读写分离并且要求后端为MHA集群。 架构规划图及解析一次请求和响应的流程和实践过程。同时将所有主机的apache, php, mariadb日志集中收集。

待完成


29.  总结 Redis多种安装方法和内核参数优化

yum安装:

 yum install redis

编译安装

wget https://download.redis.io/releases/redis-6.2.6.tar.gz
mv redis-6.2.6.tar.gz /opt
cd /opt/
tar zxvf redis-6.2.6.tar.gz
cd redis-6.2.6/
mkdir /opt/redis
make -j 2 PREFIX=/opt/redis install
echo 'PATH=/opt/redis/bin:$PATH' > /etc/profile.d/redis.sh
. /etc/profile.d/redis.sh
mkdir /opt/redis/{etc,log,data,run}
cp redis.conf /opt/redis/etc/

redis-server /opt/redis/etc/redis.conf
ss -ntl

内核优化:

sysctl -p

30. 总结  Redis 常见指令和数据类型

常见指令:

1.info:查看当前运行状态:

2.select,切换数据库

3.keys,查看当前库所有key

4.bgsave,手动在后台执行RBD持久化操作

5.dbsize,返回当前key的数量

6.flushdb,flushall。清空所有key,一个是清空当前库,一个是清空所有

7.set/get  ,设置key value与查看。 mset/mget,批量

7.strlen,返回字符串key的value长度

8.ttl,查看key的过期时间,-1表示永不过期

9.incr,decr,数字递增递减

10.incrby  ,decrby,数字增加,减少

列表:

可以看作字符串数组

lpush ,从左边插入到list里,如1 2 3,从左插入就是  1    > 2  1    >     3 2 1

rpush,从右边插入到list里。lpush与rpush也可以追加数据

llen,获取列表长度

lset,可以修改列表中指定索引的值

lpop,rpop,删除最左/右边的一个元素

集合:

特点:无序。无重复

sadd,创建集合,可以追加,追加只能加集合里面没有的数据

smembers,获取集合中的所有数据,注意是无序的,不用在意顺序

srem,删除集合中的元素

sinter  集合1 集合2   取集合的交集

sunion,取集合的并集

sdiff s1  s2,取交集  ,属于s1不属于s2的元素

有序集合

在无序集合的基础上,元素还关联了一个score,用于排行榜的场景

特点:有序,无重复元素,每个元素都由score与value组成,score可以重复,value不能重复

zadd  s1  1  v1 2 v2 3 v3,创建有序集合

zrange  s1  0 -1,正序排序  ,zrevrange,逆序

zcard,查看元素个数

查找元素  zrange  s1  1 3

zrank  ,查询指定数据的排名

zscore  获取分数

删除数据,zrem

哈希hash

无序,k/v对

key  -> 多个field与value

hset,创建hash

hset  stadents  name yyl age 40

hmset,设置多个

hget,查看,hmget,获取多个field的value

查看hash的所有field与value

hdel,删除field

del删除hash

数据类型:

1.字符串,string

2.列表list

3.集合set

4.有序集合

5.哈希

6.消息队列

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值