如何查询的NoSQL与memcached的加入到MySQL在Ubuntu 14.04

介绍

使用Memcached和使用MySQL的独立服务器执行的总体思路已在许多细小物品,如一个被描述如何安装和使用内存缓存在Ubuntu 14.04 但是,memcached作为独立服务器在MySQL客户端访问层之前充当中介,仅在内存中管理信息,而没有永久存储它的选项。 这使得它适合于诸如缓存MySQL重复查询的结果的任务。 这可以节省资源并优化繁忙站点的性能。

然而,在这篇文章中,我们将讨论一些不同的东西。 Memcached将作为MySQL插件安装并紧密集成到MySQL中。 它将提供一个NoSQL风格的访问层,用于在常规MySQL InnoDB表中直接管理信息。 这有很多好处,我们将在后面的文章中看到。

基本理解

为了能够遵循这篇文章,你将需要一些基本的了解NoSQL和memcached是什么。 简单地说,NoSQL以键值项的形式处理信息。 这明显比标准SQL更简单的方法表明更好的性能和可扩展性,这是特别需要处理大量的信息(大数据)。

但是,NoSQL的良好性能不足以取代通常的SQL。 NoSQL的简单性使其不适用于具有复杂关系的结构化数据。 因此,NoSQL不是SQL的替代,而是对它的一个重要的补充。

至于memcached,它可以被认为是NoSQL的流行实现。 它的速度非常快,拥有优秀的缓存机制。 这就是为什么它为把NoSQL风格带入传统的MySQL提供了一个很好的选择。

还需要对memcached协议的一些理解。 Memcached适用于具有以下部分的项目:

  • -字母数字值,这将是访问项目的价值的关键。
  • -任意数据,其中必不可少的有效载荷被保留。
  • 一个标志 -通常用于建立相关的主要价值附加参数的值。 例如,它可以是是否使用压缩的标志。
  • 到期时间 -以秒为到期时间。 回忆起memcached最初设计时考虑到缓存。
  • CAS价值 -每个项目的唯一标识符。

先决条件

本指南已在Ubuntu 14.04上测试。 所描述的安装和配置在其他OS或OS版本上类似,但配置文件的命令和位置可能不同。

您将需要以下:

  • Ubuntu 14.04全新安装
  • 具有sudo权限的非root用户

本教程中的所有命令都应以非root用户身份运行。 如果需要该命令的root访问权限,它会在前面加sudo 如果你不已经有设置,请按照本教程: 使用Ubuntu 14.04初始服务器设置

第1步 - 安装MySQL 5.6

MySQL中的memcached插件在5.6.6以上版本的MySQL中可用。 这意味着您不能使用标准Ubuntu 14.04存储库中的MySQL包(版本5.5)。 相反,你必须:

  1. 添加MySQL官方存储库
  2. 从中安装MySQL服务器,客户端和库

首先,进入MySQL的APT仓库页面并下载,这将MySQL的存储库添加到你的Ubuntu 14.04系统的软件包。 您可以直接在您的Droplet上下载软件包:

wget https://dev.mysql.com/get/mysql-apt-config_0.3.5-1ubuntu14.04_all.deb

接着,安装它dpkg

sudo dpkg -i mysql-apt-config_0.3.5-1ubuntu14.04_all.deb

运行以上命令时,将显示一个文本模式向导,其中包含两个问题:

  • 你想配置哪个MySQL产品? 与答案Server
  • 您希望接收哪个服务器版本? 与答案mysql-5.6

一旦您回答这两个问题,您将返回有关您希望安装哪个产品的第一个问题。 与答Apply ,底部的选择,以确认您的选择并退出向导。

现在你有了新的MySQL库,你必须更新apt缓存,即有关在Ubuntu中安装的可用包的信息。 因此,当您选择安装MySQL时,它将从新存储库检索。 要更新apt缓存,请运行以下命令:

sudo apt-get update

之后,您准备好在Ubuntu 14.04上使用以下命令安装MySQL 5.6:

sudo apt-get install mysql-server

一旦你运行上面的命令,你会被要求选择一个MySQL根(管理员)密码。 为方便起见,您可以在此时选择不设置密码,并在提示时按ENTER键。 但是,一旦你决定把生产这台服务器,我们建议您运行命令sudo mysql_secure_installation以确保您的MySQL安装和配置根密码。

当安装过程完成后,您将安装MySQL服务器5.6及其命令行客户端和必需的库。 您可以通过使用以下命令启动客户端来验证它:

mysql -u root

如果设置了密码,则需要使用以下命令并在出现提示时输入MySQL root密码:

mysql -u root -p

你应该看到:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.25 MySQL Community Server (GPL)
...

尽管仍然在MySQL监控(客户端),创建一个新的数据库称为test

CREATE DATABASE test;

我们以后需要这个数据库进行测试。

要退出MySQL客户端类型:

quit

最后,作为memcached的插件的依赖,你还需要安装开发包的异步事件通知库- libevent-dev 要使此发生运行命令:

sudo apt-get install libevent-dev

第2步 - 在MySQL中安装memcached插件

要为memcached的插件安装准备首先必须要执行的文件中找到的查询/usr/share/mysql/innodb_memcached_config.sql 启动MySQL客户端:

mysql -u root

或者,如果您设置了密码:

mysql -u root -p

并执行:

source /usr/share/mysql/innodb_memcached_config.sql;

这将创建所有数据库插件进行必要的设置innodb_memcache ,也是在我们新创建的数据库插入一些示例数据test

之后,您可以使用以下命令从MySQL终端安装memcached插件:

install plugin daemon_memcached soname "libmemcached.so";

退出MySQL会话:

quit

这将安装这是在目录中找到memcached的插件/usr/lib/mysql/plugin/在Ubuntu 14.04。 此文件仅在MySQL 5.6及更高版本中可用。

安装完成后,您必须配置memcached插件侦听器。 你需要它来连接到memcached插件。 为此,打开文件/etc/mysql/my.cnf你喜欢的编辑器是这样的:

sudo vim /etc/mysql/my.cnf

后某处[mysqld]行添加包含一个新行:

/etc/mysql/my.cnf
daemon_memcached_option="-p11222 -l 127.0.0.1"

以上配置了端口11222上的memcached插件侦听器仅对环回IP 127.0.0.1启用。 这意味着只有来自Droplet的客户端将能够连接。 如果省略有关IP(部分-l 127.0.0.1 ),新的侦听器将是来自世界各地的自由访问,这是一个严重的安全隐患。 如果您还关切memcached的插件的安全请检查其安全性文档

要为memcached插件启动新的侦听器进程,请使用以下命令重新启动MySQL服务器:

sudo service mysql restart

第3步 - 测试memcached插件

要验证安装成功运行从MySQL客户端下面的MySQL命令(启动与客户端mysql -u rootmysql -u root -p ):

show plugins;

如果一切都很好,你应该在输出中看到:

| daemon_memcached           | ACTIVE  | DAEMON             | libmemcached.so | GPL     |

如果没有看到这一点,请确保您使用的MySQL版本5.6或更高版本,并且您已经遵循安装说明。

您还可以尝试从您的Droplet连接到新的memcached插件接口与Telnet像这样:

telnet localhost 11222

成功后,您应该看到输出如:

Connected to localhost.
Escape character is '^]'.

现在你可以运行一个通用的命令,如stats ,进行统计,看看这方面是如何工作的。 要退出提示,请同时按下键盘上的CTRL和]组合。 该类型后quit ,退出Telnet客户端本身。

Telnet为您提供了最简单的方法来连接到memcached插件和MySQL数据本身。 它适合测试,但是当你决定专业使用它时,你应该使用现成的库,用于流行的编程语言,如PHP和Python。

第4步 - 通过memcached插件在MySQL中运行NoSQL查询

如果你回到本文的memcached的插件的安装部分,你会看到我们从执行该文件的语句/usr/share/mysql/innodb_memcached_config.sql 这些语句创建一个新表demo_testtest数据库中。 demo_test表有符合memcached协议以下列:

  • c1实现了重点领域。
  • c2实现了价值领域。
  • c3实现了标志字段。
  • c4实现了CAS领域。
  • c5实现了到期领域。

该表demo_test将是我们将使用来测试之一。 首先,让我们使用以下命令与MySQL客户端打开数据库/表:

mysql -u root test

或者,如果你有一个MySQL密码设置:

mysql -u root test -p

应该已经在一排demo_test表:

SELECT * FROM demo_test;

结果应如下所示:

+-------------+--------------+------+------+------+
| c1          | c2           | c3   | c4   | c5   |
+-------------+--------------+------+------+------+
| AA          | HELLO, HELLO |    8 |    0 |    0 |
+-------------+--------------+------+------+------+
1 rows in set (0.00 sec)

退出MySQL会话:

quit

现在,让我们使用memcached NoSQL接口和telnet创建第二条记录。 再次连接到localhost在TCP端口11222:

telnet localhost 11222

然后使用以下语法:

set [key] [flag] [expiration] [length in bytes]
[value]

注意,该必须在一个新行。 此外,对于每个记录,您必须以上述方式工作时指定值的长度(以字节为单位)。

作为一个例子,让我们创建一个新的项目(数据库的行)与关键newkey ,值0的标志,和值0的到期(永不过期)。 该值的长度为12个字节。

set newkey 0 0 12
NewTestValue

当然,你也可以通过这个NoSQL接口检索值。 这是用做get紧接着是要检索的关键name命令。 仍在Telnet会话中,键入:

get newkey

结果应该是:

VALUE newkey 0 12
NewTestValue

以上setget命令的有效期为每个memcached服务器。 这些只是几个简单的例子,如何插入和检索记录的NoSQL风格。

现在,让我们再次连接到MySQL客户端用命令mysql -u root testmysql -u root test -p并查看内容demo_test表再次运行qyery:

SELECT * FROM demo_test WHERE c1="newkey";

在那里你应该看到这样新创建的行:

+--------+--------------+------+------+------+
| c1     | c2           | c3   | c4   | c5   |
+--------+--------------+------+------+------+
| newkey | NewTestValue |    0 |    1 |    0 |
+--------+--------------+------+------+------+

现在你可能想知道memcached插件如何知道连接到哪个数据库和表,以及如何将信息映射到表列。 答案是在数据库中innodb_memcache和其表containers

执行此select语句:

select * from containers \G

您将看到以下内容:

*************************** 1. row ***************************
                  name: aaa
             db_schema: test
              db_table: demo_test
           key_columns: c1
         value_columns: c2
                 flags: c3
            cas_column: c4
    expire_time_column: c5
unique_idx_name_on_key: PRIMARY
1 row in set (0.00 sec)

要了解更多关于如何创建不同的映射,并找出memcached的插件先进的功能请查看Memcached的插件内部页面

将MySQL与memcached插件集成的好处

以上信息和示例概述了通过memcached插件将MySQL与NoSQL集成的几个重要优点:

  • 所有的数据(MySQL和NoSQL)可以保存在一个地方。 您不必为NoSQL数据安装和维护其他软件。
  • 由于强大的InnoDB存储引擎,NoSQL数据的数据持久性,恢复和复制是可能的。
  • 令人难以置信的快速memcached数据访问层仍然可以使用,以便您可以使用更大量的信息相比,使用较慢的MySQL客户端。
  • NoSQL数据可以使用MySQL接口和语法进行管理。 因此,您可以将NoSQL数据包含在更复杂的SQL查询中,例如左连接。

结论

在本文结束时,您应该熟悉使用MySQL提供的NoSQL数据的新的可能性。 这可能不是替代专用NoSQL服务器(如MongoDB)的通用解决方案,但它肯定有其优点。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏