Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mariadb的一些特性(<=10.4)

mariadb的一些特性(<=10.4)

作者头像
保持热爱奔赴山海
发布于 2019-09-17 06:36:54
发布于 2019-09-17 06:36:54
1.3K00
代码可运行
举报
文章被收录于专栏:数据库相关数据库相关
运行总次数:0
代码可运行

最近在看看MariaDB的官网上介绍MariaDB的功能和特性,大致罗列了本人觉得有必要了解下的几个地方:

支持到列级别的压缩

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `cmp2` (
`id` bigint(20) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`));

https://mariadb.com/kb/en/library/storage-engine-independent-column-compression/

支持sequence序列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE SEQUENCE s1 START WITH 50;

SHOW CREATE SEQUENCE s1\G;
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE SEQUENCE `s1` start with 50 minvalue 1 maxvalue 9223372036854775806
increment by 1 cache 1000 nocycle ENGINE=Aria
CREATE SEQUENCE将创建一个序列,在使用NEXT VALUE FOR sequence_name调用时生成新值。当人们想要更多地控制数字的生成时,它是AUTO INCREMENT的替代品。由于SEQUENCE缓存值(高达CACHE),因此在某些情况下可以比AUTO INCREMENT快得多。另一个好处是可以访问所有使用的序列生成的最后一个值,这解决了LAST_INSERT_ID()的一个限制。

https://mariadb.com/kb/en/library/create-sequence/

Semisync 内置到server中,不再需要install plugin方式安装插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql [localhost:10404] {root} (test) > show global variables like '%semi%';
+---------------------------------------+--------------+
| Variable_name                         | Value        |
+---------------------------------------+--------------+
| rpl_semi_sync_master_enabled          | OFF          |
| rpl_semi_sync_master_timeout          | 10000        |
| rpl_semi_sync_master_trace_level      | 32           |
| rpl_semi_sync_master_wait_no_slave    | ON           |
| rpl_semi_sync_master_wait_point       | AFTER_COMMIT |
| rpl_semi_sync_slave_delay_master      | OFF          |
| rpl_semi_sync_slave_enabled           | OFF          |
| rpl_semi_sync_slave_kill_conn_timeout | 5            |
| rpl_semi_sync_slave_trace_level       | 32           |
+---------------------------------------+--------------+
9 rows in set (0.001 sec)

可以设置自动终止与空闲事务的连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
通过 idle_transaction_timeout,idle_readonly_transaction_timeout 和 idle_write_transaction_timeout 系统变量,
可以在指定的时间段后自动终止与空闲事务的连接。

mysql [localhost:10404] {root} (test) > show global variables like '%idle%transaction%';
+-----------------------------------+-------+
| Variable_name                     | Value |
+-----------------------------------+-------+
| idle_readonly_transaction_timeout | 0     |
| idle_transaction_timeout          | 0     |
| idle_write_transaction_timeout    | 0     |
+-----------------------------------+-------+
3 rows in set (0.001 sec)

支持 system-versioned 表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
可以查看历史版本数据,贺春旸老师介绍过

https://blog.51cto.com/hcymysql/2121248
https://mariadb.com/kb/en/library/system-versioned-tables/

MariaDB 10.3支持update多表ORDER BY and LIMIT

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
自带了mariabackup 备份工具

mariadb10.3上, 有些独有的功能,例如innodb页面压缩,静态数据加密的功能。这在xtrabackup 上是不支持,只能用 mariabackup
具体的差异如下:
* MariaDB 10.1: With uncompressed and unencrypted MariaDB data, you can use XtraBackup. 
If encryption or compression is used, or when innodb_page_size is set to some value other than 16K it will not work.

* MariaDB 10.2: You might also want to try to use XtraBackup, but be aware that problems are likely due to the MySQL 5.7 
undo log format incompatibility bug that was fixed in MariaDB 10.2.2. Due to this bug, backups prepared with 
XtraBackup may fail to recover some transactions. Only if you run the server with the setting innodb_undo_logs=1 
this would not be a problem.

* MariaDB 10.3 and later: This case is more simple. XtraBackup is not compatible.

https://mariadb.com/kb/en/library/mariabackup-overview/
https://blog.51cto.com/hcymysql/2373581?source=dra
https://severalnines.com/blog/database-backups-comparing-mariadb-mariabackup-and-percona-xtrabackup

DDL快速失败

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DDL WAIT and NOWAIT
DDL时候,如果拿不到锁就快速返回失败

https://mariadb.com/kb/en/library/wait-and-nowait/

增加了密码过期策略

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE USER 'monty'@'localhost' PASSWORD EXPIRE INTERVAL 120 DAY;
CREATE USER 'monty'@'localhost' PASSWORD EXPIRE NEVER;

https://mariadb.com/kb/en/library/user-password-expiry/

隐藏列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE t (x INT, y INT INVISIBLE, z INT INVISIBLE NOT NULL DEFAULT 4);
INSERT INTO t VALUES (1),(2);
INSERT INTO t (x,y) VALUES (3,33);

SELECT * FROM t;
+------+
| x    |
+------+
|    1 |
|    2 |
|    3 |
+------+

SELECT x,y,z FROM t;
+------+------+---+
| x    | y    | z |
+------+------+---+
|    1 | NULL | 4 |
|    2 | NULL | 4 |
|    3 |   33 | 4 |
+------+------++

https://mariadb.com/kb/en/library/invisible-columns/

窗口函数支持

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://mariadb.com/kb/en/window-functions/

支持WITH表达式(CTE)

BLOB和text字段也支持设置默认值

默认会尝试使用原子写入,不支持情况下就改用双写缓冲(目前看是支持宝存的SSD)https://mariadb.com/kb/en/library/atomic-write-support/

对MyRocks引擎的支持

tokudb被拆分为单独的包 mariadb-plugin-tokudb  https://mariadb.com/kb/en/library/tokudb/

mysqlbinlog 支持 flashback参数, 实现DML的闪回  https://mariadb.com/kb/en/library/flashback/

AUTO_INCERMENT 持久化

支持压缩事件以减少二进制日志的大小

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
压缩是完全透明的。事件在写入二进制日志之前在主服务器上压缩,并且在写入中继日志之前由从服务器上的I / O线程解压缩。mysqlbinlog命令同样会为其输出解压缩事件。
当事件具有不可忽略的大小时,压缩将产生最大的影响,因为每个事件都是单独压缩的。例如,插入许多行或大值的批处理INSERT语句,或者在一个查询中触及多个行的基于行的事件。
https://mariadb.com/kb/en/library/compressing-events-to-reduce-size-of-the-binary-log/

binlog_format 在10.2.4后默认是mixed,最好我们还是改成row格式的

增加 JSON数据类型的支持

新增参数 read_binlog_speed_limit 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
允许限制slave从master读取binlog的速度(腾讯游戏提供code)
在某些情况下,从master读取binlog的速度很快,尤其是在创建新slave的时候,它会给master带来很高的流量。
https://jira.mariadb.org/browse/MDEV-11064
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用 BPF 进行 HTTPS 抓包 —— 以 Golang 和 cURL 为例
分析某些业务进程的 HTTPS 请求时,类似 tcpdump 和 Fiddler 等工具无法获得请求明文,不方便进行分析。本文探讨使用 BPF 解决 HTTPS 的可观测性问题。
ritchiechen
2021/02/25
3K1
M10F支持扩展卡吗_ibb与obb
几乎所有编程接口都可见于:内核源代码的include/uapi/linux/bpf.h文件中
全栈程序员站长
2022/09/30
1.2K0
M10F支持扩展卡吗_ibb与obb
一文入门eBPF
bpf全称伯克利包过滤器(Berkeley Packet Filte),bpf技术诞生于1992年,早期主要用来提升对数据包的过滤性能,但是早期的bpf提供的指令较少,限制了它的应用范围。本文要介绍的ebpf是bpf的扩展版本,相比早期版本的bpf功能变得更加强大,自2014年引入内核以来,BPF现在已经成发展成内核中一个通用的引擎,通过相关API我们可以方便的读取到内核态的内存内容,也能够通过BPF改写运行时内存,具有强大的编程能力。毫不夸张的说,BPF技术就是内核中的脚本语言。
XZAN
2021/08/28
2.2K0
一文入门eBPF
eBPF 开发实践:使用 eBPF 隐藏进程或文件信息
eBPF(扩展的伯克利数据包过滤器)是 Linux 内核中的一个强大功能,可以在无需更改内核源代码或重启内核的情况下,运行、加载和更新用户定义的代码。这种功能让 eBPF 在网络和系统性能分析、数据包过滤、安全策略等方面有了广泛的应用。
云微
2023/08/14
7100
BCC(可观测性)
BCC是一个用于跟踪内核和操作程序的工具集,其软件包中包含了一些有用的工具和例子,它扩展了BPF(Berkeley Packet Filters),通常被称为eBPF , 在Linux3.15中首次引入,但大多数BCC的功能需要Libux4.1及以上版本。
charlieroro
2020/07/09
3.4K0
【译】如何在生产环境跟踪 GO 函数的参数
原文地址:https://blog.px.dev/ebpf-function-tracing/
黑光技术
2023/02/15
1K0
【译】如何在生产环境跟踪 GO 函数的参数
BPF的可移植性和CO-RE (Compile Once – Run Everywhere)
在上一篇文章中介绍了提高socket性能的几个socket选项,其中给出了几个源于内核源码树中的例子,如果选择使用内核树中的Makefile进行编译的话,可能会出现与本地头文件冲突的情况,如重复定义变量,结构体类型不对等错误。这些问题大大影响了BPF程序的可移植性。
charlieroro
2021/01/04
1.4K0
【eBPF笔记前篇】介绍、开发环境搭建、原理简介、case
之前一个老板说“xxx组的同学是一定要把eBPF用到得心应手”,因为之前是做性能压测相关工作,个人感觉压测其实并不复杂,复杂的是压测后的问题定位,而eBPF则是定位问题的有效工具,我们可以透过eBPF去洞悉内核的运行状态,帮助我们去做故障诊断、网络优化、性能监控、以及安全控制等生产环境中的各种问题。
历久尝新
2022/02/11
5.8K0
【eBPF笔记前篇】介绍、开发环境搭建、原理简介、case
使用 eBPF 在生产环境调试 Go 应用
本文是描述我们如何在生产中使用 eBPF 调试应用程序的系列文章中的第一篇,无需重新编译/重新部署,这篇文章介绍了如何使用 gobpf[1] 和uprobes 为 Go 应用程序建立一个函数参数跟踪器,这种技术也可以扩展到其他编译语言,如 C++、Rust 等。
我是阳明
2020/11/03
1.9K0
使用 eBPF 在生产环境调试 Go 应用
利用动态 tracing 技术来 trace 内核中的网络请求
这周帮朋友用 eBPF/SystemTap 这样的动态 tracing 工具做了一些很有趣的功能。这篇文章算是一个总结
青南
2021/06/23
2K0
利用动态 tracing 技术来 trace 内核中的网络请求
【eBPF笔记中篇】运行原理、交互、event触发 解析(未完)
从之前的分析已经得知,.c的eBPF程序会通过BCC等工具编译并加载到内核中,但是具体在内核中,ebpf是如何工作的呢?
历久尝新
2022/02/15
3.6K0
【eBPF笔记中篇】运行原理、交互、event触发 解析(未完)
动态追踪技术(四):基于 Linux bcc/BPF 实现 Go 程序动态追踪
在这篇文章中,我将迅速调研一种跟踪的 Go 程序的新方法:基于 Linux 4.x eBPF 实现动态跟踪。如果你去搜索 Go 和 BPF,你会发现使用 BPF 接口的 Go 语言接口(例如,gobpf)。这不是我所探索的东西:我将使用 BPF 工具实现 Go 应用程序的性能分析和调试。
RiboseYim
2018/01/20
3.1K0
Linux探测工具BCC(网络)
首先看下促使我学习bcc的这篇文章中的程序traceicmpsoftirq.py,使用该程序的本意是找出对ping响应的进程位于哪个CPU core上,然后使用perf扫描该core,找出造成网络延迟的原因。源码如下:
charlieroro
2020/07/13
2.7K0
eBPF入门实践教程十四:记录 TCP 连接状态与 TCP RTT
eBPF (扩展的伯克利数据包过滤器) 是一项强大的网络和性能分析工具,被广泛应用在 Linux 内核上。eBPF 使得开发者能够动态地加载、更新和运行用户定义的代码,而无需重启内核或更改内核源代码。
云微
2023/08/14
8560
linux-沙盒入门,ptrace从0到1
本文是在linux系统角度下,对ptrace反调试进行底层分析,使我们更清楚的看到一些底层原理的实现,更好的理解在逆向工程中的一些突破口,病毒怎么实现代码注入,本文还将列出一些常见的攻防手段,分析其原理,让我们一同见证见证茅与盾激情对决!内容很充实,建议躺着阅读!!!!!!!!
Gamma实验室
2021/03/10
4.5K1
linux-沙盒入门,ptrace从0到1
eBPF学习 – 入门
BPF是Berkeley Packet Filter(伯克利数据包过滤器)得缩写,诞生于1992年,其作用是提升网络包过滤工具得性能,并于2014年正式并入Linux内核主线。 BPF提供一种在各种内核事件和应用程序事件发生时允许运行一小段程序的机制,使得内核完全可编程,允许用户定制和控制他们的系统以解决相应的问题。 BPF是一项灵活而高效的技术,由指令集、存储对象和辅助函数等几部分组成。其采用了虚拟指令集规范,运行时BPF模块提供两个执行机制:解释器和即时编译器(JIT)。在实际执行前,BPF指令必须通过验证器(verifer)的安全性检查以确保BPF程序自身不会崩溃或者损坏内核。 扩展后的BPF通常缩写为eBPF,但是官方的说法仍然是BPF,并且内核中也只有一个执行引擎即BPF(扩展后的BPF)。
全栈程序员站长
2022/11/08
1.2K0
eBPF学习 – 入门
Linux 内核监控在 Android 攻防中的应用
在日常分析外部软件时,遇到的反调试/反注入防护已经越来越多,之前使用的基于 frida 的轻量级沙盒已经无法满足这类攻防水位的需要,因此需要有一种更加深入且通用的方式来对 APP 进行全面的监测和绕过。本文即为对这类方案的一些探索和实践。
evilpan
2023/02/12
3.4K0
Linux 内核监控在 Android 攻防中的应用
[译] 第 1 部分: 在生产环境中使用 eBPF 调试 Go 程序
这是本系列文章的第一篇, 讲述了我们如何在生产环境中使用 eBPF 调试应用程序而无需重新编译/重新部署. 这篇文章介绍了如何使用 gobpf 和 uprobe 来为 Go 程序构建函数参数跟踪程序. 这项技术也可以扩展应用于其他编译型语言, 例如 C++, Rust 等. 本系列的后续文章将讨论如何使用 eBPF 来跟踪 HTTP/gRPC/SSL 等.
ritchiechen
2021/01/12
1.4K0
测试用 - 4.使用eBPF逃逸容器技术分析与实践
容器安全是一个庞大且牵涉极广的话题,而容器的安全隔离往往是一套纵深防御的体系,牵扯到 AppArmor、Namespace、Capabilities、Cgroup、Seccomp 等多项内核技术和特性,但安全却是一处薄弱则全盘皆输的局面,一个新的内核特性可能就会让看似无懈可击的防线存在突破口。随着云原生技术的快速发展,越来越多的容器运行时组件在新版本中会默认配置 AppArmor 策略,原本我们在《红蓝对抗中的云原生漏洞挖掘及利用实录》介绍的多种容器逃逸手法会逐渐失效;因此我们希望能碰撞出一些攻击手法,进而突破新版本容器环境的安全能力,并使用更契合容器集群的新方式把 “任意文件写” 转化为“远程代码执行”,从而提前布防新战场。
用户3830325
2022/12/20
8120
如何使用 BPF 监控 Linux 内存情况:Linux 内存调优之 BPF 内存监控分析
动态跟踪点: kprobes 和 uprobes,类似于内核态和用户态的方法埋点,比较灵活,可以任意监控
山河已无恙
2025/07/08
1520
如何使用 BPF 监控 Linux 内存情况:Linux 内存调优之 BPF 内存监控分析
推荐阅读
相关推荐
使用 BPF 进行 HTTPS 抓包 —— 以 Golang 和 cURL 为例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验