2013-02-15 19 views
9

मेरे पास कुछ बैकअप है और स्क्रिप्ट को पुनर्स्थापित करें जो मैं अपने डेटाबेस के लिए उपयोग कर रहा हूं। तालिका में टाइमस्टैम्प फ़ील्ड है। बैकअप स्क्रिप्ट इस तरह दिखता है:MySQL डेटा निर्यात समय बदलता है

mysqldump -u user -ppass database --tab="../" --fields-terminated-by="|" --skip-comments table 

यह दो फाइलें, table.sql और table.txt बनाता है। बहाल स्क्रिप्ट इस तरह दिखता है:

mysql -u user -ppass database < "../table.sql" 
mysqlimport -u user -ppass --local --fields-terminated-by="|" database "../table.txt" 

हालांकि बैकअप स्क्रिप्ट गलत समय outputting है - यह क्या डेटाबेस में है के पीछे एक घंटा होता है - लेकिन यह यह सही नहीं है जब आयात करने।

उदाहरण के लिए एक पंक्ति पर समय 15:10:25 था, लेकिन जब बैकअप स्क्रिप्ट चलाया जाता है, 14:10:25 table.txt में सूचीबद्ध है। जब मैं पुनर्स्थापना स्क्रिप्ट चलाता हूं, तो उसी पंक्ति में अब 14:10:25 डेटाबेस में समय के रूप में है। यदि मैं दोबारा बैकअप लेता हूं, तो यह कहता है 13:10:25! और इतने पर ...

मुझे यह नहीं पता कि यह क्यों है। समय क्षेत्र "सिस्टम" पर सेट किया गया प्रतीत होता है (मैं जीएमटी पर हूं)। Table.sql फ़ाइल में समय क्षेत्र का उल्लेख करने वाली कुछ पंक्तियां हैं, शायद कुछ गलत है?

/*!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' */; 
/*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='' */; 
/*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; 
DROP TABLE IF EXISTS `news_article`; 
/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 
CREATE TABLE `news_article` (
    `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(100) NOT NULL, 
    `alias` varchar(65) NOT NULL, 
    `author` tinyint(3) unsigned NOT NULL, 
    `category` tinyint(3) unsigned NOT NULL, 
    `posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `opening` text NOT NULL, 
    `content` text NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `alias` (`alias`) 
) ENGINE=MyISAM AUTO_INCREMENT=93 DEFAULT CHARSET=utf8; 
/*!40101 SET character_set_client = @saved_cs_client */; 

/*!40103 SET [email protected]_TIME_ZONE */; 

/*!40101 SET [email protected]_SQL_MODE */; 
/*!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 */; 

उत्तर

20

मिले अंत में एक समाधान: निर्यात स्क्रिप्ट के --skip-tz-utc विकल्प जोड़ने यहाँ प्रश्न में पूर्ण फ़ाइल है।

यह केवल यह सुनिश्चित करता है कि आपके द्वारा निर्यात की जाने वाली सटीक तारीख दूसरे डेटाबेस में आयात की गई है। यह मेरे लिए काम करता है क्योंकि डेटाबेस एक ही समय क्षेत्र हैं, लेकिन हो सकता है कि उन लोगों के लिए आदर्श न हो जिनके डेटाबेस अलग-अलग समय क्षेत्र हैं।

+0

मुझे लगता है कि मुझे ऐसा करने की ज़रूरत है, इसलिए मैंने एप्लिकेशन में कुछ और गलत किया है। इस विकल्प का उपयोग करना मैन पेज में जो भी कहता है उसके विपरीत * विपरीत * लगता है। क्या यह हो सकता है कि मुझे ऐप में MySQL टाइमज़ोन को ऑफ़सेट के बजाय यूटीसी सेट करना चाहिए था? – Mike

+0

मुझे लगता है कि डेटा आयात करते समय आपको निर्यात नहीं कर रहे समय पर यूटीसी को टाइमज़ोन सेट करना चाहिए। '--tz-utc' विकल्प के दस्तावेज़ से: "mysqldump यूटीसी में अपना कनेक्शन समय क्षेत्र सेट करता है और डंप फ़ाइल में SET TIME_ZONE = '+ 00:00' जोड़ता है।" तो, डंप यूटीसी में है। लेकिन चूंकि आप टैब डंप का उपयोग करते हैं, इसलिए "SET TIME_ZONE = '+ 00:00" निर्देश निष्पादित नहीं होता है, इसलिए आपको कनेक्शन पर टाइमज़ोन मैन्युअल रूप से सेट करना होगा। – Yuri

संबंधित मुद्दे