mysql 5.7.12 新增 X plugin  x 协议 详解
http://xiaozhong991.blog.51cto.com/2354914/1763792

x 协议  操作nosql数据库

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约束

mysql 5.7.12 新增 X plugin x 协议 详解的更多相关文章

  1. mysql 5.7.12 新增 X plugin 详解

     https://dev.mysql.com/doc/refman/5.7/en/document-store.html   原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息 ...

  2. 关于laravel5.4.12新增集合操作when方法详解

    从v5.4.12开始,Laravel Collections现在包括一个when方法,允许您对项目执行条件操作,而不会中断链. 像所有其他Laravel 集合方法,这一个可以有很多用例,选择其中一个例 ...

  3. 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别

    高效开发之SASS篇   作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...

  4. MySQL对数据库数据进行复制的基本过程详解

    MySQL对数据库数据进行复制的基本过程详解 这篇文章主要介绍了MySQL对数据库数据进行复制的基本过程,解读了Slave的一些相关配置,需要的朋友可以参考下 复制 复制是从一个MySQL服务器(ma ...

  5. MySQL 5.7.12新增MySQL Shell命令行功能

      在最新发布的MySQL 5.7.12中有许多令人兴奋的新功能,对于MySQL开发者来说,最令人兴奋的莫不是新增的MySQL Shell了,其下载地址: http://dev.mysql.com/d ...

  6. 【docker-compose】使用docker-compose部署运行spring boot+mysql 【处理容器的时区问题】【详解】【福利:使用docker-compose构建 wordpress+mysql】

    ==================================================================================================== ...

  7. Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

  8. [转]Mysql导入导出工具Mysqldump和Source命令用法详解

    Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式( ...

  9. mysql主从复制搭建中几种log和pos详解

    一.主从原理 Replication 线程   Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql in ...

随机推荐

  1. Javascript 检测键盘按键

    Javascript中 有3个事件句柄在对应键盘的输入状态:keydown.keypress和keyup. 分别对应的意思是:按键被按下(按下按键但还没有抬起).点击按键(按下并抬起按键).按键抬起( ...

  2. Win10系统中VirtualBox桥接时找不到网卡的问题

    1.主机中 点网络连接 ,点 本地网络,右键属性 2.安装 服务 磁盘安装 选择 VirtualBox 安装目录, 找到 目录文件 D:\Users\Oracle\VirtualBox\drivers ...

  3. Mac 上 Charles 抓取 iso http、https数据包

    一.下载charles包. http://www.charlesproxy.com/download/ 选择mac版本的最新包Charles is 3.11.4. http://www.charles ...

  4. WEB技术路线图

  5. rar压缩find查找到的文件

    find . -name 'CMakeLists.txt' | xargs /d/Program\ Files/WinRAR/rar.exe a -r ./out.rar $ ------------ ...

  6. gearman(异步计算)学习

    Gearman是什么? 它是分布式的程序调用框架,可完成跨语言的相互调 用,适合在后台运行工作任务.最初是2005年perl版本,2008年发布C/C++版本.目前大部分源码都是(Gearmand服务 ...

  7. 跟bWAPP学WEB安全(PHP代码)--终结篇:文件目录遍历、文件上传、SSRF、CSRF、XXE、文件包含

    前言 过年过的很不顺,家里领导和我本人接连生病,年前腊月29才都治好出院,大年初六家里的拉布拉多爱犬又因为细小医治无效离开了,没能过年回家,花了好多钱,狗狗还离世了.所以也就没什么心思更新博客.今天初 ...

  8. 用开源项目ActivityOptionsICS让ActivityOptions的动画实现兼容

    我之前写过一篇文章是讲解ActivityOption的api方法的(http://www.cnblogs.com/tianzhijiexian/p/4087917.html),当时吐槽各种动画不兼容, ...

  9. MFC从资源加载文本

    bool CWizardSheet::GetTextResource(UINT uID, CString& csContent) { HMODULE hModule=GetModuleHand ...

  10. 使用Kdenlive为视频加入马赛克特效

    Kdenlive(KDE Non-Linear Video Editor)是一种基于MLT框架.KDE和Qt的自由开源的非线性影片编辑器.其底层包含了FFmpeg,所以可以支持FFmpeg中的所有视频 ...