Trabajar don datos en MySQL Cluster no es muy distinto que trabajar con MySQL sin Cluster. Hay que tener en cuenta dos puntos al hacerlo:
            Las tablas deben crearse con la opción
            ENGINE=NDB o
            ENGINE=NDBCLUSTER , o cambiarse (mediante
            ALTER TABLE) para usar el motor NDB
            CLuster para que puedan replicarse en el cluster. Si está
            importando tablas de una base de datos existente usando la
            salida de mysqldump, puede abrir el
            script SQL en un editor de texto y añadir está opción a
            cualquier comando de creación de tablas, o reemplazar
            cualquier opción ENGINE (o
            TYPE) existente con alguna de estas. Por
            ejemplo, suponga que tiene la base de datos de ejemplo
            world en otro MySQL server (que no
            soporta MySQL Cluster), y desea exportar la definición de
            la tabla City :
          
shell> mysqldump --add-drop-table world City > city_table.sql
            El fichero city_table.sql resultante
            contendrá el comando de creación de la tabla ( y el
            comando INSERT necesario para importar
            los datos de la tabla):
          
DROP TABLE IF EXISTS 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', PRIMARY KEY (ID) ) TYPE=MyISAM; INSERT INTO City VALUES (1,'Kabul','AFG','Kabol',1780000); INSERT INTO City VALUES (2,'Qandahar','AFG','Qandahar',237500); INSERT INTO City VALUES (3,'Herat','AFG','Herat',186800); # (remaining INSERT statements omitted)
            Necesitará asegurarse que MySQL usa el motor NDB para esta
            tabla. Hay dos formas de hacerlo. Una es,
            antes de importar la tabla
            en la base de datos del cluster, modificar su definición
            para que lea (usando City como ejemplo):
          
DROP TABLE IF EXISTS 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', PRIMARY KEY (ID) ) ENGINE=NDBCLUSTER; INSERT INTO City VALUES (1,'Kabul','AFG','Kabol',1780000); INSERT INTO City VALUES (2,'Qandahar','AFG','Qandahar',237500); INSERT INTO City VALUES (3,'Herat','AFG','Herat',186800); # (etc.)
            Esto debe hacerse para la definición de cada tabla que
            será parte de la base de datos clusterizada. La forma más
            fácil de hacerlo es símplemente hacer un buscar y
            reemplazar en el fichero world.sql y
            reemplazar todas las instancias de
            TYPE=MyISAM con
            ENGINE=NDBCLUSTER. Si no quiere modificar
            el fichero, puede usar ALTER TABLE;
            consulte a continuación las particularidades.
          
            Asumiendo que ha creado la base de datos llamada
            world en el nodo SQL del cluster, puede
            usar el cliente de línea de comandos
            mysql para leer
            city_table.sql, y crear y llenar de
            datos la tabla correspondiente de la forma usual:
          
shell> mysql world < city_table.sql
Es muy importante recordar que el comando anterior debe ejecutarse en la máquina en que corre el nodo SQL -- en este caso, la máquina con dirección IP 192.168.0.20.
            Para crear una copia de la base de datos
            world en el nodo SQL, guarde el fichero
            en /usr/local/mysql/data, luego ejecute
          
shell> cd /usr/local/mysql/data shell> mysql world < world.sql
            Por supuesto, el script SQL debe ser leíble por el usuario
            mysql . Si guarda el fichero en un lugar
            distinto, ajuste lo anterior correctamente.
          
            Es importante tener en cuenta que NDB Cluster en MySQL 5.0
            no soporta descubrimiento automático de bases de datos.
            (Consulte Sección 16.8, “Limitaciones conocidas de MySQL Cluster”.) Esto
            significa que , una vez que la base de datos
            world y sus tablas se han creado en un
            nodo de datos, necesitará ejecutar el comando
            CREATE DATABASE world; (a partir de MySQL
            5.0.2, puede usar CREATE SCHEMA world; en
            su lugar), seguido por FLUSH TABLES; en
            cada nodo de datos del cluster. Esto hará que el nodo
            reconozca la base de datos y lea sus definiciones de tablas.
          
Ejecutar consultas SELECT en el nodo SQL no es distinto a ejecutarlas en cualquier otra instancia de un MySQL server. Para ejecutar consultas de línea de comandos, primero necesita registrarse en el MySQL Monitor normalmente:
shell> mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.9-max Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
            Si no modifica las cláusulas ENGINE= en
            las definiciones de tabla antes de importar el script SQL,
            debe ejecutar los siguientes comandos en este punto:
          
mysql> USE world; mysql> ALTER TABLE City ENGINE=NDBCLUSTER; mysql> ALTER TABLE Country ENGINE=NDBCLUSTER; mysql> ALTER TABLE CountryLanguage ENGINE=NDBCLUSTER;
            Tenga en cuenta que símplemente usamos la cuenta
            root por defecto del sistema con una
            contraseña vacía. Por supuesto, en un sistema de
            producción, debe siempre
            seguir las precauciones de seguridad para instalar un MySQL
            server, incluyendo una contraseña de root y la creación de
            una cuenta de usuario con sólo los permisos necesarios para
            realizar las tareas necesarias para ese usuario. Para más
            información acerca de esto, consulte
            Sección 5.6, “El sistema de privilegios de acceso de MySQL”.
          
            Vale la pena tener en cuenta que los nodos del cluster no
            utilizan el sistema de permisos de MySQL al acceder el uno
            al otro, y preparar o cambiar las cuentas de usuario de
            MySQL (incluyendo la cuenta root ) no
            tiene efecto en la interacción entre nodos, sólo en
            aplicaciones accediendo al nodo SQL.
          
Seleccionar una base de datos y ejecutar una consulta SELECT contra una tabla en la base de datos se realiza de la forma normal, como salir del MySQL Monitor:
mysql> USE world; mysql> SELECT Name, Population FROM City ORDER BY Population DESC LIMIT 5; +-----------+------------+ | Name | Population | +-----------+------------+ | Bombay | 10500000 | | Seoul | 9981619 | | São Paulo | 9968485 | | Shanghai | 9696300 | | Jakarta | 9604900 | +-----------+------------+ 5 rows in set (0.34 sec) mysql> \q Bye shell>
            Las aplicaciones usando MySQL pueden usar APIs estándar. Es
            importante recordar que sus aplicaciones deben acceder al
            nodo SQL, y no al nodo MGM o a los de almacenamiento. Este
            breve ejemplo muestra cómo puede ejecutar la misma consulta
            que la anterior usando la extensión de PHP 5
            mysqli ejecutando un servidor web en
            cualquier punto de la red:
          
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type"
        content="text/html; charset=iso-8859-1">
  <title>SIMPLE mysqli SELECT</title>
</head>
<body>
<?php
  # connect to SQL node:
  $link = new mysqli('192.168.0.20', 'root', '', 'world');
  # parameters for mysqli constructor are:
  #   host, user, password, database
  if( mysqli_connect_errno() )
    die("Connect failed: " . mysqli_connect_error());
  $query = "SELECT Name, Population
            FROM City
            ORDER BY Population DESC
            LIMIT 5";
  # if no errors...
  if( $result = $link->query($query) )
  {
?>
<table border="1" width="40%" cellpadding="4" cellspacing ="1">
  <tbody>
  <tr>
    <th width="10%">City</th>
    <th>Population</th>
  </tr>
<?
    # then display the results...
    while($row = $result->fetch_object())
      printf(<tr>\n  <td align=\"center\">%s</td><td>%d</td>\n</tr>\n",
              $row->Name, $row->Population);
?>
  </tbody
</table>
<?
  # ...and verify the number of rows that were retrieved
    printf("<p>Affected rows: %d</p>\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();
?>
</body>
</html>
Suponemos que el proceso ejecutándose en el servidor web puede alcanzar la IP del nodo SQL.
De forma parecida, puede usar la MySQL C API, Perl-DBI, Python-mysql, o los conectores propios de MySQL AB para realizar las tareas de definición y manipulación de datos como haría normalmente con MySQL.
            Recuerde que cada tabla NDB
            debe tener una clave primaria. Si no se define
            clave primaria por el usuario cuando se crea la tabla, el
            motor NDB Cluster creará una oculta
            automáticamente. (Nota:
            esta clave oculta ocupa espacio como cualquier otro índice
            de tabla. No es raro encontrar problemas debido a espacio
            insuficiente en memoria para guardar estos índices creados
            automáticamente.)
          
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

