إصدار قاعدة بيانات MySQL عندما لا تحتوي قاعدة التعليمات البرمجية على ORM

StackOverflow https://stackoverflow.com/questions/164073

سؤال

لقد كنت أفكر في هذه المشكلة لفترة من الوقت ولم أتوصل بعد إلى أي أفكار مستقرة/أنيقة.

أعلم أنه باستخدام جداول MyISAM، يمكنك الحصول على وقت تحديث الجدول ولكن هذا ليس صحيحًا تمامًا مع InnoDB ووجدت أنه من غير الموثوق حتى النظر إلى ملف .frm للحصول على فكرة عن الوقت الذي قد يتم فيه تعديل التعريف. ..لا يهم إذا تم تغيير مجموعة البيانات.

كانت لدي فكرة كل 30 دقيقة لإلقاء محتويات المخطط، وتقسيمه باستخدام نص AWK، ثم تقسيمه إلى الإصدار الأخير...ولكن هذا يبدو مبالغًا فيه بعض الشيء وقد يمثل مشكلة إذا كانت مجموعة البيانات المعنية كبيرة.

هل كانت مفيدة؟

المحلول

وهذا يذكرني بهذا السؤال:كيف يمكنك إدارة مراجعات قاعدة البيانات في مشروع متوسط ​​الحجم له فروع؟ولكن ربما أكون جنرالًا ...

http://odetocode.com/Blogs/scott/archive/2008/01/30/11702.aspx

لا تحتوي قاعدة التعليمات البرمجية التي أعمل عليها حاليًا على ORM، ومع ذلك ما زلنا نستخدم الحل استنادًا إلى المدونة أعلاه.إنها تعمل.

نصائح أخرى

إذا قمت بتشغيل mysqldump -d ذلك مقالب فقط المخطط:

[gary.richardson@server ~]$ mysqldump -d -u root mysql user
-- MySQL dump 10.11
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version       5.0.45

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@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 TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_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';

نعم، انها صعبة. لهذا السبب أنا استخدم ك InnoDB. انه من الاسهل للقيام تفريغ / الاستيراد، وحتى وضع المخططات تحت VC.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top