Lunes, 07 Enero 2013 23:22

Sincronizar tablas en MySQL

Valora este artículo
(0 votos)

Cuando se realizan paginas web a veces resulta necesario compartir datos entre ellas como puede ser el caso de compartir los usuarios entre varias web diferentes en joomla y para eso MySQL nos proporciona una funcionalidad llamada FEDERATED que permite usar tablas en remoto como si estas estuvieran almacenadas en local, pero para no tener problemas de perdida de datos y velocidad lo mejor es usarlo en el mismo server.

Para ello en Gentoo necesitamos activar:

USE="extraengine" emerge mysql

O añadirlo en el fichero /etc/portage/packages.use

dev-dev/mysql extraengine

Luego reiniciamos el servicio de MySQL

/etc/init.d/mysql restart

Entramos en la consola de MySQL e instalamos el ENGINE con:

INSTALL PLUGIN federated SONAME 'ha_federated.so';

Pasamos a comprobar que lo tenemos activo:

show engines;

Debe de aparecer algo como esto:

+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| FEDERATED | YES | Federated MySQL storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+


Ahora ya solo nos queda crear la tabla que necesitamos duplicar, modificadas con la sintaxis requerida:

DROP TABLE IF EXISTS 'h3241_users';
CREATE TABLE 'h3241_users' (
'id' int(11) NOT NULL,
'name' varchar(255) NOT NULL DEFAULT '',
'username' varchar(150) NOT NULL DEFAULT '',
'email' varchar(100) NOT NULL DEFAULT '',
'password' varchar(100) NOT NULL DEFAULT '',
'usertype' varchar(25) NOT NULL DEFAULT '',
'block' tinyint(4) NOT NULL DEFAULT '0',
'sendEmail' tinyint(4) DEFAULT '0',
'registerDate' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
'lastvisitDate' datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
'activation' varchar(100) NOT NULL DEFAULT '',
'params' text NOT NULL,
'lastResetTime' datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT 'Date of last password reset',
'resetCount' int(11) NOT NULL DEFAULT '0' COMMENT 'Count of password resets since lastResetTime',
PRIMARY KEY ('id'),
KEY 'usertype' ('usertype'),
KEY 'idx_name' ('name'),
KEY 'idx_block' ('block'),
KEY 'username' ('username'),
KEY 'email' ('email')
) ENGINE=FEDERATED DEFAULT CHARSET=utf8
CONNECTION='mysql://usuario:password@localhost/basededatos/a4821_users';

Hemos quitado del original el AUTO_INCREMENT, cambio el ENGINE y por supuesto la conexión a la otra base de datos.

 

Referencias:

Leer 12590 veces Modificado por última vez en Viernes, 11 Enero 2013 10:21

Escribir un comentario


Código de seguridad
Refescar