首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上使用memcached将NoSQL查询添加到MySQL

如何在Ubuntu 14.04上使用memcached将NoSQL查询添加到MySQL

原创
作者头像
黑色技术
修改2018-09-19 17:37:02
1.8K0
修改2018-09-19 17:37:02
举报

介绍

在许多优秀的文章中已经描述了使用memcached及其独立服务器实现与MySQL的一般概念,但是,作为独立服务器的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

第1步 - 安装MySQL 5.6

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

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

您可以直接在腾讯云CVM上下载该软件包。建议您直接使用云关系型数据库,云关系型数据库让您在云中轻松部署、管理和扩展的关系型数据库,提供安全可靠、伸缩灵活的按需云数据库服务。腾讯云关系型数据库提供 MySQL、SQL Server、MariaDB、PostgreSQL 数据库引擎,并针对数据库引擎的性能进行了优化。云关系型数据库是一种高度可用的托管服务,提供容灾、备份、恢复、监控、迁移等数据库运维全套解决方案,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。

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 repo,你将不得不更新apt缓存,即有关在Ubuntu中安装的可用包的信息。因此,当您选择安装MySQL时,它将从新存储库中检索。要更新apt缓存,请运行以下命令:

sudo apt-get update

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

sudo apt-get install mysql-server

运行上述命令后,系统会要求您选择MySQL root(管理员)密码。为方便起见,您可以选择此时不设置密码,在提示时只需按ENTER键。但是,一旦您决定将此服务器投入生产,建议您运行该命令sudo mysql_secure_installation以保护MySQL安装并配置root密码。

安装过程完成后,您将安装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插件,该插件位于Ubuntu 14.04 的目录/usr/lib/mysql/plugin/中。此文件仅在MySQL 5.6及更高版本中可用。

安装完成后,您必须配置memcached插件侦听器。您将需要它来连接到memcached插件。为此,请使用您喜欢的编辑器打开文件/etc/mysql/my.cnf,如下所示:

sudo vim /etc/mysql/my.cnf

[mysqld]行之后的某处添加一个包含以下内容的新行:

daemon_memcached_option="-p11222 -l 127.0.0.1"

以上配置仅在端回IP 127.0.0.1上启用的端口11222上的memcached插件侦听器。这意味着只有腾讯云CVM的客户端才能连接。如果省略关于IP(-l 127.0.0.1)的部分,则可以从任何地方免费访问新的侦听器,这是一个严重的安全风险。

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

sudo service mysql restart

第3步 - 测试memcached插件

要验证安装是否成功,请从MySQL客户端运行以下MySQL命令(使用mysql -u root或启动客户端mysql -u root -p):

show plugins;

如果一切正常,你会在输出中看到:

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

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

您还可以尝试使用腾讯云CVM中的Telnet连接到新的memcached插件接口,如下所示:

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中执行了语句。这些语句在test数据库中创建了一个新表demo_test。该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创建第二条记录。再次连接到TCP端口11222上的localhost:

telnet localhost 11222

然后使用以下语法:

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

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

例如,让我们创建一个新项(数据库行),其中包含关键字段 newkey,标志值0和到期字段值(永不过期)。该值的长度为12个字节。

set newkey 0 0 12
NewTestValue

当然,您也可以通过此NoSQL界面检索值。这是通过get命令完成的,该命令后跟要检索的键的名称。仍在Telnet会话中,键入:

get newkey

结果应该是:

VALUE newkey 0 12
NewTestValue

以上setget命令的有效期为每个memcached服务器。这些只是一些简单的示例,说明如何以NoSQL样式插入和检索记录。

现在让我们使用命令mysql -u root test或者mysql -u root test -p再次连接到MySQL客户端,然后通过运行qyery再次查看demo_test表的内容:

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)

将MySQL与memcached插件集成的好处

以上信息和示例概述了通过memcached插件将MySQL与NoSQL集成的一些重要好处:

  • 您的所有数据(MySQL和NoSQL)都可以保存在一个地方。您无需为NoSQL数据安装和维护其他软件。
  • 借助强大的InnoDB存储引擎,可以实现NoSQL数据的数据持久性,恢复和复制。
  • 仍然可以使用非常快速的memcached数据访问层,这样与使用较慢的MySQL客户端相比,您可以使用更多的信息。
  • 可以使用MySQL接口和语法管理NoSQL数据。因此,您可以在更复杂的SQL查询(如左连接)中包含NoSQL数据。

结论

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

想要了解更多关于memcashed插件的相关教程,请前往腾讯云+社区学习更多知识。

参考文献:《How To Add NoSQL Queries to MySQL with memcached on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 基本理解
  • 先决条件
  • 第1步 - 安装MySQL 5.6
  • 第2步 - 在MySQL中安装memcached插件
  • 第3步 - 测试memcached插件
  • 第4步 - 通过memcached插件在MySQL中运行NoSQL查询
  • 将MySQL与memcached插件集成的好处
  • 结论
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档