pagina - Cómo automatizar la migración(esquema y datos) para aplicaciones PHP/MySQL
pagina web con base de datos mysql (11)
El software de banco MySQL (que se puede encontrar en el sitio web de mysql) hace eso. Sin embargo, implica pasos repetitivos.
Tengo una aplicación en PHP / MySQL. Estoy buscando una forma automatizada de actualizar la base de datos detrás de la aplicación. No necesito tener la compatibilidad con versiones anteriores una vez que se actualice.
He leído los artículos de jeff''s y K. Scott Allen sobre esto.
Todavía no estoy seguro de cómo implementar esto para una aplicación PHP / MySQL.
¿Hay algún proceso simple y bueno para esto?
He creado un pequeño script de migración para MySQL en PHP. Es bueno para los proyectos en etapa inicial y para aquellos que no necesitan (aún) los scripts de migración más complejos. https://github.com/kennberg/php-mysql-migrate
Intente utilizar esta herramienta para la migración de esquemas: https://github.com/idler/MMP/
Puedes probar esta biblioteca: mysql-version-control .
Me gusta este porque distingue entre esquema, datos centrales y datos de prueba. Pero lo hace de una manera que todavía es muy fácil de usar.
Similar a la sugerencia de gnarf, correría con lo siguiente:
- Por cada cambio en el esquema, cree un archivo SQL que cuando se ejecute lo lleve de la versión anterior a la nueva (esto podría ser un archivo por cada versión principal o muchos cambios más pequeños).
- Cree un archivo separado que incluya cada uno de los nombres de los archivos SQL en el orden en que deben aplicarse (el más antiguo en la parte superior, el más reciente en la parte inferior)
- Cree una tabla simple de "versiones" (todo lo que necesita es una sola columna VARCHAR) en su base de datos
Ahora necesitas escribir un script simple que funcione de la siguiente manera:
- Consulte en la tabla de versiones el nombre del último archivo de actualización de SQL aplicado
- Si hay archivos de alteración de SQL más nuevos para ejecutar, ejecútelos en secuencia
- grabar el nombre del nuevo archivo SQL aplicado
Espero que tenga sentido
También puede utilizar una API gratuita SqlQuerySync
o cree una tabla de base de datos que gestione las consultas CREAR / ALTERAR / BORRAR.
Tengo el mismo objetivo: migrar una gran base de datos (más de un millón de líneas en algunas tablas). Estoy considerando usar https://phinx.org que parece bueno para hacer frente a la migración del esquema, además viene con la opción de retroceso para la seguridad.
Tengo un objeto "Esquema" que uso, pero podría hacer lo mismo sin clases ...
Lo que quieres hacer es crear una tabla '' db_schema_versions
'':
CREATE TABLE db_schema_versions (
`table` varchar(255) NOT NULL PRIMARY KEY,
`version` INT NOT NULL
)
Después de que su base de datos pueda hacer un seguimiento de la versión #, está activada, puede hacer actualizaciones de SQL automáticamente.
Debes bloquear tu tabla de esquemas al actualizar el esquema. De esta manera, no tendrá dos solicitudes al mismo tiempo que intenta actualizar su esquema.
Entonces, manténgase al tanto de la versión desde la que está actualizando: construya un gran interruptor, algo como esto:
class SNTrack_Db_Schema extends MW_Db_Schema_Abstract {
protected $table = "sntrack_db_schema";
protected $version = 5;
protected function upgrade($fromVersion) {
// don''t break
switch($fromVersion) {
case 0:
$this->db->query(''CREATE TABLE sntrack_inbound_shipment (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`from` VARCHAR(255) NOT NULL,
`date` DATE NOT NULL,
`invoice` VARCHAR(255) NOT NULL,
`notes` TEXT
)'');
$this->setVersion(1);
case 1:
$this->db->query(''ALTER TABLE sntrack_details ADD `shipment_id` INT'');
$this->db->query(''ALTER TABLE sntrack_product ADD `inventory` INT NOT NULL DEFAULT 0'');
$this->db->query(''CREATE TABLE sntrack_inventory_shipment (
`shipment_id` INT NOT NULL,
`product_id` INT NOT NULL,
`qty` INT NOT NULL,
PRIMARY KEY (`shipment_id`, `product_id`)
)'');
$this->setVersion(2);
...etc
Una forma de hacerlo es volcar la base de datos en un archivo sql grande usando mysqldump. Solo toma ese archivo y obténlo en la nueva instalación.
Usted no puede Tu tampoco
Escriba archivos de actualización con todos los sql que se ejecutaron en el entorno de origen y luego ejecútelos (mencionados anteriormente), como SVN. Necesita script php para la ejecución y trabajo manual para escritura SQL
Analice ambos entornos y sugiera al usuario qué actualizaciones deben migrarse. Básicamente, lo mismo que el primero, excepto que tiene un gran paso para la migración, no muchos trozos pequeños. SQLyog puede analizar diferencias tanto para el esquema como para los datos.
Utilice migratedb https://github.com/malukenho/MigrateDB de @malukenho