1. 总结pg和mysql的优劣势。
PostgreSQL
优势:1、PostgreSQL基于BSD协议开源,完全免费,没有被商业垄断
2、有强大的查询优化器,支持很复杂的查询处理
3、PostgreSQL是一个主进程带多个子进程,应对高并发场景,处理速度快
4、postgresSQL配合的开源软件很多,很容易做读写分类,负载均衡等方案
劣势:1、由于PostgreSQL是多进程运行,对设备的CPU资源利用率高。
MySQL
优势:1、MySQL是一个主进程和多个线程模式,对资源消耗比较少
2、资源消耗低,能支持更多的连接数
劣势:1、mysql被oracle收购,更新优化较少
2、查询和写入性能优化不足,对复杂查询的处理较弱
3、大部分查询只能使用表上的单一索引
4、不支持用户自定义类型和域
2. 总结pg二进制安装和编译安装。
pgsql二进制安装:二进制包安装方便快捷流程简单,但是自由度低,不能选择特定版本和安装路径。在postgresql.org官网上选择对应的操作系统,和数据库版本。官网有提供安装步骤流程代码,复制创建安装脚本,一件执行脚本即可安装。
源码编译安装:源码编译安装相比二进制包安装,自由度更大,可以自行选择安装特定版本和安装路径。但安装流程相对复杂。
流程:下载源码包,解压,编译安装
编译安装流程
1.解压后执行./configure文件,指定安装路径和端口号 (./configure --prefix=/pgsql/data --with-pgport=5432)
2.执行make和make install
3.创建postgres系统账号,用于管理pgsql服务 (useradd -d /home/postgres -s /bin/bash -m postgres)
4.对存放数据的目录授权 (chown -R postgres. /pgsql/data)
5.切换到postgres账号,initdb执行数据库初始化
6.启动数据库 (pg_ctl -l logfile start)
可用脚本实现:
3. 总结pg服务管理相关命令 pg_ctl 和psql命令选项及示例和不同系统的初始化操作。
pg_ctl命令是一个用于初始化、启动、停止或控制PostgreSQL服务器的实用程序。
常用命令:
pg_ctl --help #查看帮助
pg_ctl start #启动服务
pg_ctl stop #停止服务
pg_ctl status #服务状态
pg_ctl restart #重启服务
pg_ctl reload #加载配置文件
psql命令用于连接登录PostgreSQL数据库,是一个客户端命令
常用命令格式:
psql -h -p<端口> -d [数据库名称] -U [用户名称]
pgsql示例初始化:使用命令 pg_ctl init -D $PGDATA
4. 总结pg数据库结构组织。
PostgreSQL为一个实例。实例内创建数据库,在数据库内可以再创建Schema(模式)来将一个数据库中的不同业务隔离,实现不同业务的表,视图,索引等数据内容能放在一个数据库中,彼此互不影响。也可以不创建Schema使用默认的public模式来存放表,视图,索引等数据内容,像MySQL一样使用。
5. 实现pg远程连接。输入密码和无密码登陆。
pgsql默认是不能远程连接的,要实现远程连接,需要修改两个配置文件,主配置文件:postgresql.conf 和具有类似防火墙功能的配置文件:pg_hba.conf
实现免密登录的方式:在远程主机的用户家目录下创建 .pgpass 文件,
按格式写入内容:hostname:port:database:username:password
为了安全起见,将 .pgpass 文件权限修改为600
再次执行psql -h 10.0.0.8 -p 5434 -d postgres -U postgres 就可以免密登录了(必须严格按照 .pgpass 文件内容登录才能免密,否则无效)
6. 总结库,模式,表的添加和删除操作。表数据的CURD。同时总结相关信息查看语句。
创建数据库可以使用SQL语句:CREATE DATEBASE db_name ; 也可以利用CREATEDB命令创建数据库
删除数据库可以使用SQL语句 DROP DATABASE ;
创建模式:CREATE SCHEMA Schema_name;
删除模式:DROP SCHEMA Schema_name;
创建表:CREATE TABLE table_name;
删除表:DROP TABLE table_name;
(如果未指定Schema,则会将表创建在默认的public模式中)
创建指定Schema的表:CREATE TABLE Schema_name.table_name;
表数据的CURD操作(可以使用标准SQL语句,和MySQL一样)
select version(); #查看版本信息
select pg_posmaster_start_time(); #查看数据启动的时间
select now(); #查看当前时间
select user; #查看当前用户
select inet_server_addr(),inet_server_port(); #查看连接的数据库服务器ip地址和端口
show all; #可查看参数
show name;
explain可以查看SQL的执行计划
7. 总结pg的用户和角色管理。
角色是一系列相关权限的集合,用户和角色在整个数据库实例中都是全局的,即在同一个实例的不同数据库中,看到是用户也都是相同的。
CREATE USER name [option] #创建用户
CREATE ROLE name [option] #创建角色
两个命令都可以创建用户,不同的是CREATE USER创建的用户默认可以登录,而CREATE ROLE创建的角色默认不可以登录,除此以外没有其他任何区别。
ALTER USER name #修改用户
DROP USER name #删除用户
8. 添加mage用户,magedu模式,准备zabbix库,配置mage用户的默认模式magedu,要求mage用户给zabbix库有所有权限。
postgres=# create database zabbix; #创建zabbix数据库
postgres=# \c zabbix #进入zabbix数据库
zabbix=# create user mage with password '123345'; #创建账号
zabbix=# create schema magedu; #创建模式
zabbix=# ALTER USER mage SET search_path TO magedu; #将用户mage的默认模式设置为magedu
zabbix=# GRANT ALL PRIVILEGES ON DATABASE zabbix TO mage; #用户mage获得zabbix数据库所有权限
zabbix=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO mage;
9. 总结pgsql的进程结构,说明进程间如何协同工作的。
PostgreSQL实例包括进程和内存存储结构,一个主进程和多个子进程,主进程Postmaster,生成会话子进程Postgres处理用户请求,辅助子进程处理数据写入,并管理它们。
由主进程postmaster接收用户端访问申请,并生成会话子进程Postgres处理用户请求。
各种修改操作事务会提前记录到WalWriter进程的预写式日志中(先于数据更新),如果出现意外,数据库回到旧状态,日志中完整的事务会重新加载到数据库,不完整的事务会回滚,避免数据库数据的破坏。
检查点进程:各种修改操作的事务在完成提交后会生成一个checkpointer检查点,标记事务的完整性,将更新数据写入磁盘。
为提高插入,删除和更新数据的效率,不会直接将数据持久化到数据文件中,会执行Bgwriter进程先将内存中的脏数据写入Buffer中,然后再周期性的将内存中的脏数据刷新到磁盘中实现永久保存。
10. 总结pgsql的数据目录中结构,说明每个文件的作用,并可以配上一些示例说明文件的作用。
数据库数据目录存放在环境变量PGDATA指向的目录,这个目录在安装的时候指定,每个数据库实例都要有一个单独的数据库目录。主要分为6个部分,File segment用于存放数据,Tablespace用于存放表空间(存放数据的目录),Control file控制文件,Online WAL log在线日志(类似MySQL事务日志),ARCH WAL log存档日志(类似MySQL二进制日志)和log file其他日志文件。
初始化会生成三个配置文件:
postgresql.conf 数据库实例的主配置文件,几乎所有的配置参数都在这个文件中
pg_hba.conf 认证配置文件,配置允许哪些ip的主机可以连接访问数据库
pg_ident.conf 认证方式ident的用户映射文件
和其他数据库记录文件:
PG_VERSION 记录数据库版本号
postmaster.opts 记录数据库启动时的命令
postmaster.pid 数据库启动的进程信息文件