你是谁?MySQL 和 MariaDB 身份验证协议从 1997 年到 2017 年的历史

MySQL 3.20 至 4.0

在那些美好的旧时光里,32MB 的内存都能配得上 my-huge.cnf 这个名字,那时候没人知道 Google,Facebook 甚至还不存在,安全性……怎么说呢……有点可爱。电脑病毒不会窃取数百万资金,也不会扰乱选举——它们只是播放《扬基歌》或者告诉你别玩电脑。人们使用 telnet 和 ftp,尽管一些有安全意识的管理员已经知道 ssh。

大约在那个时候,或早或晚几年,MySQL 诞生了。它有了用户,这些用户必须被阻止看到别人的数据,但允许使用自己的数据。……

MariaDB 参与 2016 年谷歌编程之夏

MariaDB 基金会连续第四年参加谷歌编程之夏GSoC 中的 MariaDB 组织是所有属于 MariaDB 生态系统项目的伞形组织,包括 MariaDB Server、MariaDB Connectors 或 MariaDB MaxScale。我们建议的项目想法的完整列表在MariaDB Jira中。今年我们获得了 10 个学生名额(去年是 8 个,2014 年是 5 个,2013 年是 3 个)。结果很好,今年的申请者非常优秀。我们的学生选择了这些项目

针对服务器

  • MDEV-7773 聚合存储函数
  • 学生: Varun Raiko, 导师: Sanja Byelkin 和 Vicențiu Ciorbaru

  • MDEV-8947 对 2.x 的 Cassandra 连接器支持
  • 学生: Charles Muurmu, 导师: Sergey Petrunia
    博客: https://cassandrastorageenginev2.wordpress.com/

  • MDEV-4989 在 mysqlbinlog 中支持 GTID
  • 学生: Becca Tucker, 导师: Lixun Peng 和 Colin Charles

  • MDEV-9711 无填充(NO PAD)排序规则
  • 学生: Daniil Medvedev, 导师: Alexander Barkov

  • MDEV-9197 将条件下推到不可合并的视图/派生表
  • 学生: Galina Shalygina, 导师: Igor Babaev 和 Sergey Petrunia
    博客: http://gsocmariadbshagalla.blogspot.ru/

  • MDEV-371 blobs 的唯一索引(服务器端实现)和生成哈希的自适应哈希
  • 学生: Sachin Setiya, 导师: Sergei Golubchik

  • MDEV-371 blobs 的唯一索引(在 MyISAM, Aria, InnoDB, 和 XtraDB 中)
  • 学生: Shubham Barai, 导师: Jan Lindström 和 Sergei Golubchik

针对 MariaDB Connector/C

针对 MariaDB MaxScale

针对 MySQL 的主高可用性管理器

许多项目有两个导师,以确保学生总能快速得到问题的答案,并且即使其中一位导师在休假,总有人可以提供帮助。……

MariaDB 中 SSL 的现状

通常,当人们提到“SSL”或“TLS”时,它指的不是某个特定的协议,而是一系列协议维基百科文章有详细介绍,但简而言之——SSL 2.0 和 SSL 3.0 已经废弃,不应再使用(著名的 POODLE 漏洞利用了 SSL 3.0 的缺陷)。TLS 1.0 已经有十六年历史了,虽然仍在被使用,但新的安全标准(例如 PCI DSS v3.1)要求使用 TLS 1.1 或更佳的 TLS 1.2。

MySQL 从 2001 年就开始支持 TLS 1.0。这意味着 MariaDB 从第一天起就支持它,并且从未支持较弱的 SSL 2.0 或 SSL 3.0。……

MariaDB 10.1.1: RBR 的触发器

有时用户会提出一些乍一看似乎没有意义的需求。但当你开始询问时,你会意识到用户是对的,你是错的,实际上这是一个完全合乎逻辑且有效的用例。

当我听说有人请求让触发器在基于行的复制(RBR)的从库上工作时,我经历过这样一个时刻。比如,真的吗?在 RBR 中,触发器所做的所有更改都会作为行事件从主库复制到从库。如果触发器在从库上再次触发,它们会重复更改两次。而且,无论如何,假设只有从库上有触发器(为什么?),在基于语句的复制中,触发器本应在从库上正常运行,不是吗?……

MariaDB 10.1.1: engine_condition_pushdown 标志已废弃

让我从一个小故事开始。你坐在客厅壁炉旁,需要从书房拿本书……呃,不对,抱歉,年代不对。你正在建造一个机械臂,它可以帮你开啤酒或冲咖啡,或者为你提供你选择的任何其他饮料……同时你还在建造下一个机械臂。于是,你——一只手拿着烙铁,另一只手拿着 Arduino——让你弟弟从地下室拿一盒特定的电阻(你没想到用完了)。问题是——你弟弟还小,分不清电阻和呼吸器。……

MariaDB 10.1.1: 系统变量及其元数据

我认为如果我说 MariaDB 或 MySQL 服务器对服务器系统变量的了解远不止其值,这不会让任何人感到惊讶。事实上,每个变量都可以是仅限于会话或全局范围的,可以是只读或可写的,它都有关联的帮助文本(通过 mysqld –help –verbose 打印),某些变量只接受给定字符串集合中的值(自 MariaDB 10.1.0 起,这个允许值的集合也会通过 mysqld –help –verbose 打印),数值变量有有效值的上下界(这些从未在任何地方打印过),等等。我一直觉得没有办法查询这些信息有点浪费。……

MariaDB 10.1.1: 插件的 FLUSH 和 SHOW

MariaDB 和 MySQL 中最流行的插件类型之一是 INFORMATION_SCHEMA 插件类型。INFORMATION_SCHEMA 插件会向 INFORMATION_SCHEMA 中添加新表。有很多 INFORMATION_SCHEMA 插件,因为它们可以用来向用户展示任何内容,并且非常易于编写。

MariaDB 10.1.1 包含九个 INFORMATION_SCHEMA 插件

  • Feedback — 显示匿名的服务器使用信息,并可选择将其发送到配置的 URL。
  • Locales — 列出编译进服务器的区域设置,由 Roberto Spadim 实现
  • METADATA_LOCK_INFO — 列出服务器中的元数据锁。

……

MariaDB 10.1.1: 复合语句

有时需要有条件地执行某些 SQL 语句。如果您从 PHP(或 Java 或其他)应用程序中执行此操作,这很简单。但是,如果您只有纯 SQL 呢?MariaDB 和 MySQL 在 mysql_fix_privilege_tables.sql 脚本(由 mysql_upgrade 工具应用)中使用了两种技术。

  1. 创建一个包含 IF 语句的存储过程,调用一次然后删除它。这要求用户拥有 CREATE ROUTINE 权限,并且 mysql.proc 表必须存在且可用(这不一定为真——我们正在从 mysql_upgrade 执行此操作,对吧?)。
  2. 使用动态 SQL,例如
    SET @str = IF (@have_csv = ‘YES’,
    ‘CREATE TABLE IF NOT EXISTS general_log (
    event_time TIMESTAMP(6) NOT NULL,
    user_host MEDIUMTEXT NOT NULL,
    thread_id BIGINT(21) UNSIGNED NOT NULL,
    server_id INTEGER UNSIGNED NOT NULL,
    command_type VARCHAR(64) NOT NULL,
    argument MEDIUMTEXT NOT NULL
    ) engine=CSV CHARACTER SET utf8 comment=”General log”‘,
    ‘SET @dummy = 0’);

……