2008-10-02 65 views
3

我一直在考虑这个问题并且还没有想出任何稳定/优雅的想法。当代码库没有ORM时对MySQL数据库进行版本控制

我知道在MyISAM表中,你可以得到表def的更新时间,但这与InnoDB不一样,我发现它甚至不可靠查看.frm文件,以了解何时定义可能有被修改....如果数据集已被更改,永不知情。

我有一个想法,每隔30分钟mysqldumping模式的内容,用AWK脚本分开,然后区分到最后一个版本......但这似乎有点过分,可能是一个问题,如果涉及的数据集很大。

+0

什么是版本控制?数据库的基本模式?或者你想跟踪数据的所有更改? – Ken 2008-10-02 19:21:48

回答

0

是的,这很难。这就是我使用innodb的原因。做转储/导入更容易,我们甚至把模式放在VC下。

+0

InnoDB一直非常恶毒地处理转储/导入,特别是重建索引。另一个时间和地点我在早上开始进口,晚上晚些时候完成(索引关闭直到进口完成)。 – David 2008-12-18 23:28:42

2

如果运行mysqldump -d只转储模式:

[[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 

那么你可以做你的分析。

你的问题还有另一种解决方案,但需要纪律。您可以添加COMMENT字段到列和表格:

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

我喜欢在其中放入一个版本号。你可以配合该到你的RCS:

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