Mysqldump से वर्बोज़ आउटपुट कैसे लॉग करें?


11

आप आमतौर पर लिनक्स कमांड के वर्बोज़ आउटपुट को इस तरह से सेव करते हैं:

# command > output.txt

लेकिन जब आप एक कमांड का उपयोग करते हैं mysqldump, तो >विकल्प डेटाबेस तालिकाओं के डंप को वांछित फ़ाइल में आउटपुट करता है:

# mysqldump --username=whatever --password=whatever -h localhost database > dump.sql

यदि आप -v(क्रिया) विकल्प में जोड़ते हैं mysqldump, तो यह आउटपुट के बारे में जानकारी देता है कि कमांड क्या कर रहा है। >डेटाबेस तालिका जानकारी को फ़ाइल में आउटपुट करने के लिए विकल्प का उपयोग करने के बाद से मैं इस वर्बोज़ आउटपुट को किसी फ़ाइल में कैसे सहेजूं ?

विशेष रूप से, मैं एक डेटाबेस के उत्पादन को इस तरह से दूसरे डेटाबेस में डंप कर रहा हूं:

mysqldump -alv -h 123.123.123.123 --user=username --password=p@ssw0rd --add-drop-table databasename | mysql --user=username --password=p@ssw0rd -h localhost localdatabase

मैंने निम्नलिखित की कोशिश की, लेकिन अंत में आउटपुट फ़ाइल खाली थी

mysqldump -alv -h 123.123.123.123 --user = उपयोगकर्ता नाम --password = p @ ssw0rd --add-drop-table databasename | mysql --user = username --password = p @ ssw0rd -h localhost localdatabase> output.log

निम्नलिखित को भी आज़माया, लेकिन इसने डेटाबेस की जानकारी को आउटपुट डेटा पर पुनर्निर्देशित कर दिया। टारगेट डेटबसे के बजाय:

mysqldump -alv -h 123.123.123.123 --user=username --password=p@ssw0rd --add-drop-table databasename > output.log | mysql --user=username --password=p@ssw0rd -h localhost localdatabase

और मैं किसी भी प्रकार का --log-file=FILEविकल्प नहीं देखता mysqldump

जवाबों:


9

आपका 1 mysqldump तालिका संरचना और INSERTs बनाता है और इसे डंप .sql में डालता है।

आपका दूसरा डंप एक रिमोट डंप है जिसे सीधे लोकलहोस्ट में mysql में पाइप किया जाता है।

यदि आप त्रुटियों के आधार पर किसी भी आउटपुट को पकड़ने की कोशिश कर रहे हैं, तो यह कोशिश करें:

mysqldump -alv -h 123.123.123.123 --user=username --password=p@ssw0rd --add-drop-table databasename 2> output.log | mysql --user=username --password=p@ssw0rd -h localhost localdatabase

का उपयोग 2>कर किसी भी त्रुटि आधारित उत्पादन (उर्फ stderr) को पकड़ लेगा। Mysqldump को अभी भी अन्य mysql सत्र में सामान्य कंसोल आउटपुट (उर्फ स्टडआउट) को पाइप करना चाहिए और डेटा को उद्देश्य से लोड करना चाहिए।

उदाहरण: मेरे पास एक छोटा डेटाबेस है जिसे मेरे पीसी पर नमूना कहा जाता है।

मैंने इसे चलाया:

C:\LWDBA>mysqldump -u... -p... --verbose sample 2>sample.txt > sample.sql

C:\LWDBA>type sample.txt
-- Connecting to localhost...
-- Retrieving table structure for table users...
-- Sending SELECT query...
-- Retrieving rows...
-- Disconnecting from localhost...

C:\LWDBA>type sample.sql
-- MySQL dump 10.13  Distrib 5.5.12, for Win64 (x86)
--
-- Host: localhost    Database: sample
-- ------------------------------------------------------
-- Server version       5.5.12-log

/*!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 `users`
--

DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `users_tbl_points` int(11) NOT NULL,
  `users_tbl_rank` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `users_tbl_points` (`users_tbl_points`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `users`
--

LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,785523,9),(2,443080,20),(3,858830,7),(4,964909,3),(5,248056,24),
(6,345553,21),(7,983596,2),(8,881325,6),(9,455836,19),(10,635204,16),(11,808514,8),
(12,136960,28),(13,259255,22),(14,885399,5),(15,649229,15),(16,589948,18),(17,2055,30),
(18,240429,25),(19,195981,26),(20,258620,23),(21,705158,12),(22,749931,11),(23,634182,17),
(24,921117,4),(25,703038,13),(26,751842,10),(27,650093,14),(28,994943,1),(29,24437,29),
(30,137355,27);
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;
/*!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 2012-03-02 15:49:54

C:\LWDBA>

कोशिश करो !!!


धन्यवाद कि महान काम किया। के 2>बजाय का उपयोग करना >महत्वपूर्ण था। उस 2 का वास्तव में क्या मतलब है? मैंने सोचा था कि 2>आप stderrलिनक्स में आउटपुट नहीं कर रहे थे ...
जेक विल्सन

2> stderr है। मुझे लगता है कि MySQL (एह ओरेकल [यह कहते हुए नफरत है]) का मतलब है - स्टेटस आउटपुट के साथ mysqldump आउटपुट के भ्रम से बचने के लिए stderr पर जाने के लिए।
रोलैंडमाइसीडीडीबीए

3

mysqldump -v stderr स्ट्रीम में आउटपुट करता है, इसलिए आपको इसे पुनर्निर्देशित करने की आवश्यकता है

mysqldump -alv -h 123.123.123.123 --user=username --password=p@ssw0rd --add-drop-table databasename 2> dump.log | mysql --user=username --password=p@ssw0rd -h localhost localdatabase

उदाहरण

 foo@bar: ~ > mysqldump -v -u root mysql > /dev/null 2> output.log
 foo@bar: ~ > cat output.log 
 -- Connecting to localhost...
 -- Retrieving table structure for table columns_priv...
 -- Sending SELECT query...
 -- Retrieving rows...
 -- Retrieving table structure for table db...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.