10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 36.4 mb
PDF (A4)- 36.4 mb
PDF (RPM)- 35.7 mb
HTML下载(TGZ)- 9.5 mb
HTML下载(Zip)- 9.5 mb
HTML下载(RPM)- 8.2 mb
手册(TGZ)- 235.5 kb
手册(Zip)- 347.0 kb
信息(Gzip)- 3.3 mb
信息(邮政编码)- 3.3 mb
本手册节选

21.2.5 NDB集群实例(含表和数据

请注意

本节内容适用于运行在Unix和Windows平台上的NDB Cluster。

在NDB集群中处理数据库表和数据与在标准MySQL中处理数据库表和数据没有太大区别。有两点需要牢记:

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

    创建表tbl_namecol_namecolumn_definitions)引擎= NDBCLUSTER;

    或者,对于使用不同存储引擎的现有表,请使用ALTER TABLE更改要使用的表NDBCLUSTER

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

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

shell> mysqldump——add-drop-table world City > city_table.sql

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

删除表如果存在' City ';CREATE TABLE ' City ' (' ID ' int(11) NOT NULL auto_increment, ' Name ' char(35) NOT NULL default ", ' CountryCode ' char(3) NOT NULL default ", ' District ' char(20) NOT NULL default ", ' Population ' int(11) NOT NULL default '0',主键(' ID ')) ENGINE=MyISAM default CHARSET=latin1;INSERT INTO ' City ' VALUES(1,'喀布尔','AFG','喀布尔',1780000);INSERT INTO ' City ' VALUES (2,'Qandahar','AFG','Qandahar',237500);INSERT INTO ' City ' VALUES (3,'Herat','AFG','Herat',186800);(省略其余INSERT语句)

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

删除表如果存在' City ';CREATE TABLE ' City ' (' ID ' int(11) NOT NULL auto_increment, ' Name ' char(35) NOT NULL default ", ' CountryCode ' char(3) NOT NULL default ", ' District ' char(20) NOT NULL default ", ' Population ' int(11) NOT NULL default '0',主键(' ID ')) ENGINE=NDBCLUSTER default CHARSET=latin1;INSERT INTO ' City ' VALUES(1,'喀布尔','AFG','喀布尔',1780000);INSERT INTO ' City ' VALUES (2,'Qandahar','AFG','Qandahar',237500);INSERT INTO ' City ' VALUES (3,'Herat','AFG','Herat',186800);(省略其余INSERT语句)

对于将成为集群数据库一部分的每个表的定义,必须这样做。最简单的方法是对包含定义的文件进行搜索和替换,并替换所有实例类型=engine_name引擎=engine_name引擎= NDBCLUSTER.如果不希望修改该文件,则可以使用未修改的文件创建表,然后使用ALTER TABLE改变他们的存储引擎。细节将在本节后面给出。

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

Shell > mysql world < city_table.sql

一定要记住,前面的命令必须在SQL节点所在的主机上执行(在本例中,是在IP地址所在的机器上执行)198.51.100.20).

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

Shell > mysql world < /tmp/world.sql

如果您将文件保存到不同的位置,请相应地调整前面的说明。

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

shell> mysql -u root -p Enter password: Welcome to the mysql monitor。命令以;或\ g。您的MySQL连接id是1到服务器版本:5.7.33- db-7.5.23输入'help;'或'\h'帮助。输入'\c'清除缓冲区。mysql >

我们只使用MySQL服务器帐户,并假设您已经遵循了安装MySQL服务器的标准安全注意事项,包括设置强密码。有关更多信息,请参见第2.10.4节“MySQL初始帐户的安全”

值得考虑的是,集群节点会这样做在彼此访问时使用MySQL特权系统。设置或更改MySQL用户帐户(包括account)只影响访问SQL节点的应用程序,而不影响节点之间的交互。看到第21.5.17.2节“NDB集群和MySQL特权”,以查询更多资料。

如果您没有修改引擎在导入SQL脚本之前,您应该在此时运行以下语句:

mysql>;mysql>修改表城市引擎=NDBCLUSTER;修改NDBCLUSTER表的Country ENGINE表修改表的CountryLanguage ENGINE=NDBCLUSTER;

选择一个数据库并运行选择对数据库中的表的查询也是用通常的方式完成的,就像退出MySQL Monitor一样:

mysql>;mysql> SELECT Name, Population FROM City ORDER BY Population DESC LIMIT+-----------+------------+ | 名字|人口  | +-----------+------------+ | 首尔孟买| 10500000 | | | 9981619 | |圣保罗| 9968485 | | 9696300 | |上海雅加达| | 9604900  | +-----------+------------+ 5行集(0.34秒)mysql > \问再见壳>

使用MySQL的应用程序可以使用标准api进行访问NDB表。一定要记住,应用程序必须访问SQL节点,而不是管理节点或数据节点。这个简短的示例展示了如何执行选择语句刚刚用PHP 5。Xmysqli在网络其他地方的Web服务器上运行的扩展:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < HTML >   SIMPLE mysqli SELECT

   root_password”、“世界”);mysqli构造函数的#参数是:# host, user, password, database if(mysqli_connect_errno()) die(“连接失败:”。mysqli_connect_error ());$query = "SELECT Name, Population BY Population DESC LIMIT 5";# if no errors…if($result = $link->query($query)) {?>  fetch_object ()) printf (" < tr > \ n < td对齐= \ \“中心”> % s < / td > < td > % d < / td > \ n < / tr > \ n”,行- >名称、行- >人口);?> 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一样。


City Population