it-swarm.asia

كيفية تسجيل إخراج مطول من mysqldump؟

تقوم عادةً بحفظ الإخراج المطول لأمر Linux على النحو التالي:

# 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 [email protected] --add-drop-table databasename | mysql --user=username [email protected] -h localhost localdatabase

لقد حاولت ما يلي ولكن ملف الإخراج كان فارغًا في النهاية

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> output.log

جربت أيضًا ما يلي ، لكنها أعادت توجيه معلومات قاعدة البيانات إلى output.log بدلاً من قاعدة البيانات الهدف:

mysqldump -alv -h 123.123.123.123 --user=username [email protected] --add-drop-table databasename > output.log | mysql --user=username [email protected] -h localhost localdatabase

ولا أرى أي نوع من --log-file=FILE خيار mysqldump إما.

11
Jake Wilson

يقوم mysqldump الأول الخاص بك بعمل هياكل الجدول وإدراجها ووضعها في dump.sql.

المكب الثاني الخاص بك هو مكب بعيد يتم توصيله مباشرة إلى الخلية في المضيف المحلي.

إذا كنت تحاول التقاط أي مخرجات بناءً على أخطاء ، فجرب ما يلي:

mysqldump -alv -h 123.123.123.123 --user=username [email protected] --add-drop-table databasename 2> output.log | mysql --user=username [email protected] -h localhost localdatabase

باستخدام 2> سوف يلتقط أي إخراج قائم على الخطأ (ويعرف أيضًا باسم stderr). يجب أن يقوم mysqldump بتوجيه إخراج وحدة التحكم العادي (الملقب stdout) إلى جلسة 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 @[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 `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 [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 2012-03-02 15:49:54

C:\LWDBA>

جربها !!!

9
RolandoMySQLDBA

مخرجات mysqldump -v إلى دفق stderr لذلك تحتاج فقط إلى إعادة توجيه ذلك

mysqldump -alv -h 123.123.123.123 --user=username [email protected] --add-drop-table databasename 2> dump.log | mysql --user=username [email protected] -h localhost localdatabase

مثال

 foo[email protected]: ~ > mysqldump -v -u root mysql > /dev/null 2> output.log
 [email protected]: ~ > cat output.log 
 -- Connecting to localhost...
 -- Retrieving table structure for table columns_priv...
 -- Sending SELECT query...
 -- Retrieving rows...
 -- Retrieving table structure for table db...
3
R. S.