本节内容适用于运行在Unix和Windows平台上的NDB Cluster。
在NDB集群中处理数据库表和数据与在标准MySQL中处理数据库表和数据没有太大区别。有两点需要牢记:
对于要在集群中复制的表,它必须使用
NDBCLUSTER
存储引擎。要指定这一点,请使用引擎= NDBCLUSTER
或引擎= NDB
选项在创建表时:创建表tbl_name(col_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
$link = new mysqli('198.51.100.20', 'root', ')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)) {?> City Population #然后显示结果…而(行=结果美元- > fetch_object ()) printf (" < tr > \ n < td对齐= \ \“中心”> % s < / td > < td > % d < / td > \ n < / tr > \ n”,行- >名称、行- >人口);?> #……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(); ?>