2008-10-02 10 views
3

J'ai réfléchi à ce problème pendant un certain temps et je n'ai pas encore trouvé d'idées stables/élégantes.Versioning d'une base de données MySQL lorsque la base de code n'a pas de ORM

Je sais avec les tables MyISAM, vous pouvez obtenir le temps de mise à jour de la table def mais ce n'est pas si vrai avec InnoDB et je n'ai pas trouvé fiable même de regarder le fichier .frm pour une idée de quand la définition été modifié .... nevermind si l'ensemble de données a été changé. J'ai eu une idée de toutes les 30 minutes mysqldumping le contenu d'un schéma, en le séparant avec un script AWK, puis en différant cela à la dernière version ... mais cela semble un peu excessif et pourrait être un problème si le l'ensemble de données impliqué est important.

+0

Que faites-vous en version? Le schéma de base pour la base de données? Ou vous voulez suivre toutes les modifications apportées aux données? – Ken

Répondre

0

Oui, c'est dur. C'est pourquoi j'utilise innodb. Il est plus facile de faire une sauvegarde/importation, nous avons même mis les schémas sous VC.

+0

InnoDB a été assez vicieux pour travailler avec le vidage/importation, en particulier la reconstruction des index. Une autre fois, j'ai commencé à importer le matin et cela s'est fait plus tard dans la soirée (les index étaient éteints jusqu'à l'importation). – David

2

Si vous exécutez mysqldump -d il dumps que le schéma:

[[email protected] ~]$ mysqldump -d -u root mysql user 
-- MySQL dump 10.11 
-- 
-- Host: localhost Database: mysql 
-- ------------------------------------------------------ 
-- Server version  5.0.45 

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 
/*!40103 SET @[email protected]@TIME_ZONE */; 
/*!40103 SET TIME_ZONE='+00:00' */; 
/*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; 
/*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 

-- 
-- Table structure for table `user` 
-- 

DROP TABLE IF EXISTS `user`; 
CREATE TABLE `user` (
    `Host` char(60) collate utf8_bin NOT NULL default '', 
    `User` char(16) collate utf8_bin NOT NULL default '', 
    `Password` char(41) character set latin1 collate latin1_bin NOT NULL default '', 
    `Select_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Insert_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Update_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Delete_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Create_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Drop_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Reload_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Shutdown_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Process_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `File_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Grant_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `References_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Index_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Alter_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Show_db_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Super_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Create_tmp_table_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Lock_tables_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Execute_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Repl_slave_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Repl_client_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Create_view_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Show_view_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Create_routine_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Alter_routine_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `Create_user_priv` enum('N','Y') character set utf8 NOT NULL default 'N', 
    `ssl_type` enum('','ANY','X509','SPECIFIED') character set utf8 NOT NULL default '', 
    `ssl_cipher` blob NOT NULL, 
    `x509_issuer` blob NOT NULL, 
    `x509_subject` blob NOT NULL, 
    `max_questions` int(11) unsigned NOT NULL default '0', 
    `max_updates` int(11) unsigned NOT NULL default '0', 
    `max_connections` int(11) unsigned NOT NULL default '0', 
    `max_user_connections` int(11) unsigned NOT NULL default '0', 
    PRIMARY KEY (`Host`,`User`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'; 
/*!40103 SET [email protected]_TIME_ZONE */; 

/*!40101 SET [email protected]_SQL_MODE */; 
/*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */; 
/*!40014 SET [email protected]_UNIQUE_CHECKS */; 
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 
/*!40111 SET [email protected]_SQL_NOTES */; 

-- Dump completed on 2008-10-02 20:06:38 

Ensuite, vous pouvez faire votre analyse.

Il existe une autre solution à votre problème, mais prend la discipline. Vous pouvez ajouter un champ COMMENTAIRE aux colonnes et aux tables:

CREATE TABLE example (
    name varchar(32) COMMENT='Name of a person' 
) COMMENT='example table'; 

Je souhaite ajouter un numéro de version. Vous pouvez lier cela dans votre RCS:

CREATE TABLE example (
    name varchar(32) COMMENT='Name of a person' 
) COMMENT='VERSION=1.2.3 example table'; 
Questions connexes