前言
最近在项目中用到了MySQL集群,所以就和小伙伴们研究了两天。下面给大家分享一下成果。
小编始终觉得对新事物的学习,没有比看图这种方式更好地理解了。所以先来看一张mysql集群的架构图(摘自百度百科-MySQL Cluster):
上图一共分了四层:Applications、SQL、Storage、Management。
如果您的英语不是体育老师教的的话,那么您肯定已经猜出来每一层的职责了:
—–Applications主要是指需要连接数据库的应用程序;
—–SQL中每一个mysqld都是一个sql节点,Applications需要通过连接sql节点来存储数据,您可以把它看成应用程序与数据库集群进行数据交换的大门
—–Storage有‘仓库’的意思,所以数据都是存在数据节点(ndbd)中的,而且每个数据节点的数据都是一致的,都是一整套最新的数据
—–Management中就是管理节点,一个MySQL中只有一个管理节点,用来管理其他节点
综上所述,一个MySQL集群中包括三种节点(不包括Applications):管理节点、数据节点,sql节点。
一、下载集群版mysql
下载mysql-cluster-gpl-7.4.7-win32或mysql-cluster-gpl-7.4.7-winx64
下载地址:http://yunpan.cn/cd892RtysQ3Vk (提取码:45c8)
MySQL官网下载地址:http://dev.mysql.com/downloads/cluster/
二、配置MySQL集群
需要用三台机器(没有条件的朋友可以考虑用虚拟机),一台配置管理节点:另外两台每台配置一个数据节点和一个SQL节点(也可以用五台计算机,每台计算机配置一个节点):
管理节点:192.168.25.50
数据节点A:192.168.25.49
数据节点B:192.168.25.48
SQL节点A:192.168.25.49
SQL节点B:192.168.25.48
1、首先将下载压缩包解压到每台电脑的C:/mysql目录下:
当然放在其他盘的目录里也可以。
2、配置管理节点
在配置管理节点(192.168.25.50)的计算机上的C:\Mysql\Bin目录下建立cluster-logs和config两个文件夹。cluster-logs用来存储日志文件,在config文件夹中建立my.ini和config.ini两个配置文件:
my.ini
<code class="hljs ruby">[mysql_cluster] # Options for management node process config-file=C:/mysql/bin/config/config.ini</code>
config.ini
<code class="hljs ruby"><code class="hljs ruby">[ndbd default] # Options affecting ndbd processes on all data nodes: NoOfReplicas=2 # Number of replicas DataDir=C:/mysql/bin/cluster-data # Directory for each data node's data files # Forward slashes used in directory path, # rather than backslashes. This is correct; # see Important note in text DataMemory=80M # Memory allocated to data storage IndexMemory=18M # Memory allocated to index storage # For DataMemory and IndexMemory, we have used the # default values. Since the "world" database takes up # only about 500KB, this should be more than enough for # this example Cluster setup. [ndb_mgmd] # Management process options: HostName=192.168.25.50 # Hostname or IP address of management node DataDir=C:/mysql/bin/cluster-logs # Directory for management node log files [ndbd] # Options for data node "A": HostName=192.168.25.49 # Hostname or IP address [ndbd] # Options for data node "B": HostName=192.168.25.48 # Hostname or IP address [mysqld] # SQL node A options: HostName=192.168.25.49 # Hostname or IP address [mysqld] # SQL node B options: HostName=192.168.25.48 # Hostname or IP address</code></code>
<code class="hljs ruby">3、配置数据节点
<code class="hljs ruby">在配置数据节点(192.168.25.48、192.168.25.49)的计算机上的C:\Mysql\Bin目录下建立cluster-data文件夹,用来存放数据:
<code class="hljs ruby">SQL节点不用任何配置,至此,整个MySQL集群就搭建完成了。
<code class="hljs ruby">三、启动MySQL集群
<code class="hljs ruby">启动MySQL集群时,有一个启动顺序:先启动管理节点,再启动数据节点,再启动sql节点。
<code class="hljs ruby">1、启动管理节点:
<code class="hljs ruby">在cmd中运行如下命令
<code class="hljs ruby"><code class="hljs ruby"><code class="hljs tex">c:\mysql\bin\ndb_mgmd.exe --configdir=c:\mysql\bin\config --config-file=c:\mysql\bin\config\config.ini --ndb-nodeid=1 --reload –initial</code></code></code>
<code class="hljs ruby"><code class="hljs tex"><img src="/static/imghwm/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c150828/1440K00Q50-3M20.jpg" class="lazy" alt="这里写图片描述" title="\">
<code class="hljs ruby"><code class="hljs tex">2、启动每个数据节点:
<code class="hljs ruby"><code class="hljs tex">在cmd中运行如下命令:
<code class="hljs ruby"><code class="hljs ruby"><code class="hljs tex"><code class="hljs tex">c:\mysql\bin\ndbd.exe --ndb-connectstring=192.168.25.50</code></code></code></code>
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><img src="/static/imghwm/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c150828/1440K00QF310-4B34.jpg" class="lazy" alt="这里写图片描述" title="\">
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex">3、启动每个sql节点:
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex">在cmd中运行如下命令:
<code class="hljs ruby"><code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck">c:\mysql\bin\mysqld.exe --ndbcluster --ndb-connectstring=192.168.25.50 --console</code></code></code></code></code>
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><img src="/static/imghwm/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c150828/1440K00Q921Z-55413.jpg" class="lazy" alt="这里写图片描述" title="\">
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck">现在整个MySQL集群就已经启动了。
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck">4、查看每个节点的状态:
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck">在管理节点所在计算机上(192.168.25.50)打开ndb_mgm.exe,或者直接在cmd中运行
<code class="hljs ruby"><code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex">c:\mysql\bin\ndb_mgm</code></code></code></code></code></code>
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex">执行“show”命令,可以查看到每个节点的连接状态:
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><img src="/static/imghwm/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c150828/1440K00R15620-A262.jpg" class="lazy" alt="这里写图片描述" title="\">
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex">这就表明每个节点均连接正常。下面测试数据。
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex">三、测试MySQL集群
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex">1、在sql节点A建立数据库并插入数据:
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex">在sql节点A的计算机上(192.168.25.49)的cmd中运行C:\mysql\bin\mysql.exe -u root -p命令登录mysql,接下来需要输入密码时,密码默认为空(直接回车)。
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex">创建数据库并插入数据:<br>
—–创建名为”MySQL_Cluster_Test”的数据库:
<code class="hljs ruby"><code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"> create database MySQL_Cluster_Test;</code></code></code></code></code></code></code>
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql">—–创建表”T_User”:
<code class="hljs ruby"><code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql">use MySQL_Cluster_Test; create table T_User(Name varchar(32),Age int) engine=ndbcluster;</code></code></code></code></code></code></code></code>
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql">注意建表语句后面一定要加上 engine=ndbcluster
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql">—–插入数据:
<code class="hljs ruby"><code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">insert into T_User values('DannyHoo',26);</code></code></code></code></code></code></code></code></code>
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">—–查询数据:
<code class="hljs ruby"><code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">select * from T_User;</code></code></code></code></code></code></code></code></code></code>
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><img src="/static/imghwm/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c150828/1440K00R32Q0-L038.jpg" class="lazy" alt="这里写图片描述" title="\">
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">2、在sql节点B也可以查询到数据。
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">同样在sql节点B的计算机上(192.168.25.48)的cmd中运行C:\mysql\bin\mysql.exe -u root -p命令登录mysql。
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">执行 show databases; 命令可以查看到在sql节点A新建的数据库;<br>
执行use MySQL_Cluster_Test;<br>
select * from T_User;<br>
可以查询到在sql节点A插入的数据。
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><img src="/static/imghwm/default1.png" data-src="http://img.bitscn.com/upimg/allimg/c150828/1440K00R56250-Y330.jpg" class="lazy" alt="这里写图片描述" title="\">
<code class="hljs ruby"><code class="hljs tex"><code class="hljs tex"><code class="hljs brainfuck"><code class="hljs tex"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql"><code class="hljs sql">到这里,整个集群的搭建和测试就完成了。假如一个数据节点宕机,并不会影响整个集群的运行,任何一个数据节点死掉甚至物理损坏都不用担心,因为每个数据节点保存的数据都是完整的一份数据(在你操作数据的时候,它早就自动为你把最新的数据备份到每一个数据节点上啦)。你可以测试一下,这时手动停止某个数据节点和sql节点,另外一个数据节点和sql节点还会正常运行。当你把停止的数据节点和sql节点重新启动时,会发现又重新连接到集群里了,而且每个数据节点的数据都是最新的。

在数据库优化中,应根据查询需求选择索引策略:1.当查询涉及多个列且条件顺序固定时,使用复合索引;2.当查询涉及多个列但条件顺序不固定时,使用多个单列索引。复合索引适用于优化多列查询,单列索引则适合单列查询。

要优化MySQL慢查询,需使用slowquerylog和performance_schema:1.启用slowquerylog并设置阈值,记录慢查询;2.利用performance_schema分析查询执行细节,找出性能瓶颈并优化。

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

MySQL异步主从复制通过binlog实现数据同步,提升读性能和高可用性。1)主服务器记录变更到binlog;2)从服务器通过I/O线程读取binlog;3)从服务器的SQL线程应用binlog同步数据。

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

MySQL的安装和基本操作包括:1.下载并安装MySQL,设置根用户密码;2.使用SQL命令创建数据库和表,如CREATEDATABASE和CREATETABLE;3.执行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.创建索引和存储过程以优化性能和实现复杂逻辑。通过这些步骤,你可以从零开始构建和管理MySQL数据库。

InnoDBBufferPool通过将数据和索引页加载到内存中来提升MySQL数据库的性能。1)数据页加载到BufferPool中,减少磁盘I/O。2)脏页被标记并定期刷新到磁盘。3)LRU算法管理数据页淘汰。4)预读机制提前加载可能需要的数据页。

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

Atom编辑器mac版下载
最流行的的开源编辑器