前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mariadb的一些特性(<=10.4)

mariadb的一些特性(<=10.4)

作者头像
保持热爱奔赴山海
发布2019-09-17 14:36:54
1.2K0
发布2019-09-17 14:36:54
举报
文章被收录于专栏:饮水机管理员饮水机管理员

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

支持到列级别的压缩

代码语言:javascript
复制
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
复制
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
复制
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
复制
通过 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
复制
可以查看历史版本数据,贺春旸老师介绍过

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

MariaDB 10.3支持update多表ORDER BY and LIMIT

代码语言:javascript
复制
自带了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
复制
DDL WAIT and NOWAIT
DDL时候,如果拿不到锁就快速返回失败

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

增加了密码过期策略

代码语言:javascript
复制
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
复制
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
复制
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
复制
压缩是完全透明的。事件在写入二进制日志之前在主服务器上压缩,并且在写入中继日志之前由从服务器上的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
复制
允许限制slave从master读取binlog的速度(腾讯游戏提供code)
在某些情况下,从master读取binlog的速度很快,尤其是在创建新slave的时候,它会给master带来很高的流量。
https://jira.mariadb.org/browse/MDEV-11064
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档