第七周作业

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

    答:postgresql数据库优势:1. 开源免费: PostgreSQL数据库是开源的、免费的,而且是 BSD协议,在使用和二次开发上基本没有限制。
                              2. 在同样批量脚本导入10万条数据时,postgersql 效率是mysql 的6-7倍 以上!
                               

    	mysql数据库:而MySQL数据库虽然是开源的,但现在随着SUN被oracle公司收购,现在基本上被oracle公司控制,其实在SUN被收购之前
			    	,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的数据都是放在InnoDB引擎中的,反正我们公司都是这样的。
			    	所以如果MySQL的市场范围与oracle数据库的市场范围冲突时,oracle公司必定会牺牲MySQL,这是毫无疑问的。
	    
	    #高可用指南参考:

      注意:1. 回顾mysql同步机制分为: 主从同步("表示同步子节点主机全部返回结果,才算成功!");
                                       半同步("表示同步子节点主机,只要有一台成功返回结果,则表示成功!");
                                       异步("只要主节点完成就返回结果,不管子节点主机!<缺点:万一主节点宕机,则数据丢失!>")

                注:mysql 和 psql数据库("默认异步同步");

            2. psql主从复制方式:  
                    同步流复制:<PostgreSQL9.1开始支持同步复制>("即主更改,从马上同步,<缺点:万一主节点宕机,则数据丢失!>");
                    级联流复制:<PostgreSQL9.2支持级联流复制>("即备库还可以再连备库,子库的子子库")
                    流式虚拟备库:<PostgreSQL9.2还支持虚拟备库>,("即就是只有WAL,没有数据文件的备库")
                    逻辑复制:<PostgreSQL9.4开始可以实现逻辑复制>,逻辑复制可以做到对主库的部分复制,例如表级复制,而不是整个集群的块级一致复制。
                    增加多种同步级别:<PostgreSQL9.6版本开始可以通过synchronous_commit参数>,("来配置事务的同步级别")

            3. 流复制原理图: F:\come out\老男孩-新\image\psql流复制原理.png
               官方文档    :http://postgres.cn/docs/12/warm-standby.html#STREAMING-REPLICATION
               流复制同步机制分为:  异步流复制:<生产推荐! 异步不会有同步的"缺点">
                                     同步流复制:<"缺点":一旦备库宕机,主库就会挂起而无法进行正常操作,即在同步模式中
                                       ,备库对主库的有很大的影响,而异步模式就不会。>
                流复制特点:
                          延迟极低,不怕大事务
                          支持断点续传
                          支持多副本
                          配置简单
                          备库与主库物理完全一致<"这里有点夸大!">,并支持只读  

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

	答:编译安装:可以自定义编译添加新功能,一般场景二进制安装的能满足大部分需求场景,没有二进制包时采用时采用源码自编译安装!
	    ,对编译要求高,比较繁琐

	   二进制安装: 别人编译好的tar.gz 包,解压即可部署!("类似windows 中绿色版软件,无需安装,简单加压至目录即可使用!")

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

	答:
	##postgresql命令使用指南("重要")
	pg_ctl           #启动服务工具
	pg_ctl  --help   #用法帮助
	initdb           #初始化数据库
	pg_ctl init      #同上
	psql             #登入命令

	#initdb-初始化数据库
    su  - postgres
    postgres@ubuntu2004:~$ initdb
        或
        initdb  -D  /pgsql/data        #在没有设置变量指向时,必须指定"数据目录路径"

   #生产建议初始化方式
    initdb -A md5 -D $PGDATA -E utf8 --locale=C -U postgres -W
    -A #指定local connections默认的身份验证方法
    -D #指定数据目录
    -E #指定字符集
    --locale=C #指定语言环境
    -U  #指定数据库superuser用户名
    -W  #指定数据库superuser的用户密码

   #pg_ctl启动服务
        方法一:
    su -  postgres
    postgres@ubuntu2004:~$ pg_ctl   -l logfile  start
      或
      pg_ctl -D  /pgsql/data  -l logfile  start   #在没有设置变量指向时,必须指定"数据目录路径"
          说明:-l logfile  指定日志保存文件,不指定则在终端显示

    ----------------------
##pg_ctl命令使用

-------------
#pg_ctl启动和关闭服务

#启动
pg_ctl -D /pgsql/data -l logfile start
postgres -D /pgsql/data &

#停止数据库的命令如下:
pg_ctl stop -D $PGDATA [-m SHUTDOWN-MODE]

其中-m是指定数据库的停止方法,有以下三种:
smart:    等所有的连接中止后,关闭数据库。如果客户端连接不终止,则无法关闭数据库。
fast :    快速关闭数据库,断开客户端的连接,让已有的事务回滚,然后正常关闭数据库。相当于Oracle数据库关闭时的immediate模式。此为默认值,建议使用
immediate:立即关闭数据库,相当于数据库进程立即停止,直接退出,下次启动数据库需要进行恢复。相当于Oracle数据库关闭时的 abort模式

#smart关闭
pg_ctl stop -D /pgsql/data/   -ms 

#fast关闭,("推荐使用,也是默认模式")
pg_ctl stop -D /pgsql/data/   -mf

#immediate 相当于kill -9
pg_ctl stop -D /pgsql/data/   -mi

#promote 模式
    在流复制架构中,在standby主机执行promote提升操作,恢复正常的读写操作
    备用服务器在指定数据目录中运行提升模式命令,结束备用模式并开始读写操作
    注:("是否在备份时,启用的只读模式后,恢复,待验证!")

pg_ctl promote  [-D DATADIR] [-W] [-t SECS] [-s]


#或者发送信号,直接向数据库主进程发送的signal 信号有以下三种。
SIGTERM:发送此信号为Smart Shutdown关机模式。
SIGINT:发送此信号为Fast Shutdown关机模式。
SIGQUIT:发送此信号为Immediate Shutdown关机模式。

#重启
pg_ctl restart -mf

#源码目录中内置PostgreSQL的启动脚本
postgresql-12.9/contrib/start-scripts/linux
-------------
格式:pg_ctl start [-w] [-t seconds] [-s] [-D datadir] [-l filename] [-o options] [-p path] [-c]

启动服务选项:

#参数说明如下。
start #启动数据库实例
-w #等待启动完成
-t #等待启动完成的等待秒数,默认为60秒
-s #只打印错误和警告信息,不打印提示性信息
-D datadir#指定数据库实例的数据目录
-l #服务器日志输出附加在“filename”文件上,如果该文件不存在则创建它
-o options #声明要直接传递给postgres 的选项,具体可见postgres命令的帮助
-p path #指定postgres可执行文件的位置。默认情况下postgres可执行文件来自和pg_ctl相同的目录,
不必使用该选项。除非要进行一些不同寻常的操作,或者产生了postgres执行文件找不到的错误
-c #提高服务器的软限制(ulimit -c),尝试允许数据库实例在有异常时产生一个coredump文件,以便于问
题定位和故障分析
-------------
格式:pg_ctl stop [-w] [-t seconds] [-s] [-D datadir] [-m s[mart] l f[ast] | i [mmediate] ]

停止服务选项:

#参数说明如下。
-W #不等待数据库停下来,命令就返回。
-m #指定停止的模式。前面已叙述过停止的几种模式了。
#其它未说明的参数,其含义与启动数据库命令中的参数相同。
-------------
格式:pg_ctl restart [-w] [-t seconds][-s] [-D datadir] [-c] [-m s[mart] | f[ast] | i[mmediate] ] [-o "options" ]

重启服务选项:

#此命令中的参数与启动或停止命令中的参数含义相同
-------------
加载配置生效:
    注意:加载配置操作只针对一些配置的修改生效,有些配置("修改端口")需要重新启动服务才能生效,("修改缓存,则加载即可!")

#修改配置文件 postgresql.conf后,让修改生效的方法有两种
  方法一:在操作系统使用下面命令
pg_ctl reload [-s] [-D datadir]
  方法二:在 psql 中使用如下命令
postgres=# select pg_reload_conf();

---------------------------
#psql使用帮助指南:("重要")
    格式:CREATE USER name [[WITH] option [ ...]]
          CREATE ROLE name [[WITH] option [ ...]]

--1. "option"选项说明如下:
    SUPERUSER | NOSUPERUSER:  表示创建出来的用户是否为超级用户。只有超级用户才能创建超级用户。
    CREATEDB /NOCREATEDB:     指定创建出来的用户是否有执行“CREATE DATABASE'的权限。
    CREATEROLE NOCREATEROLE:  指定创建出来的用户是否有创建其他角色的权限。
    CREATEUSER NOCREATEUSER:  指定创建出来的用户是否有创建其他用户的权限。
    INHERIT |NOINHERIT:       如果创建的一个用户拥有某一个或某几个角色,这时若指定INHERIT,则表示用户自动拥有相应角色的权限,否则这个用户没有该角色的权限。
    LOGIN | NOLOGIN:          指定创建出来的用户是否有“LOGIN”的权限,可以临时地禁止一个用户的“LOGIN”权限,这时此用户就不能连接到数据库
    CONNECTION LIMIT connlimit:  指定该用户可以使用的并发连接数量。默认值是-1,表示没有限制。
    [ENCRYPTED | UNENCRYPTED ] PASSWORD'password' :   用于控制存储在系统表里面的口令是否加密。
    VALID UNTIL 'timestamp':     密码失效时间,如果不指定这个子句,那么口令将永远有效。

--2. 其他格式用法:
    INROLE role name [,...]:   指定用户成为哪些角色的成员,请注意没有任何选项可以把新角色添加为管理员,必须使用独立的GRANT命令来做这件事情。
    IN GROUP role_name [,...]: 与IN ROLE相同,是已过时的语法。
    ROLE role_name [,...]: role_name   将成为这个新建的角色的成员。
    ADMIN role_name [,...]: role_name  将有这个新建角色的WITH ADMIN OPTION权限。
    USER role_name[,.…]:              与ROLE子句相同,但已过时。
    SYSID uid:                 此子句主要是为了SQL向下兼容,实际没有什么用处。

--3. 相关命令帮助:

    \h create user
    \h alter user
    \h drop user
    \h create role
    \h alter role
    \h drop role

示例:
创建psql用户两种方法:
#"user"-创建psql可登入用户和密码
#"role"-创建psql不可登入用户和密码

#"user"-创建psql可登入用户和密码
db1=# create  user  wang  with password '123456';

#"role"-创建psql不可登入用户和密码
db1=# create  role  zhao  with password '123456';

    --1.0.0.101
    远程确认登入:
    root@firewall ~]#psql -h 10.0.0.24 -d hellodb -U wang      #wang用户确认登入
 
    root@firewall ~]#psql  -h  10.0.0.24 -d db1 -U zhao       #zhao用户无法登入
    Password for user zhao: 
    psql: error: connection to server at "10.0.0.24", port 5432 failed: FATAL:  role "zhao" is not permitted to log in
-----------------------------

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

	答:
	PostgreSQL 体系架构:
	PostgreSQL和MySQL相似,也采用典型的C/S模型。
	PostgreSQL体系结构分两部分:
	实例 instance
	磁盘存储

	实例 instance 包括:
	进程
	内存存储结构

	注: PostgreSQL是进程架构模型,MySQL是线程架构模型。
	下图来自《POSTGRESQL修炼之道从小工到专家》:
	 postgresql体系图==>  F:\come out\老男孩-新\image\postgresql体系图.jpg

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

	答:
	--------------
##psql 命令

    格式:psql -h <hostname or ip> -p<端口> dabasename[数据库名称] -U [用户名称]
选项:
-h      指定ip地址或连接的数据主机名
-p      指定端口
-U      用户
-w      不提示用户密码("用法不详")
-W      强制提示密码("用法不详")
-d      指定数据库名称
-f      指定备份目录sql脚本
-------------

#定义变量实现登入等操作
--
export PGDATABASE=testdb
export PGHOST=10.0.0.24
export PGPORT=5432
export PGUSER=postgres
--

#psql登入
    注:1. 直接可以登入,是因为psql命令写入了变量设置("找到变量自动找路径命令和用户!")
        2. 登入后,会有提示信息!
        3. 本地登入psql数据库时,不指定用户和数据库则(默认与 linux账户同名的psql用户 和数据库进行登入!)

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

	答:
    注意:1. 官网文档帮助:https://www.rsyslog.com/
      2. 日志记录的内容包括:
            历史事件:时间,地点,人物,事件
            日志级别:事件的关键性程度,Loglevel

    ##常见错误日志分析
    	"httpd"服务:
	#对应日志查看:
    root@firewall ~]#vim  /var/log/messages
    --
        时间,       地点,   人物,          事件
    May  1 12:28:32 firewall kernel: vmxnet3 0000:03:00.0 eth0: NIC Link is Down

        说明 :firewall 为主机名("即地点"),其他以此类推!

posted @ 2023-07-09 00:35  绿杉  阅读(18)  评论(0编辑  收藏  举报