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 为主机名("即地点"),其他以此类推!