GVKun编程网logo

为何在中国 MySQL 远比 PostgreSQL 流行(mysql为什么很受大家青睐)

1

在本文中,我们将给您介绍关于为何在中国MySQL远比PostgreSQL流行的详细内容,并且为您解答mysql为什么很受大家青睐的相关问题,此外,我们还将为您提供关于2020PostgreSQL亚洲大

在本文中,我们将给您介绍关于为何在中国 MySQL 远比 PostgreSQL 流行的详细内容,并且为您解答mysql为什么很受大家青睐的相关问题,此外,我们还将为您提供关于2020 PostgreSQL 亚洲大会 - PostgreSQL 授权培训机构公益专场精彩回顾、Centos7 下源编译安装 Postgresql 并设置开机自动启动 postgresql.serivce 服务相关研究、centos7 设置 mysql 自启动的配置文件中 [Service] User=mysql Group=mysql,user 和 group 这边的 mysql 是指的什么?centos 的登录用户名?、macosx 下从 PostgreSQL 14 更新到 PostgreSQL 15的知识。

本文目录一览:

为何在中国 MySQL 远比 PostgreSQL 流行(mysql为什么很受大家青睐)

为何在中国 MySQL 远比 PostgreSQL 流行(mysql为什么很受大家青睐)

首先在全球范围内,MySQL 一直是领先于 PostgreSQL (下文简称 PG) 的。下图是 DB-Engines 的趋势图,虽然 PG 是近 10 年增长最快的数据库,但 MySQL 依然保持着优势。

再来看一下 Google Trends 过去一年的对比

MySQL 也依然是明显领先的。而进一步看一下地域分布的话

绝大多数地区依然是 MySQL 领先,份额对比在 60:40 ~ 70:30 之间;少数几个国家如俄罗斯不分伯仲;印度的对比是 85:15;而中国则是达到了 96:4,也是 Google Trends 上差异最明显的国家。

笔者从 2009 年左右开始学习数据库相关知识,接触到了 MySQL 5.1 和 PG 8.x。而深度在工作中使用则是 2013 年,那时加入 Google Cloud SQL 开始维护数据库,MySQL 从 5.5 开始,到之后 2017 年 Cloud SQL 推出了 PG 服务,从 9.6 开始,后来一直同时维护 Google 内部的 MySQL 和 PG 分支,也就一直关注着两边的发展。18 年回国后,进一步熟悉了国内的生态。

下面就来尝试分析一下 MySQL 在中国流行度遥遥领先于 PG 的原因。

Windows

MySQL 在 1998 年就提供了 Windows 版本,而 PostgreSQL 则到了 2005 年才正式推出。之前读到的原因是 Windows 早期的版本一直无法很好支持 PostgreSQL 的进程模型。

上手门槛

MySQL 上手更简单,举几个例子:

  1. 连 PG,一定需要指定数据库,而 MySQL 就不需要。psql 大家碰到的问题是尝试连接时报错 FATAL Database xxx does not exist。而 mysql 碰到的问题是连接上去后,执行查询再提示 no database selected。
  2. 访问控制的配置,首先 PG 和 MySQL 都有用户系统,但 PG 还要配置一个额外的 pg_hba (host-based authentication) 文件。
  3. MySQL 的层级关系是:实例 -> 数据库 -> 表,而 PG 的关系是:实例(也叫集群)> 数据库 > Schema > 表。PG 多了一层,而且从行为表现上,PG 的 schema 类似于 MySQL 数据库,而 PG 的数据库类似于 MySQL 的实例。PG 的这个额外层级在绝大多数场景是用不到的,大家从习惯上还是喜欢用数据库作为分割边界,而不是 schema。所以往往 PG 数据库下,也就一个 public schema,这多出来的一层 schema 就是额外的负担。
  4. 因为上面机制的不同,PG 是无法直接做跨库查询的,早年要通过 dblink 插件,后来被 FDW (foreign data wrapper) 取代。
  5. PG 有更加全面的权限体系,数据库对象都有明确的所有者,但这也导致在做测试时,更经常碰到权限问题。

虽然 PostgreSQL 的设计更加严谨,但也更容易把人劝退。就像问卷设计的一个技巧是第一题放一个无脑就能答上来的二选一,这个的目的在于让对方开始答题。

性能

最早 Google 搜索和广告业务都是跑在 MySQL 上的,我读到过当时选型的备忘。其实一开始团队是倾向于 PG 的(我猜测是 PG 的工程质量更加符合团队的技术品味),但后来测试发现 MySQL 的性能要好不少,所以就选型了 MySQL。
现在两者的性能对比已经完全不一样了,而且性能和业务关联性很强,取决于 SQL 复杂度,并发,延迟这些不同的组合。目前在大部分场景下,MySQL 和 PG 的性能是相当的。有兴趣可以阅读 Mark Callaghan 的文章。

互联网

最重要的是 LAMP 技术栈,Linux + Apache + MySQL + PHP,诞生于 1998 年,和互联网崛起同步,LAMP 技术栈的普及也带火了 MySQL。这个技术栈的绑定是如此之深,所以时至今日,MySQL 官方客户端 MySQL Workbench 也还是不及 phpMyAdmin 流行。

大厂的号召力

前面提到的 Mark Callaghan 一开始在 Google 的 MySQL 团队,他们给生态做了很多贡献,后来 Google 内部开始用 Spanner 替换 MySQL,Mark 他们就跑到了 Facebook 继续做,又进一步发展了 MySQL 的生态,像当时互联网公司都需要的高可用方案 MHA (Master High Availability) 就是 Mark 在 FB 时期打磨成熟的。当时整个互联网技术以 Google 为瞻,传播链差不多是 Google > Facebook / Twitter > 国内互联网大厂 > 其他中小厂。MySQL 在互联网公司的垄断就这样形成了。
相对的,那段时间 PG 有影响力的文章不多,我唯一有印象的是 Instagram 分享他们 sharding 的方案,提到用的是 PostgreSQL。

生态

有了大量使用后,自然就有人去解决碰到的各种问题。先是 InnoDB 横空出世,解决了事务和性能问题。主从,中间件分库分表方案解决了海量服务的扩展和高可用问题。各种 MySQL 相关书籍,培训资料也冒了出来,应该不少人都读过高性能 MySQL (High Performance MySQL) 这本书。

业界有 Percona 这样专注于做 MySQL 技术咨询的公司,他们还研发了一系列工具,比如做大表变更的 pt-online-schema-change(后来 GitHub 还发布了改良版 gh-ost),做备份的 xtrabackup。

国内也做了不少的贡献,阿里给上游贡献了许多 replication 的改进。SQL 审核优化这块,有去哪儿研发的 Inception,小米团队的 SOAR。Parser 有 PingCAP 的 MySQL Parser。

相对而言 PG 在工具链的生态还是差不少,比如 PG 生态里没有开箱即用的 Parser,没有 Parser 也就无法做 SQL 审核。Bytebase 在实现相关功能时,就只能从头开始做。当然这也成为了 Bytebase 产品的核心竞争力,我们是市面上对 PG 变更审核,查询脱敏支持最好的工具,除了大表变更外,功能完全对标 MySQL。

总结和展望

回到中国 MySQL 远比 PostgreSQL 流行的原因,在上面所有列出的要素里,我觉得最核心的还是第一条,MySQL 很早就能跑在 Windows 上,而 PG 不能。因为有了能跑 Windows 这个点,MySQL 成为了 LAMP 的一部分,到后来成为了支撑整个互联网的基石。当时国内大家手头装的都是 windows 操作系统,要开发 web 应用,都用 LAMP 架构,就顺便把 MySQL 带上了。

此外国内还有更明显的头部效应。国内所有互联网公司的技术体系都源自阿里,比如拿研发环境来说,SIT (System Integration Test) 是我回国加入蚂蚁后才接触到的名词,但后来在其他各个地方又都反复遇到。数据库方案也是如此,全套照搬了阿里的 MySQL 方案。就连技术职级也是,找工作先确认对标 P 几。

就在上月,MySQL 5.7 宣布了 EOL,算是给 MySQL 5 系,这个支撑了过去 15 年中国互联网的功勋做了一个告别。

随着 MySQL 的辞旧,PG 的崛起,在这 AI 的黎明,VR 的前夜,下一个 15 年,MySQL 和 PG 之间相爱相杀的故事又该会如何演绎呢。

I


更多资讯,请关注 Bytebase 公号:Bytebase

2020 PostgreSQL 亚洲大会 - PostgreSQL 授权培训机构公益专场精彩回顾

2020 PostgreSQL 亚洲大会 - PostgreSQL 授权培训机构公益专场精彩回顾

CUUG 创始人、首席讲师陈卫星做《搭建属于 postgres 的 “RAC” 企业应用》分享。

恩墨学院培训总监姜殿斌做《通过实验理解 PG 数据库一个分支的体系结构》分享。

恩墨学院 PG 讲师马晓亮做《新能源行业基于 PostgreSQL 多租户实现》分享。

晟数学院 PG 讲师宋少华做《探究 PostgreSQL VACUUM 原理 》分享。

博学教育 PG 讲师吕海波做《PostgreSQL 源码解读 -- HASH 表算法解析 》分享。

盘古云课堂 PG 讲师于天恒做《PostgreSQL 中 fillfactor 的使用 》分享。

东方瑞通 PG 讲师刘华阳做《PostgreSQL 怎么撬动企业的大门 》分享。

柯普瑞学院 PG 讲师吴子文做《PostgreSQL Backup and Recovery 》分享。

博森瑞学院 PG 讲师石佛做《PostgreSQL 在数据仓库方面的优势与实践 》分享

云贝学院 PG 讲师杨涛做《Oracle 迁移到 PostgreSQL 的原理与实战》分享

 

关于中国 PostgreSQL 培训认证

中国 PostgreSQL 培训认证由中国开源软件联盟 PostgreSQL 分会携手工信部中国电子工业标准化技术协会、专业培训机构联合打造,并列入 “中国电子信息行业专业人才培养工程” 之中。其目的是为国内 IT 从业者提供 PostgreSQL 技术培训服务,并科学、公正地对从业人员进行职业资格、专业技术资格认定和专业技术水平测试。

 

更多精彩内容,请关注以下平台、网站:

 

中国 PostgreSQL 分会官方公众号(技术文章、技术活动):

开源软件联盟 PostgreSQL 分会

 

中国 PostgreSQL 分会技术问答社区:

www.pgfans.cn

 

中国 PostgreSQL 分会官方网站:

www.postgresqlchina.com

Centos7 下源编译安装 Postgresql 并设置开机自动启动 postgresql.serivce 服务相关研究

Centos7 下源编译安装 Postgresql 并设置开机自动启动 postgresql.serivce 服务相关研究

 

编写开机自动启动服务脚本:

# cat >> /usr/lib/systemd/system/postgresql.service >> EOF

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking

User=postgres
Group=postgres

# Port number for server to listen on
Environment=PGPORT=5432

# Location of database directory
Environment=PGDATA=/usr/local/pgsql9.4/data

# Where to send early-startup messages from the server (before the logging 
# options of postgresql.conf take effect) 
# This is normally controlled by the global default set by systemd
# StandardOutput=syslog

# Disable OOM kill on the postmaster
OOMScoreAdjust=-1000

#ExecStartPre=/usr/local/pgsql9.4/bin/postgresql-check-db-dir ${PGDATA}
ExecStart=/usr/local/pgsql9.4/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/usr/local/pgsql9.4/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/usr/local/pgsql9.4/bin/pg_ctl reload -D ${PGDATA} -s

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

[Install]
WantedBy=multi-user.target

EOF

 

添加可执行权限:

chmod 754 /usr/lib/systemd/system/postgresql.service

 

设置为开机自启动:

systemctl enable postgresql.service

 

常用指令 (以 postgresql 服务为例):

启动某服务: 

systemctl  start  postgresql.service

停止某服务:

systemctl stop postgresql.service

重启某服务:

systemctl restart postgresql.service
service postgresql restart

使某服务自动启动 (如 tomcat 服务):

systemctl enable postgresql.service

使某服务不自动启动:

systemctl disable postgresql.service

检查服务状态:

systemctl   status  postgresql.service (服务详细信息)
systemctl   is-active postgresql.service(仅显示是否Active)

显示所有已启动的服务:

systemctl   list-units --type=service

 

centos7 设置 mysql 自启动的配置文件中 [Service] User=mysql Group=mysql,user 和 group 这边的 mysql 是指的什么?centos 的登录用户名?

centos7 设置 mysql 自启动的配置文件中 [Service] User=mysql Group=mysql,user 和 group 这边的 mysql 是指的什么?centos 的登录用户名?

centos7 设置 mysql 自启动的配置文件中

[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
#Restart=on-failure
#RestartPreventExitStatus=1
#PrivateTmp=false

这里的

[Service]

User=mysql

Group=mysql,

user 和 group 这边的 mysql 是指的什么?centos 的登录用户名?还是其他呢?

macosx 下从 PostgreSQL 14 更新到 PostgreSQL 15

macosx 下从 PostgreSQL 14 更新到 PostgreSQL 15

macosx 下从 PostgreSQL 14 (PG14) 更新到 PostgreSQL 15 (PG15)

1) 修改 PG14 运行端口

修改 PG14 的运行端口到 15432

sudo vim /Library/PostgreSQL/14/data/postgresql.conf

port = 5432   =>. port = 15432

重启 PG14

sudo -u postgres /Library/PostgreSQL/14/bin/pg_ctl -D /Library/PostgreSQL/14/data restart

 

2) 安装 PG15,运行端口默认为 5432

 

3)修改 PG15,PG15 的 pg_hba.conf 文件,让本地互信

sudo vim /Library/PostgreSQL/14/data/pg_hba.conf

sudo vim /Library/PostgreSQL/15/data/pg_hba.conf

 

local all all trust

 

重启

sudo -u postgres /Library/PostgreSQL/14/bin/pg_ctl -D/Library/PostgreSQL/14/data restart

sudo -u postgres /Library/PostgreSQL/15/bin/pg_ctl -D/Library/PostgreSQL/15/data restart

 

4) 切换目录,停止服务器

升级过程中会有写入,切换到 /tmp 目录下

cd /tmp

停止服务器

sudo -u postgres /Library/PostgreSQL/12/bin/pg_ctl -D/Library/PostgreSQL/12/data stop

sudo -u postgres /Library/PostgreSQL/13/bin/pg_ctl -D/Library/PostgreSQL/13/data stop

 

5)升级

先测试

sudo -u postgres /Library/PostgreSQL/13/bin/pg_upgrade -c -d /Library/PostgreSQL/12/data -D /Library/PostgreSQL/13/data -b /Library/PostgreSQL/12/bin -B /Library/PostgreSQL/13/bin -p 15432 -P 5432

若 locale 不一致,登录 PG13,升级一下,安全前可以选择合适的 locale 值。

UPDATE pg_database SET datcollate=''zh_CN.UTF-8'', datctype=''zh_CN.UTF-8'' WHERE datname=''template0'';

UPDATE pg_database SET datcollate=''zh_CN.UTF-8'', datctype=''zh_CN.UTF-8'' WHERE datname=''template1'';

UPDATE pg_database SET datcollate=''zh_CN.UTF-8'', datctype=''zh_CN.UTF-8'' WHERE datname=''postgres'';

select datname, datcollate, datctype from pg_database;

没有报错后,再执行

sudo -u postgres /Library/PostgreSQL/13/bin/pg_upgrade -v -d /Library/PostgreSQL/12/data -D /Library/PostgreSQL/13/data -b /Library/PostgreSQL/12/bin -B /Library/PostgreSQL/13/bin -p 15432 -P 5432

今天关于为何在中国 MySQL 远比 PostgreSQL 流行mysql为什么很受大家青睐的分享就到这里,希望大家有所收获,若想了解更多关于2020 PostgreSQL 亚洲大会 - PostgreSQL 授权培训机构公益专场精彩回顾、Centos7 下源编译安装 Postgresql 并设置开机自动启动 postgresql.serivce 服务相关研究、centos7 设置 mysql 自启动的配置文件中 [Service] User=mysql Group=mysql,user 和 group 这边的 mysql 是指的什么?centos 的登录用户名?、macosx 下从 PostgreSQL 14 更新到 PostgreSQL 15等相关知识,可以在本站进行查询。

本文标签: