10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 42.0 mb
PDF (A4)- 42.1 mb
手册页(TGZ)- 266.5 kb
手册页(邮政编码)- 376.2 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册摘录

23.3.5 NDB集群示例表和数据

请注意

本节中的信息适用于NDB集群运行Unix和Windows平台。

处理数据库表和数据在集群NDB并没有太大的区别在标准的MySQL。有两个要记住的要点:

  • 对于集群中的一个表复制,它必须使用NDBCLUSTER存储引擎。指定这个,使用引擎= NDBCLUSTER引擎= NDB选择在创建表时:

    创建表tbl_name(col_namecolumn_definitions)引擎= NDBCLUSTER;

    另外,现有的表,使用不同的存储引擎,使用ALTER TABLE改变表的使用NDBCLUSTER:

    ALTER TABLEtbl_name引擎= NDBCLUSTER;
  • 每一个NDBCLUSTER表有一个主键。如果没有定义主键由用户创建一个表时,NDBCLUSTER存储引擎自动生成一个隐藏的。这样一个关键的占用空间和其他表索引。(它并不少见,遇到问题由于内存不足容纳这些自动创建索引)。

如果你从一个现有的数据库使用进口表的输出,mysqldump,您可以在文本编辑器中打开SQL脚本和添加引擎选择任何表创建语句,或替换任何现有的引擎选项。假设你有世界示例数据库的另一个MySQL服务器不支持NDB集群,和你想要出口的城市表:

>,mysqldump——add-drop-table世界城市> city_table.sql美元

由此产生的city_table.sql(文件包含这个表创建语句插入语句必须导入表数据):

删除表如果存在“城市”;创建表“城市”(“ID”int(11)不是零auto_increment,“名字”char (35) NOT NULL违约”,“CountryCode”char (3) NOT NULL默认”、“区”char (20) NOT NULL默认”、“人口”int (11) NOT NULL默认“0”,主键(ID)) = MyISAM引擎默认字符集= latin1;中的一个插入“城市”值(1喀布尔的二自由度陀螺仪,喀布尔,1780000);插入“城市”值(2坎大哈的二自由度陀螺仪,坎大哈,237500);插入“城市”值(3,赫拉特,二自由度陀螺仪,赫拉特,186800);(剩下的INSERT语句省略)

您需要确保MySQL使用NDBCLUSTER这个表的存储引擎。有两种方法可以实现这一点。其中一个是修改表定义之前将它导入到数据库集群。使用城市表为例,修改引擎选项的定义如下:

删除表如果存在“城市”;创建表“城市”(“ID”int(11)不是零auto_increment,“名字”char (35) NOT NULL违约”,“CountryCode”char (3) NOT NULL默认”、“区”char (20) NOT NULL默认”、“人口”int (11) NOT NULL默认“0”,主键(ID))引擎= NDBCLUSTER默认字符集= latin1;中的一个插入“城市”值(1喀布尔的二自由度陀螺仪,喀布尔,1780000);插入“城市”值(2坎大哈的二自由度陀螺仪,坎大哈,237500);插入“城市”值(3,赫拉特,二自由度陀螺仪,赫拉特,186800);(剩下的INSERT语句省略)

这必须完成的每个表的定义是集群数据库的一部分。完成这个最简单的方法是做一个搜索和替换文件包含定义和取代的所有实例类型=engine_name引擎=engine_name引擎= NDBCLUSTER。如果您不想修改文件,您可以使用修改的文件来创建表,然后使用ALTER TABLE改变他们的存储引擎。本节给出了细节后。

假设您已经创建了一个数据库命名世界在SQL节点上的集群,然后您可以使用mysql命令行客户端阅读city_table.sql,并创建和填充相应的表以通常的方式:

$ > < city_table.sql mysql世界

很重要记住前面的命令必须执行SQL的主机节点上运行(在这种情况下,机器的IP地址198.51.100.20)。

创建一个完整的副本世界在SQL数据库节点,使用,mysqldumpnoncluster服务器将数据库导出到一个文件命名world.sql(例如,在/ tmp目录)。然后修改刚刚描述的表定义,并将文件导入SQL节点的集群是这样的:

$ > < / tmp / world.sql mysql世界

如果你保存文件到另一个位置,相应地调整前面的指令。

运行选择对SQL的查询节点没有不同于任何其他实例上运行的MySQL服务器。要从命令行运行查询,首先需要登录到MySQL监控以通常的方式(指定密码的输入密码:提示):

$ > mysql - u root - p输入密码:欢迎来到mysql的班长。命令结尾;或\ g。你的MySQL连接服务器版本id是1:8.0.28-ndb-8.0.28类型“帮助;”或“\ h”寻求帮助。类型\ c的缓冲区。mysql >

我们只是使用MySQL服务器的账户,假设您已经安装MySQL服务器的标准安全措施,包括设置一个强大的密码。有关更多信息,请参见部分2.10.4,“获得最初的MySQL账户”

值得考虑的是,NDB集群节点使用MySQL系统当访问特权。设置或更改用户帐户(包括MySQL账户)只影响访问SQL应用程序节点,节点之间的相互作用。看到部分23.6.17.2,“NDB集群和MySQL特权”为更多的信息。

如果你没有修改引擎条款的表定义导入SQL脚本之前,你应该运行下面的语句:

mysql >使用世界;mysql > ALTER TABLE城市引擎= NDBCLUSTER;mysql > ALTER TABLE国家引擎= NDBCLUSTER;mysql > ALTER TABLE CountryLanguage引擎= NDBCLUSTER;

选择一个数据库,并运行选择查询一个表的数据库也以通常的方式完成,退出MySQL监控:

mysql >使用世界;mysql >选择名字,人口从城市秩序人口DESC限制5;+ - - - - - - - - - - - - - - - - - - - - - - - - +人口名字| | | + + - - - - - - - - - - - - - - - - - - - - - - - - - -孟买+ | | 10500000 | |首尔| 9981619 |圣保罗| | 9968485 | |上海| 9696300 | | 9604900 | |雅加达+ - - - - - - - - - - - - - - - - - - - - - - - - + 5行组(0.34秒)mysql > \问再见>美元

使用MySQL的应用程序可以使用标准的api来访问NDB表。重要的是要记住,您的应用程序必须访问SQL节点,而不是管理或数据节点。这个简单的例子显示了如何执行选择语句显示通过使用PHP 5. xmysqli扩展Web服务器上运行的其他网络上的:

< !DOCTYPE HTML公共”——/ / W3C / / DTD HTML 4.01过渡/ / EN " " http://www.w3.org/TR/html4/loose.dtd " > < HTML > <头> < meta http-equiv =“- type”内容= " text / HTML;charset = iso - 8859 - 1 " > <标题>简单mysqli选择< /名称> < /头> <身体> < ?php连接到SQL节点:链接= new mysqli美元(“198.51.100.20”,“根”,“root_password”、“世界”);# mysqli构造函数参数有:#主机、用户、密码、数据库如果(mysqli_connect_errno())(“连接失败:“死去。mysqli_connect_error ());查询美元= "选择名字,人口从城市秩序人口DESC限制5”;#如果没有错误……如果结果($ = $链接- >查询(查询)美元){? > <表边界=“1”=“40%”单元格边距宽度=“4”单元格间距= " 1 " > < tbody > < tr > < th宽度=“10%”> < / th > < th >城市人口< / th > < / tr > < ?#然后显示结果…而(行=结果美元- > fetch_object ()) printf (" < tr > \ n < td对齐= \“\”> % s < / td > < td > % d < / td > \ n < / tr > \ n ", $行- >名称、$行- >人口);tbody < ? > < / /表> < ?#……and verify the number of rows that were retrieved printf("

Affected rows: %d

\n", $link->affected_rows); } else # otherwise, tell us what went wrong echo mysqli_error(); # free the result set and the mysqli connection object $result->close(); $link->close(); ?>

我们假设Web服务器上运行的过程可以达到SQL节点的IP地址。

以类似的方式,您可以使用MySQL C API, perl dbi, Python-mysql或MySQL连接器执行数据定义和操纵的任务就像通常与MySQL。