mysql 5.7.12 新增 X plugin 详解
X plugin是mysql新发版本5.7.12中新增的插件,利用它实现mysql作为文件存储数据库,也就是利用mysql 5.7版本json支持的特性完成,安装很简单,需要下载5.7.12版本并且安装mysqlsh工具。
[root@slave-3 src]# vim /etc/yum.repos.d/mysql-community.repo
[mysql-tools-preview]
name=MySQL Tools Preview
baseurl=http://repo.mysql.com/yum/mysql-tools-preview/el/6/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
[root@slave-3 src]# yum install mysql-shell
这样就可以直接安装上mysqlsh工具,官网给的为gpgcheck=1,但是我这安装需要修改为gpgcheck=0才能正常安装,这个各位自行检查吧。
[root@slave-3 src]# mysqlsh -u root -h localhost -p --classic --dba enableXProtocol
执行上面命令之后就为mysql安装好X plugin了,可以到mysql查看是否开启
mysql> show plugins;
| mysqlx | ACTIVE | DAEMON | mysqlx.so | GPL |
有上面显示的plugin就已正常安装,改插件需要启用单独的协议,所以能看到对应的网络监听端口,默认为33060,现在来进行一些测试
[root@slave-3 src]# mysqlsh -u root
Creating an X Session to root@localhost:33060
Enter password:
No default schema selected.
Type '\help', '\h' or '\?' for help. Currently in JavaScript mode. Use \sql to switch to SQL mode and execute queries.
mysql-js> db; mysql-js>
命令和mongodb类似,现在还没schema和collection,用官网的示例文件world_x-db.zip直接导入
mysqlsh -u root --sql --recreate-schema world_x < /usr/local/src/world_x-db/world_x.sql
Enter password: ****Recreating schema world_x...
[root@slave-3 src]# mysqlsh -u root -p world_x
mysql-js> db
<Schema:world_x>
mysql-js> db.collections;
{
"CountryInfo": <Collection:CountryInfo>
}
mysql-js> db.CountryInfo.find().limit(1);
[
{
"GNP": 828,
"IndepYear": null,
"Name": "Aruba",
"_id": "ABW",
"demographics": {
"LifeExpectancy": 78.4000015258789,
"Population": 103000
},
"geography": {
"Continent": "North America",
"Region": "Caribbean",
"SurfaceArea": 193
},
"government": {
"GovernmentForm": "Nonmetropolitan Territory of The Netherlands",
"HeadOfState": "Beatrix"
}
}
]
1 document in set (0.00 sec) mysql-js>
可以看到有点类似于mongodb的操作,现在自己来创建schema和collection进行步骤熟悉
mysql-js> CREATE SCHEMA test_1;
SyntaxError: Unexpected identifier at (shell):1:7
in CREATE SCHEMA test_1;
^^^^^^
SyntaxError: Unexpected identifier
mysql-js> \q
Bye!
[root@slave-3 src]# mysqlsh -u root --recreate-schema test_1
Creating an X Session to root@localhost:33060/test_1
ArgumentError: Recreate schema option can only be used in classic or node sessions
[root@slave-3 src]# mysqlsh -u root --recreate-schema test_1 --sql < aa.sql
Enter password:
Recreating schema test_1...
[root@slave-3 src]# mysqlsh -u root -p test_1
mysql-js> db
<Schema:test_1>
mysql-js> \q
Bye!
[root@slave-3 src]# cat aa.sql
DROP SCHEMA test_1;
CREATE SCHEMA test_1;
上面操作可以看出要创建schema只能利用--sql的方式,事先写入到一个sql文件才能正常创建。假如要进行schema切换使用 db = session.getSchema("test_1"),如下:
mysql-js> db;
<Schema:test_1>
mysql-js> db = session.getSchema("world_x");
<Schema:world_x>
下面再来对collection创建操作进行测试:
mysql-js> db;
<Schema:test_1>
mysql-js> db.collections;
{
"CountryInfo": <Collection:CountryInfo>,
"xz_test": <Collection:xz_test>
}
mysql-js> db.createCollection("a");
<Collection:a>
mysql-js> db.collections;
{
"CountryInfo": <Collection:CountryInfo>,
"a": <Collection:a>,
"xz_test": <Collection:xz_test>
}
mysql-js> session.dropCollection("world_x","a");
Query OK (0.00 sec) mysql-js> db.collections;
{
"CountryInfo": <Collection:CountryInfo>,
"xz_test": <Collection:xz_test>
}
mysql-js>
创建collection和mongodb类似,删除操作有点不同...............对collection的查找、更新、删除和索引添加等操作都有所不同,可以到官网查看有详细的介绍,太长就不写啦。
现在来瞧瞧它是用的什么引擎,原理又是啥.............
[root@slave-3 src]# mysqlsh -u root -p world_x;
Creating an X Session to root@localhost:33060/world_x
Enter password:
mysql-js> db.collections;
{
"CountryInfo": <Collection:CountryInfo>,
"xz_test": <Collection:xz_test>
}
mysql-js> db.xz_test.find().limit(1);
[
{
"_id": "1a5501cc7efde511d814000c290c4817",
"age": 123,
"name": "xiaozhong"
}
]
1 document in set (0.00 sec)
mysql-js>db.xz_test.createIndex("age").field("age", "INTEGER", false).execute();
Query OK (0.01 sec)
mysql-js>
我这先给我自己创建的测试collection的age字段创建了一个索引,现在直接用mysql连接进去看看结构
[root@slave-3 src]# mysql -uroot
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_1 |
| test_a |
| world_x |
+--------------------+
7 rows in set (0.00 sec) mysql> use world_x;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> show tables;
+-------------------+
| Tables_in_world_x |
+-------------------+
| City |
| Country |
| CountryInfo |
| CountryLanguage |
| xz_test |
+-------------------+
5 rows in set (0.00 sec)
mysql> show create table xz_test\G;
*************************** 1. row ***************************
Table: xz_test
Create Table: CREATE TABLE `xz_test` (
`doc` json DEFAULT NULL,
`_id` varchar(32) GENERATED ALWAYS AS (json_unquote(json_extract(`doc`,'$._id'))) STORED NOT NULL,
`$ix_i_F177B50B40803DD7D3962E25071AC5CAA3D1139C` int(11) GENERATED ALWAYS AS (json_extract(`doc`,'$.age')) VIRTUAL,
UNIQUE KEY `_id` (`_id`),
KEY `age` (`$ix_i_F177B50B40803DD7D3962E25071AC5CAA3D1139C`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec)
由上面的操作可以看出刚才创建的schema和collection都能看到,我刚才创建的age列索引是利用了5.7新特性虚拟列,为_id创建了一个唯一约束并存储到磁盘,利用的innodb引擎,这就可以让collection支持事物行锁等innodb引擎的特性。
总结上面的操作对X plugin特性可以得出:
1、X plugin利用独有的协议可以模拟类似mongodb操作
2、创建schema略显坑
3、全程需要注意大小写
4、可以利用innodb引擎所有特性
5、索引利用虚拟列完成
6、_id字段利用uuid函数生成的数据,去掉了中间连接符"-",所以在上面加了个unique约束
效率未曾测试,如果有兴趣可以自己测试,官网也有对文档存储的详细介绍,可以自行进行查找。
本文出自 “D调de默默” 博客,请务必保留此出处http://xiaozhong991.blog.51cto.com/2354914/1763792
mysql 5.7.12 新增 X plugin 详解的更多相关文章
- mysql 5.7.12 新增 X plugin x 协议 详解
mysql 5.7.12 新增 X plugin x 协议 详解http://xiaozhong991.blog.51cto.com/2354914/1763792 x 协议 操作nosql数据库 ...
- MySQL慢查询(二) - pt-query-digest详解慢查询日志 pt-query-digest 慢日志分析
随笔 - 66 文章 - 0 评论 - 19 MySQL慢查询(二) - pt-query-digest详解慢查询日志 一.简介 pt-query-digest是用于分析mysql慢查询的一个工具,它 ...
- Mysql高手系列 - 第9篇:详解分组查询,mysql分组有大坑!
这是Mysql系列第9篇. 环境:mysql5.7.25,cmd命令中进行演示. 本篇内容 分组查询语法 聚合函数 单字段分组 多字段分组 分组前筛选数据 分组后筛选数据 where和having的区 ...
- Mysql高手系列 - 第14篇:详解事务
这是Mysql系列第14篇. 环境:mysql5.7.25,cmd命令中进行演示. 开发过程中,会经常用到数据库事务,所以本章非常重要. 本篇内容 什么是事务,它有什么用? 事务的几个特性 事务常见操 ...
- MySQL 8.0.20 安装教程图文详解(windows 64位)
MySQL 8.0.20 安装教程图文详解(windows 64位) 更新时间:2020年05月09日 15:09:04 转载 作者:瘦肉粥不加糖 这篇文章主要介绍了MySQL 8.0. ...
- MYSQL服务器my.cnf配置文档详解
MYSQL服务器my.cnf配置文档详解 硬件:内存16G [client] port = 3306 socket = /data/3306/mysql.sock [mysql] no-auto-re ...
- mysql服务性能优化—my.cnf配置说明详解
MYSQL服务器my.cnf配置文档详解硬件:内存16G [client]port = 3306socket = /data/3306/mysql.sock [mysql]no-auto-rehash ...
- ambari-server启动出现ERROR main] DBAccessorImpl:106 - Error while creating database accessor java.lang.ClassNotFoundException:com.mysql.jdbc.Driver问题解决办法(图文详解)
不多说,直接上干货! 问题详情 ambari-server启动时,报如下的错误 问题分析 注:启动ambari访问前,请确保mysql驱动已经放置在/usr/share/Java内且名字是mysql- ...
- Mysql高手系列 - 第8篇:详解排序和分页(order by & limit),及存在的坑
这是Mysql系列第8篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符号分开的表示可选其一. 本章内容 详解排序查询 详解limit limit存在的坑 分 ...
随机推荐
- 【Python】python读取文件操作mysql
尾大不掉,前阵子做检索测试时,总是因为需要业务端操作db和一些其他服务,这就使得检索测试对环境和数据依赖性特别高,极大提高了测试成本. Mock服务和mysql可以很好的解决这个问题,所以那阵子做了两 ...
- Alibaba
题意: 有n个东西在一条路上,已知他们的位置,和能获得他们的最后期限,求能获得n个东西的最小总时间. 分析: 想到了求”未来费用问题", dp[i][j][k]表示获得区间长i起点为j的所有 ...
- 在word中显示漂亮的代码
在word中粘贴或写代码时,通常得不到想要的格式,可用‘Notepad++’工具实现. 步骤: (1)安装Notepad++软件,把代码粘贴进去,选择菜单栏中的语言,然后选择相应代码语言,如P-> ...
- new trip
离开YY已经快一周了,特别感谢以前的老大姚冬和朱云峰,从他俩身上学到了很多.这个决定也经过了很长的纠结,不想再做个犹豫不决的人,所以最后还是坚定了最初的信念,也算是对半年前自己的一个完好交代,以防将来 ...
- 利用HTML 5中的Menu和Menuitem元素快速创建菜单
原文:Introducing the HTML5 “Menu” and “Menuitem” Elements 译文:HTML 5中Menu和Menuitem的元素介绍 译者:dwqs 今天向你介绍H ...
- 分析特定类的python脚本
今天接触了下pyUSB,事先没看对象内部成员资料,直接用python的dir函数看了看pyUSB的内部构成.突然间想到自己可不可以写个简单的脚本,利用dir或其他函数遍历某个对象内部的所有成员,并打印 ...
- 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point
// 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point // 思路:直接暴力绝对T // 先确定x范围,每个x范围内,离圆心最远的点一定是y轴两端的点.枚举x的范围,再 ...
- 【Hadoop学习】HDFS 短路本地读
Hadoop版本:2.6.0 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4146296.html 背景 ...
- hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档
相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...
- 《Java数据结构与算法》笔记-CH4-3用栈实现分隔符匹配
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * 利 ...