MySQL集群核心概念_MySQL
Mysql集群
NDBCLUSTER
(also known asNDB
) is an in-memory storage engine offering high-availability and data-persistence features.
NDBCLUSTER(也叫做NDB)是一种提供了高可用性和数据持久性特征的内存式存储引擎。
TheNDBCLUSTER
storage engine can be configured with a range of failover and load-balancing options, but it is easiest to start with the storage engine at the cluster level. MySQL Cluster'sNDB
storage engine contains a complete set of data, dependent only on other data within the cluster itself.
NDBCLUSTER存储引擎能够配置一系列的故障切换和负载均衡功能,然而它也是在集群级别下最容易入手的存储引擎。MySQL集群的NDB存储引擎包含一套完整的数据集,它仅依赖于在集群本身中的其他数据。
The“Cluster”portion of MySQL Cluster is configured independently of the MySQL servers. In a MySQL Cluster, each part of the cluster is considered to be anode.
MySQL集群的Cluster部分是独立配置在MySQL服务上面的。在MySQL集群中,集群的每个部分都被看做是一个节点(node)。
NoteIn many contexts, the term“node”is used to indicate a computer, but when discussing MySQL Cluster it means aprocess. It is possible to run multiple nodes on a single computer; for a computer on which one or more cluster nodes are being run we use the termcluster host.
注解:
在多数情况下,node这个术语用于表示一台计算机,但是当讨论MySQL集群时,则它意味着是一个进程。在一台单独的PC机上能够运行多个node节点;在PC机上正在运行的一个或多个集群节点,我们通常把他称为集群主机(cluster host)。
There are three types of cluster nodes, and in a minimal MySQL Cluster configuration, there will be at least three nodes, one of each of these types:
集群的节点有三种类型,在最低限度的MySQL集群配置中,每一种类型的节点要有一个,至少要有三个节点:
Management node: The role of this type of node is to manage the other nodes within the MySQL Cluster, performing such functions as providing configuration data, starting and stopping nodes, running backup, and so forth. Because this node type manages the configuration of the other nodes, a node of this type should be started first, before any other node. An MGM node is started with the commandndb_mgmd.
管理节点(Management node):这种节点的任务主要是在MySQL集群中管理其他节点。执行诸如提供配置数据,打开节点,关闭节点,运行备份等等相应功能。由于这种类型的节点管理着其他节点的配置,因此该节点应先于其他节点启动。一个MGM节点是通过ndb_mgmd命令来启动的。
-
Data node: This type of node stores cluster data. There are as many data nodes as there are replicas, times the number of fragments (seeSection 18.1.2, “MySQL Cluster Nodes, Node Groups, Replicas, and Partitions”). For example, with two replicas, each having two fragments, you need four data nodes. One replica is sufficient for data storage, but provides no redundancy; therefore, it is recommended to have 2 (or more) replicas to provide redundancy, and thus high availability. A data node is started with the commandndbd(seeSection 18.4.1, “ndbd— The MySQL Cluster Data Node Daemon”) orndbmtd(seeSection 18.4.3, “ndbmtd— The MySQL Cluster Data Node Daemon (Multi-Threaded)”).
MySQL Cluster tables are normally stored completely in memory rather than on disk (this is why we refer to MySQL Cluster as anin-memorydatabase). However, some MySQL Cluster data can be stored on disk; seeSection 18.5.12, “MySQL Cluster Disk Data Tables”, for more information.
数据节点(Data node):这种类型的节点用于存储集群数据。很多的数据节点都有它们的副本,是该分段的一倍。例如,每两个分段就有两个副本,你就需要有四个数据节点。对于数据存储,一个副本是足够的,但是它不提供冗余。因此,我们推荐用两个(或更多)副本去提供冗余,从而实现高可用性。一个数据节点是通过ndbd或ndbmtd命令来启动的。
MySQL集群表通常是完整的存储在内存中的,而不是在硬盘上(这就是为什么我们把MySQL集群称为内存式数据库)。然而,有一些MySQL集群数据是可以存储在硬盘上的。
-
SQL node: This is a node that accesses the cluster data. In the case of MySQL Cluster, an SQL node is a traditional MySQL server that uses the
NDBCLUSTER
storage engine. An SQL node is amysqldprocess started with the--ndbcluster
and--ndb-connectstring
options, which are explained elsewhere in this chapter, possibly with additional MySQL server options as well.An SQL node is actually just a specialized type ofAPI node, which designates any application which accesses MySQL Cluster data. Another example of an API node is thendb_restoreutility that is used to restore a cluster backup. It is possible to write such applications using the NDB API. For basic information about the NDB API, seeGetting Started with the NDB API.
SQL节点(SQL node):这种节点是用于访问集群数据的。对于MySQL集群来讲,一个SQL节点是一个传统的MySQL服务,它使用NDBCLUSTER存储引擎。一个SQL节点是通过mysqld命令的--ndbcluster和--ndb-connectstring参数来启动的进程,该选项在本章的其他地方会解释到,用其他的MySQL服务选项也可以做到。
一个SQL节点实际上只是API node的一种专用类型,该类型的节点指定了任何可以访问MySQL集群数据的应用程序。API node的另外一个例子是node_restore功能,它能够被用来恢复一个集群备份。用NDB API去写应用程序是有可能做到的,有关于NDB API的基本信息,请见Getting Started with the NDB API.
ImportantIt is not realistic to expect to employ a three-node setup in a production environment. Such a configuration provides no redundancy; to benefit from MySQL Cluster's high-availability features, you must use multiple data and SQL nodes. The use of multiple management nodes is also highly recommended.
重要性:
在生产环境中使用三个节点去进行设置是不现实的。诸如提供一个没有冗余的配置;想要发挥MySQL集群高可用性的优点,你必须使用多数据和多SQL节点。多管理节点的使用同样也被强烈推荐。
For a brief introduction to the relationships between nodes, node groups, replicas, and partitions in MySQL Cluster, seeSection 18.1.2, “MySQL Cluster Nodes, Node Groups, Replicas, and Partitions”.
关于在MySQL集群中的节点,节点组,副本以及分区之间的关系的简单介绍,请见Section 18.1.2,“MySQL Cluster Nodes, Node Groups, Replicas, and Partitions”.
Configuration of a cluster involves configuring each individual node in the cluster and setting up individual communication links between nodes. MySQL Cluster is currently designed with the intention that data nodes are homogeneous in terms of processor power, memory space, and bandwidth. In addition, to provide a single point of configuration, all configuration data for the cluster as a whole is located in one configuration file.
在集群中,集群的配置包括配置每一个单独的节点,并且在节点之间需要设置单独的通讯链接。MySQL集群当前的设计意图是依据处理器功率,内存空间以及带宽来将数据节点均匀分布的。此外,对于提供配置的一个单一节点,在集群中所有的配置数据都是作为一个整体存在于一个配置文件上的。
The management server manages the cluster configuration file and the cluster log. Each node in the cluster retrieves the configuration data from the management server, and so requires a way to determine where the management server resides. When interesting events occur in the data nodes, the nodes transfer information about these events to the management server, which then writes the information to the cluster log.
服务管理器管理着集群的配置文件和日志。在集群中的每一个节点都会从服务管理器中去检索配置数据,因此需要通过一种方法来确定服务管理器所在的位置。当我们把注意力关注在数据节点上发生的事件时,对于服务管理器来讲,数据节点将传输关于这些事件的信息,然后把该信息写到集群日志里面。
In addition, there can be any number of cluster client processes or applications. These include standard MySQL clients,NDB
-specific API programs, and management clients. These are described in the next few paragraphs.
此外,还有很多集群客户端进程或应用程序。他们包含了标准的MySQL客户端,NDB-特定的API程序,和管理客户端。这些将在接下来的段落中进行介绍。
Standard MySQL clients. MySQL Cluster can be used with existing MySQL applications written in PHP, Perl, C, C++, Java, Python, Ruby, and so on. Such client applications send SQL statements to and receive responses from MySQL servers acting as MySQL Cluster SQL nodes in much the same way that they interact with standalone MySQL servers.
标准的MySQL客户端:MySQL集群能够和已存在的用PHP,Perl,C,C++,Java,Python,Ruby等语言实现的MySQL应用程序一起使用。诸如客户端发送SQL语句并从以MySQL集群节点为代理的MySQL服务器上去接受响应,该节点以同样的方式去和MySQL服务器独立的进行交互。
MySQL clients using a MySQL Cluster as a data source can be modified to take advantage of the ability to connect with multiple MySQL servers to achieve load balancing and failover. For example, Java clients using Connector/J 5.0.6 and later can usejdbc:mysql:loadbalance://
URLs (improved in Connector/J 5.1.7) to achieve load balancing transparently; for more information about using Connector/J with MySQL Cluster, seeUsing Connector/J with MySQL Cluster.
MySQL客户端将MySQL集群作为一个数据源,利用它能够被修改的能力来和多个MySQL服务器去实现负载均衡和故障转移。例如,Java客户端利用Connector/J 5.0.6和以后使用jdbc:mysql:loadbalance:// URLs(在Connector/J 5.1.7中有所提高)能够显而易见的去实现负载均衡;有关和MySQL集群去使用Connector/J的更多信息,见Using Connector/J with MySQL Cluster.
NDB
client programs. Client programs can be written that access MySQL Cluster data directly from theNDBCLUSTER
storage engine, bypassing any MySQL Servers that may connected to the cluster, using theNDB API, a high-level C++ API. Such applications may be useful for specialized purposes where an SQL interface to the data is not needed. For more information, seeThe NDB API.
NDB客户端程序:客户端程序能够编写为从NDBCLUSTER存储引擎中直接去访问MySQL集群数据,绕过许多能够连接到集群的MySQL服务器,使用NDB API,一个高级别的C++ API。
这样的应用程序,对于数据来讲SQL接口是不需要,通过这种特定的目的,它可能是有用的。想了解更多的信息,见The NDB API.
NDB
-specific Java applications can also be written for MySQL Cluster using theMySQL Cluster Connector for Java. This MySQL Cluster Connector includesClusterJ, a high-level database API similar to object-relational mapping persistence frameworks such as Hibernate and JPA that connect directly toNDBCLUSTER
, and so does not require access to a MySQL Server. Support is also provided in MySQL Cluster NDB 7.1 and later forClusterJPA, an OpenJPA implementation for MySQL Cluster that leverages the strengths of ClusterJ and JDBC; ID lookups and other fast operations are performed using ClusterJ (bypassing the MySQL Server), while more complex queries that can benefit from MySQL's query optimizer are sent through the MySQL Server, using JDBC. SeeJava and MySQL Cluster, andThe ClusterJ API and Data Object Model, for more information.
具有NDB特性的Java应用程序同样也能利用MySQL Cluster Connector forJava编写出MySQL集群。这种MySQL集群连接器包括ClusterJ,一个直接连接NDBCLUSTER的类似于Hibernate和JPA的对象-关系型持久层框架的高级别数据库API,因此它不需要去访问MySQL服务。对于ClusterJPA,在MySQLCluster NDB 7.1和以后的版本中同样支持,OpenJPA利用了ClusterJ和JDBC的优势实现了MySQL的集群。ID查找和其他快速操作是通过ClusterJ来执行的(不通过MySQLServer),而更复杂的查询是受益于MySQL的查询优化器通过MySQL服务用JDBC进行发送操作而得到的好处。见Javaand MySQL Cluster, 和The ClusterJ API and Data Object Model, 以便获得更多的信息。
MySQL Cluster NDB 7.3 also supports applications written in JavaScript using Node.js. The MySQL Connector for JavaScript includes adapters for direct access to theNDB
storage engine and as well as for the MySQL Server. Applications using this Connector are typically event-driven and use a domain object model similar in many ways to that employed by ClusterJ. For more information, seeMySQL NoSQL Connector for JavaScript.
MySQL Cluster NDB 7.3同样支持在应用程序中用Node.js去编写JavaScript。对于JavaScript,MySQL连接器包含可以直接访问NDB存储引擎和MySQL服务的适配器。使用该连接器的应用程序通常是事件驱动的并且利用ClusterJ服务的多种方式去使用类似的域对象模型。想要了解更多的信息,请见MySQL NoSQL Connector for JavaScript.
The Memcache API for MySQL Cluster, implemented as the loadablendbmemcachestorage engine for memcached version 1.6 and later, can be used to provide a persistent MySQL Cluster data store, accessed using the memcache protocol.对于MySQL集群,Memcached 1.6和以后的版本实现了可加载的ndbmemcache存储引擎,它能够被用来提供一个持久的MySQL集群数据存储,并利用memcache协议来进行访问。
The standardmemcachedcaching engine is included in the MySQL Cluster NDB 7.3 distribution. Eachmemcachedserver has direct access to data stored in MySQL Cluster, but is also able to cache data locally and to serve (some) requests from this local cache.标准的memcached缓存引擎是包含在MySQLCluster NDB 7.3分布上的。在MySQL集群中,每个memcached服务都可以直接去访问所存储的数据,但同样能够从本地缓存中去请求本地化的缓存数据和(一些)服务。
For more information, seendbmemcache
—Memcache API for MySQL Cluster.想了解更多信息,请见ndbmemcache
—Memcache API for MySQL Cluster.
管理客户端:这些连接到管理服务器上的客户端提供了开始和停止节点的命令,开始和停止信息跟踪(仅debug版本),显示节点的版本和状态,开始和停止备份等等。举例说明,某种类型的程序在MySQL集群中提供了ndb_mgm管理客户端(见Section 18.4.5,“ndb_mgm— The MySQL ClusterManagement Client”)。该程序能够使用MGM API来进行编写,一个C语言的API能够直接和一个或多个MySQL集群管理服务器进行交互。想了解更多信息,见The MGM API。
Oracle also makes available MySQL Cluster Manager, which provides an advanced command-line interface simplifying many complex MySQL Cluster management tasks, such restarting a MySQL Cluster with a large number of nodes. The MySQL Cluster Manager client also supports commands for getting and setting the values of most node configuration parameters as well asmysqldserver options and variables relating to MySQL Cluster. MySQL Cluster Manager 1.1 provides support for adding data nodes online. See theMySQL Cluster Manager User Manual, for more information.
Oracle同样提供了MySQL集群管理器,它提供一种高级的命令行接口,去简化了复杂的MySQL集群管理任务,如用大量的节点去重新启动一个MySQL集群。MySQL集群管理客户端同样支持命令来设置和获得许多节点配置的参数值和mysqld服务选项以及和MySQL集群有关的变量。MySQL集群管理器1.1版本提供了支持增加在线数据节点。想了解更多信息,见MySQL Cluster Manager User Manual。
Event logs. MySQL Cluster logs events by category (startup, shutdown, errors, checkpoints, and so on), priority, and severity. A complete listing of all reportable events may be found inSection 18.5.6, “Event Reports Generated in MySQL Cluster”. Event logs are of the two types listed here:
Cluster log: Keeps a record of all desired reportable events for the cluster as a whole.
Node log: A separate log which is also kept for each individual node.
事件日志:MySQL集群通过种类(启动,关机,错误,检查点等等),优先级和严重性的事件产生日志。一个有关完整的报告性事件的监听,可以在Section 18.5.6,“Event Reports Generated in MySQL Cluster”文章中找到。事件日志在这里有两种类型:
l 集群日志:针对于集群,以保存一份期望的可报告性的事件记录作为一个整体。
l 节点日志:一个单独的日志维护着每一个单一的节点。
NoteUnder normal circumstances, it is necessary and sufficient to keep and examine only the cluster log. The node logs need be consulted only for application development and debugging purposes.
注意:
一般情况下,充分的去保存和检查集群日志是很有必要的。而节点日志则仅仅是作为开发和调试目的去检查的。
Checkpoint. Generally speaking, when data is saved to disk, it is said that acheckpointhas been reached. More specific to MySQL Cluster, a checkpoint is a point in time where all committed transactions are stored on disk. With regard to theNDB
storage engine, there are two types of checkpoints which work together to ensure that a consistent view of the cluster's data is maintained. These are shown in the following list:
检查点:一般而言,当数据存到硬盘上时,Checkpoint就已经存在了。对于MySQL集群更明确的讲,一个检查点就是一个存储在硬盘上及时提交事务的点。对于NDB存储引擎来讲,这两种类型的检查点是一起工作的,并确保了集群数据的一致性视图是可维护的。这些会显示在以下列表中:
Local Checkpoint (LCP): This is a checkpoint that is specific to a single node; however, LCPs take place for all nodes in the cluster more or less concurrently. An LCP involves saving all of a node's data to disk, and so usually occurs every few minutes. The precise interval varies, and depends upon the amount of data stored by the node, the level of cluster activity, and other factors.
l 本地检查点(LCP):对于一个单一的节点来说,这是一个特殊的检查点。然而,LCPs在集群的所有节点中或多或少是同时发生的。一个LCP在硬盘上涉及到了所保留的所有数据节点,因此在通常每隔几分钟都会发生。精确的时间间距各不相同,并且需要通过节点依赖于大量所存储的数据,集群的级别是活跃的,或者其他因素。
Global Checkpoint (GCP): A GCP occurs every few seconds, when transactions for all nodes are synchronized and the redo-log is flushed to disk.
l 全局检查点(GCP):一个GCP每隔几秒就会发生一次,此时所有节点的事务是同步的,并且重写的日志会刷新到硬盘上。
For more information about the files and directories created by local checkpoints and global checkpoints, seeMySQL Cluster Data NodeFileSystemDir
Files.
关于通过本地检查点和全局检查点创建的文件和目录的更多信息,请见MySQL Cluster Data NodeFileSystemDir
Files
该文章摘自http://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-basics.html

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

全表掃描在MySQL中可能比使用索引更快,具體情況包括:1)數據量較小時;2)查詢返回大量數據時;3)索引列不具備高選擇性時;4)複雜查詢時。通過分析查詢計劃、優化索引、避免過度索引和定期維護表,可以在實際應用中做出最優選擇。

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL 和 MariaDB 可以共存,但需要謹慎配置。關鍵在於為每個數據庫分配不同的端口號和數據目錄,並調整內存分配和緩存大小等參數。連接池、應用程序配置和版本差異也需要考慮,需要仔細測試和規劃以避免陷阱。在資源有限的情況下,同時運行兩個數據庫可能會導致性能問題。

LaravelEloquent模型檢索:輕鬆獲取數據庫數據EloquentORM提供了簡潔易懂的方式來操作數據庫。本文將詳細介紹各種Eloquent模型檢索技巧,助您高效地從數據庫中獲取數據。 1.獲取所有記錄使用all()方法可以獲取數據庫表中的所有記錄:useApp\Models\Post;$posts=Post::all();這將返回一個集合(Collection)。您可以使用foreach循環或其他集合方法訪問數據:foreach($postsas$post){echo$post->

數據集成簡化:AmazonRDSMySQL與Redshift的零ETL集成高效的數據集成是數據驅動型組織的核心。傳統的ETL(提取、轉換、加載)流程複雜且耗時,尤其是在將數據庫(例如AmazonRDSMySQL)與數據倉庫(例如Redshift)集成時。然而,AWS提供的零ETL集成方案徹底改變了這一現狀,為從RDSMySQL到Redshift的數據遷移提供了簡化、近乎實時的解決方案。本文將深入探討RDSMySQL零ETL與Redshift集成,闡述其工作原理以及為數據工程師和開發者帶來的優勢。

MySQL 數據庫中,用戶和數據庫的關係通過權限和表定義。用戶擁有用戶名和密碼,用於訪問數據庫。權限通過 GRANT 命令授予,而表由 CREATE TABLE 命令創建。要建立用戶和數據庫之間的關係,需創建數據庫、創建用戶,然後授予權限。

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。
