7天突破PolarDB for PostgreSQL—第四讲 从Oracle/MySQL到PolarDB

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 主讲人:吕海波,美创科技技术专家

7天突破PolarDB for PostgreSQL

第四讲 从Oracle/MySQL到PolarDB


主讲人:吕海波,美创科技技术专家


视频地址

https://developer.aliyun.com/learning/course/992/detail/14975


目录:

一、数据库的连接方式

二、进程与线程

三、数据库的启停

四、数据库的告警日志体系

五、表与数据存储方式

六、数据库、schema与owner

七、表空间与数据库

八、用户与权限体系


一、数据库的连接方式


  1. 连接Oracle


Oracle的常用连接方式如下:


sqlplus / as sysdba

[oracle@localhost~]$ sqlplus u1/a@192.168.51.214:1521/orcl.mc


系统显示如下信息,连接到Oracle:


SQL*Plus: Release 11.2.0.4.0 Production on 星期五 4月1 17:02:02 2022

Copyright(c)1982,2013,Oracle. All rights reserved.


连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options


SQL>


  1. 连接MySQL


IP方式连接:


[mysql@VAGE01 ~]$ mysq1 -usystem -pOracle1 -hlocalhost -P3306 -Dvage


参数说明:

-u:用户名

-p:密码

-h:IP或主机名

-P:端口号,默认3306

-D:数据库名


系统显示如下信息后,连接到MySQL:


Warning: Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with; or \g.

Your MysQL connection id is 4


Typehelp;’or\hfor help. Type\cto clear the current input statement.


mysql>


3.连接PolarDB


a.本地连接


[postgres@localhost pg]$ ./prebuild/bin/psql –p 6016


参数说明:p6016,指定端口号,如果使用默认端口号5432则可以省略。


系统显示如下信息后,连接到PolarDB:


psql(11.2)

Type “help”for help.


postgres=#


b.远程连接


  • 配置文件:vim pg_hba.conf

85 #IPv4 local connections:

86 host    all    all    127.0.0.1/32        trust

87 host    all    all    192168.51.1/24    md5


配置完成后,重启生效。


  • 连接命令:


[postgres@localhostpg]$ ./prebuild/bin/psql –U postgres –h 192.168.51.214 -d postgres -p 6016


当配置文件中的远程连接参数设置为“md5”时,登录需要密码验证;当参数设置为“trust”时,则无需密码。


  • 密码修改:


postgres=# alter user postgres PASSWORDabcde;

ALTER ROLE

postgres=# \q


  • 更安全的设置密码

postgres=# \password

Enter new password:(此处输入密码)

Enter it again:(再次输入密码)

postgres=# \q


二、进程与线程


1.进程模式和线程模式


a.进程模式:Oracle,PolarDB


  • 进程模式启动比较耗时,适于长连接模式;


b.线程模式:MySQL


  • 线程模式启动快,适用于短连接模式;


2.Oracle进程


查看命令:ps -eflgrep ora


oracle    21269    1    0 Mar08 ?        00:04:21 ora_pmon_orcl

oracle    21288    1    0 Mar08 ?        00:01:54 ora_dbwe_orcl

oracle    21290    1    0 Mar08 ?        00:07:54 ora_lgwr_orcl

oracle    21292    1     0 Mar08 ?        00:05:49 ora_ckpt_orcl

oracle    21294    1    0 Mar08 ?        00:00:56 ora_smon_orcl

……


3.PolarDB进程


查看命令:ps-ef|grep postgres


Postgres    9757        1    0 18:00 pts/2 00:00:00/home/postgres/polardb/PolarDB-for- 

PostgreSOL/prebuild/bin/postgres-D/data/pgdata3

Postgres    9760    9757    0 18:00?    00:00:00 postgres:checkpointer

Postgres    9761    9757    0 18:00?    00:00:00 postgres:background writer

postgres    9762    9757    0 18:00?    00:00:00 postgres:walwriter

postgres    9763    9757    0 18:00?    00:00:00 postgres:autovacuum launcher

postgres    9764    9757    0 18:00?    00:00:00 postgres:archiver

postgres    9765    9757    0 18:00?    00:00:00 postgres:stats collector

postgres    9766    9757    0 18:00?    00:00:00 postgres:logical replication

launcher

posteres    11268    10852    0 18:24 pts/2 00:00:00 ./prebuild/bin/psgl -U postgres -h 192168.51.214 -d postgres -p 6016 -W

Postgres    11279    9757    0 18:24?    00:00:00 postgres: postgres postgres 192.168.51214(17086) idle

……


4.MySQL线程


查看命令:ps -efT|grep mysqld

mysql        12118 12118 12061 0    18:37 pts/2    00:00:00 /bin/sh

/data/mysq1/app/bin/mysqld_safe --defaults-file=/mysq1/product/mycnf --user=mysql

mysq1        12820 12820 12118 1    18:37 pts/2    00:00:00 /data/mysql/app/bin/mysqld -- defaults-file=/mysql/product/my.cnf  --basedir=/data/mysql/app -- datadir=/mysql/product/data --plugin-dir=/data/mysql/app/1ib/plugin --log- 

error=/mysq1/product/data/myerror.log --pid-file=localhost.pid -- socket=/tmp/mysql.sock --port=6015

……


三、数据库的启停


1.数据库的启动


a.Oracle的启动


sqlplus / as sysdba

startup


启动三步骤(Oracle和PolarDB类似,而MySQL没有控制文件):

  • 打开参数文件;
  • 打开控制文件;
  • 打开所有数据文件;


b.MySQL的启动


/data/mysq1/app/bin/mysqld_safe --defaults-file=/mysq1/product/my.cnf --user=mysql &

其中my.cnf为参数文件。


c.PolarDB的启动


  • 启动方式一:


./prebuild/bin/pg_ctl D /data/pgdata3 start l logfile


解析:命令中D /data/pgdata3指明默认数据库所在的目录,参数文件(postgressql.cnf)就在这个目录中。


  • 启动方式二:最直接的启动方式


./prebuild/bin/postgres –D /data/pgdata3


Mysql也可以直接运行可执行文件启动(mysqld)。


2.数据库的关闭


a.PolarDB的关闭:

pg_ctl –D /data/pgdata3 stop


b.MySQL的关闭:

mysqladmin –uroot –proot -S/tmp/mysql.sock -P6015 shutdown


c.Oracle的关闭:

sqlplus / as sysdba

shutdown immediate/abort


四、数据库的告警日志体系


如果遇到数据库无法正常启动的情况,可以通过查看日志发现问题。


  1. PolarDB日志

cd /data/pgdata3

vim postgres.conf

log destinationcn参数:


364 #log destination=stderr     #Valid values arecombinations of

365                    #stderr,csvlog,syslog,and eventlog

366                    # depending on platform. csvlog

367                    # requires logging_collector to be on.


参数说明:

stderr:屏幕输出错误信息;

csvlog:记录到独立日志文件;

syslog:记录到操作系统日志文件内;

日志文件一般采用csvlog形式,存放于系统目录的log目录下。


  1. Oracle日志


使用diagnostic_dest参数决定日志文件位置;


  1. MySQL日志


使用log_error参数配置错误日志位置。


五、表与数据存储方式


1.Oracle


表空间 --> 数据文件 -> 段-> 区 -> 块


Oracle的数据存放在数据文件中,多个数据文件构成表空间,表存放在表空间中。


2.MySQL


mysql> show variables like datadir;

image.png

MySQL的数据文件存放在datadir中,路径是/mysql/product/data;

/mysql/product/data/数据库名/表名.frm:表相关元数据;

/mysql/product/data/数据库名/表名.ibd:表相数据文件;


3.PolarDB


postgres=# \d+

image.png

说明:表名称是rr11,连接数据库为postgres,表大小是232KB。


postgres=# select oid, datname from pg_database

image.png

说明:13287是postgres数据库的oid。


postgres=# select oid, relfilenode from pg_class where relname=rr11;

image.png

说明:16419是表的oid。


PolarDB数据库都在目录/base/下:

PolarDB数据库对应目录/base/13287/16419: rr11表对应数据文件;

image.png


PolarDB数据库对应目录/base/13287/16419_fsm: 用于空间管理的文件;

有可能还有*_vm文件:用于vaccum管理;


更简单的方式:

Select pg_relation_filepath(rrll)

image.png


六、数据库、schema与owner

1.Oracle中的数据库、Schema与owner


  • 实例:指内存和进程;
  • 数据库:对应的数据和表文件,一个实例可以对应多个数据库;
  • 用户与Schema:用户用来限定数据库的连接和操作权限,Oracle用户和Schema是深度绑定的,Schema的原意是方案,这里是类似应用架构的概念,表属于某个用户,也属于Schema。


2.MySQL中的数据库、Schema与owner


MySQL数据库即目录,早期版本中,创建一个目录即是一个数据库。PolarDB和Oracle属于多租户的概念,MySQL不属于多租户。


3.PolarDB中的数据库、Schema与owner


PolarDB中的数据库、Schema和owner(用户)三位一体:


a.Owner(用户):与权限一起,决定能不能做某样操作;


b.Schema:表的属主,逻辑上划分表;

  • 表属于某个schema,表默认都属于public schema;
  • 不同schema中的表,可以重名;
  • 可以跨schema访问表;


c.数据库:物理上决定着表的存储位置。对应Oracle 12c后的PDB;

  • 不能直接跨数据库访问表,只能通过dblink形式跨库访问表;
  • 不同数据库,可以有重名的schema;
  • 每个数据库有自己的原数据,但共享xlog等公共资源。


操作示例:


postgres=# create database db2;

CREATE DATABASE


postgres=# select oid, datname from pg_database;

image.png

cd base/16441/


[postgres@localhost16441]$ ls -lFrt | wc -l

295


  • 创建数据库后,对应目录中就有295个与表相关的文件,这些都是元数据文件;
  • PolarDB与MySQL不同,与Oracle的PDB更类似。


七、表空间与数据库


1.Oracle与MySQL


  • 表空间在Oracle中决定文件的分布;
  • Oracle表空间由多个数据文件构成;
  • MySQL表空间对应一个目录,类似PolarDB;


2.PolarDB


mkdir –p /data/tablespaces/tps1


postgres=# CREATE TABLESPACE tps1 LOCATION‘/data/tablespaces/tps1'; CREATE TABLESPACE


db1=# create table t3(c1 varchar(20), id int) tablespace tps1;

CREATE TABLE

db1=# select pg relation filepath(t3);

pg relation filepath

------------------------------------------

pg_tblspc/16443/PG11201809051/16424/16444


解析:


a.t3表放在tps1表空间,对应目录/data/ tablespaces/tps1,这部分与MySQL类似,都是表空间对应目录;

b.pg_tblspc:后面将有叙述;

c.16443:表空间的OID;


db1=# select oid,* from pg_tablespace;

image.png

d.16424:数据库的0ID,t3表存储在postgres数据库中;

e.16444:表t3自身的OID;

f.PolarDB中,表空间下可以有多个数据库,按数据库放在多个目录中,表空间是独立于数据库外的,属于实例级别概念,后面会做详细讲解。


3.实例与数据库


a.Oracle


  • 数据库实例与表空间没有关系,表空间中数据文件可以位于任何位置;
  • 实例级相关的数据,在ORACLE_HOME中,比如,监听配置文件listener.ora,一台服务器上的多个数据库可以共享同一个listener.ora;
  • listener.ora位于$ORACLE_HOME/network/admin/中,它是属于实例的;


b.PolarDB


  • 数据库实例对应一个固定的位置,initdb初始化一个数据库实例、以及在启动数据库实例时,都要指定一个位置,这一点MySQL与PolarDB相同:

pg_ctl -D /data/pgdata3 start

  • 这个位置中有实例的各种配置文件,都是独立于各个数据库的;

(如,配置参数文件postgres.conf,就属于实例级的,它不属于任何一个数据库。)

  • 实例所有的文件(包括所有数据库的所有文件),都要在“/data/pgdata3”目录中,但表空间在“/data/pgdata3”目录之外,这违反了基本原则,解决方法如下:

/data/pgdata3/pg_tblspc中,放置一个指向表空间位置的软链接“16443”;

db1=# select pg relation filepath(‘t3'):

pg relation_filepath

---------------------------

pg_tblspc/16443/PG_11_201809051/16424/16444

pg_tblspc: 如上所述,就是用来存放指向表空间位置的软链接。


小结:


  • Oracle一个表空间最多包括1024个数据文件;
  • Oracle在多个数据文件中做类似条带的I/O分配操作;
  • MySQL和PolarDB的表空间是一个目录。


八、用户与权限体系


1.Oracle

  • 用户也是Schema;
  • 用户、角色、权限;


2.MySQL

  • 用户、Schema分离(和PolarDB相同);
  • 用户的作用:登录数据库的凭据,和权限结合,控制客户端的操作(和PolarDB相同);


3.PolarDB

创建用户:

CREATE USER U1 WITH PASSWORD123456;


授权:

GRANT ALL PRIVILEGES ON DATABASE db1 TO u1;

GRANT ALL PRIVILEGES ON all tables in schema test1 TO u1:


修改连接:

\c db1 u1;  #以用户u1连接到db1数据库;

\password


传统的创建语句:

create role u1 login password123456;


注意:

role:在MySQL和Oracle中是“角色”,用于权限和组合;在PolarDB中是“用户”。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
4月前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
20天前
|
关系型数据库 MySQL 数据库
市场领先者MySQL的挑战者:PostgreSQL的崛起
PostgreSQL(简称PG)是世界上最先进的开源对象关系型数据库,起源于1986年的加州大学伯克利分校POSTGRES项目。它以其丰富的功能、强大的扩展性和数据完整性著称,支持复杂数据类型、MVCC、全文检索和地理空间数据处理等特性。尽管市场份额略低于MySQL,但PG在全球范围内广泛应用,受到Google、AWS、Microsoft等知名公司支持。常用的客户端工具包括PgAdmin、Navicat和DBeaver。
40 4
|
2月前
|
数据库
|
2月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
222 4
|
2月前
|
关系型数据库 MySQL PostgreSQL
postgresql和mysql中的limit使用方法
postgresql和mysql中的limit使用方法
77 1
|
4月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
778 2
|
4月前
|
关系型数据库 分布式数据库 数据库
开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布
PolarDB进行了深度的内核优化,从而实现以更低的成本提供商业数据库的性能。
|
3月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
5月前
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?

推荐镜像

更多
下一篇
开通oss服务