AliSQL 20171010版本发布 Sequence兼容PostgreSQL/Oracle语法和升级TLSv1.2

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 为了增加Sequence使用的灵活性,以及方便从不同数据库进行迁移,AliSQL增加了Sequence的兼容性,兼容了PostgreSQL和Oracle的Sequence语法。 为了保障数据传输安全,AliSQL使用OpenSSL来代替社区版的yaSSL,并把默认的,已经被PCI DSS v3.1标准废弃的TLSv1.0升级到TLSv1.2版本。

Abstract

为了增加Sequence使用的灵活性,以及方便从不同数据库进行迁移,AliSQL增加了Sequence的兼容性,兼容了PostgreSQL和Oracle的Sequence语法。

为了保障数据传输安全,AliSQL使用OpenSSL来代替社区版的yaSSL,并把默认的,已经被PCI DSS v3.1标准废弃的TLSv1.0升级到TLSv1.2版本。

并修复了一个Semisync的未合理处理信号的bug,
感谢 boonie81 提交的bug issue#68

AliSQL REPO: https://github.com/alibaba/AliSQL
AliSQL Release Notes: https://github.com/alibaba/AliSQL/wiki/Changes-in-AliSQL-5.6.32-(2017-10-10)

1. Sequence兼容PostgreSQL和Oracle使用语法

概要

为了增加sequence使用的用户体验,以及满足用户的使用习惯,Sequence新增了使用语法支持:

Sequence创建语法保持不变:

CREATE SEQUENCE [IF NOT EXISTS] schema.seqName
   [START WITH <constant>]
   [MINVALUE <constant>]
   [MAXVALUE <constant>]
   [INCREMENT BY <constant>]
   [CACHE <constant> | NOCACHE]
   [CYCLE | NOCYCLE]
  ;

SHOW syntax:
  SHOW CREATE SEQUENCE schema.seqName;
  SHOW CREATE TABLE schema.seqName;

除了原有支持的查询方法:

 SELECT [nextval | currval | *] FOR schema.seqName;
 SELECT [nextval | currval | *] FROM schema.seqName;

新增了函数和dual表方法:

 SELECT nextval(seqName);  
 SELECT currval(seqName);

 SELECT seqName.nextval from dual;
 SELECT seqName.currval from dual;

2. 升级TLSv1.2

概要

原有的官方社区版 MySQL 只支持到 TLSv1.0 版本,但 TLSv1.0 已经证明是非安全的,存在漏洞,并已经被 PCI DSS v3.1 标准废弃了,考虑到社区的yaSSL只能最高支持TLSv1.1版本, 并且方便部署,减少依赖,AliSQL直接静态编译了OpenSSL,提供TLSv1.2版本。 新增了编译方式和参数:

新增支持cmake编译参数:
-DWITH_SSL=openssl 即静态编译openSSL。

新增参数tls_version:
如果使用yaSSL编译:tls_version的默认值是:TLSv1,TLSv1.1
如果使用OpenSSL编译:tls_version的默认值是:TLSv1,TLSv1.1,TLSv1.2

例如:使用OpenSSL编译的AliSQL:

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show global variables like '%tls_%';
+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| have_tlsv1_2  | YES                   |
| tls_version   | TLSv1,TLSv1.1,TLSv1.2 |
+---------------+-----------------------+
2 rows in set (0.00 sec)

配置证书进行连接来查看当前连接的tls版本:

mysql> show global variables like '%ssl%';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| have_openssl  | YES                                        |
| have_ssl      | YES                                        |
| ssl_ca        | /u01/ca.pem                                |
| ssl_capath    |                                            |
| ssl_cert      | /u01/server-cert.pem                       |
| ssl_cipher    |                                            |
| ssl_crl       |                                            |
| ssl_crlpath   |                                            |
| ssl_key       | /u01/server-key.pem                        |
+---------------+--------------------------------------------+

使用ca证书进行连接:
mysql -h127.0.0.1 -ussl_user --ssl-ca=/u01/ca.pem --ssl-cert=/u01/client-cert.pem --ssl-key=/u01/client-key.pem

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.6.32, for Linux (x86_64) using  EditLine wrapper

Connection id:          4
Current database:
Current user:           ssl_user@127.0.0.1
SSL:                    Cipher in use is DHE-RSA-AES128-GCM-SHA256
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.6.32 Source distribution
Protocol version:       10
Connection:             127.0.0.1 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306 
Uptime:                 1 hour 35 min 31 sec

Threads: 1  Questions: 16  Slow queries: 0  Opens: 70  Flush tables: 1  Open tables: 63  Queries per second avg: 0.002
--------------


mysql> show status like 'ssl_version';
+---------------+---------+
| Variable_name | Value   |
+---------------+---------+
| Ssl_version   | TLSv1.2 |
+---------------+---------+
1 row in set (0.00 sec)

为了使用TLSv1.2版本,也必须升级客户端使用openSSL编译,其兼容性如下:

Compatibility

The TLS Protocol version matrix:
-----------------------------------------------------------------------
                    Pre_Server   Post_yaSSL_Server  Post_openSSL_Server
Pre_Client          TLSv1.0      TLSv1.0            TLSv1.0
Post_yaSSL_Client   TLSv1.0      TLSv1.1            TLSv1.1
Post_openSSL_Client TLSv1.0      TLSv1.1            TLSv1.2
-----------------------------------------------------------------------

3.Semisync的bug修复

概要

在系统启动过程中,Semisync模块的ACK Receiver线程在系统屏蔽信号之前boot,导致当有信号的时候,
ACK Receiver 线程接收到了信号,而不是专有信号处理线程,导致不能正常的Shut down。

再次感谢Github社区的boonie81同学提交的bug report。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
16天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
1月前
|
Oracle 关系型数据库 分布式数据库
PolarDB常见问题之PolarDB(Oracle兼容版) 执行命令报错如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
3月前
|
人工智能 运维 关系型数据库
媒体声音|PolarDB再升级:欢迎来到云数据库 x AI新时代
让个人开发者和企业用户都可以像“搭积木”一样开发和管理数据库
媒体声音|PolarDB再升级:欢迎来到云数据库 x AI新时代
|
1月前
|
关系型数据库 分布式数据库 数据库
PolarDB PostgreSQL版:Oracle兼容的高性能数据库
PolarDB PostgreSQL版是一款高性能的数据库,具有与Oracle兼容的特性。它采用了分布式架构,可以轻松处理大量的数据,同时还支持多种数据类型和函数,具有高可用性和可扩展性。它还提供了丰富的管理工具和性能优化功能,为企业提供了可靠的数据存储和处理解决方案。PolarDB PostgreSQL版在数据库领域具有很高的竞争力,可以满足各种企业的需求。
|
1月前
|
关系型数据库 MySQL 数据库
django4版本提示 django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26)
在学习Django时,用户遇到`django.db.utils.NotSupportedError`,提示需要MySQL 8.0.25或更高版本,但其系统上是5.7.26。为解决这个问题,用户决定不升级MySQL,而是选择注释掉Django源码中的数据库版本检查。通过Python命令行找到Django安装路径,进入`db/backends/base/base.py`,注释掉`self.check_database_version_supported()`函数
116 0
|
26天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
96 0
|
3月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
89 0
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
【极光系列】Windows安装Mysql8.0版本
【极光系列】Windows安装Mysql8.0版本
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8.0绿色版本——最纯净的安装体验(免去卸载不掉只能重做系统的‘囧‘境)
MySQL8.0绿色版本——最纯净的安装体验(免去卸载不掉只能重做系统的‘囧‘境)
109 0
|
2月前
|
JSON 关系型数据库 MySQL
穿越MySQL版本时光:5.7和8.0的差异全揭秘
穿越MySQL版本时光:5.7和8.0的差异全揭秘
117 0

推荐镜像

更多