Làm thế nào để đăng nhập đầu ra dài dòng từ mysqldump?


11

Bạn thường lưu đầu ra dài dòng của lệnh Linux như thế này:

# command > output.txt

Nhưng khi bạn sử dụng một lệnh như thế mysqldump, >tùy chọn sẽ xuất kết xuất của các bảng cơ sở dữ liệu sang tệp mong muốn:

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

Nếu bạn thêm -vtùy chọn (dài dòng) vào mysqldump, nó sẽ đưa ra thông tin trợ giúp về những gì lệnh đang làm. Làm cách nào để lưu đầu ra dài dòng này vào một tệp vì >tùy chọn được sử dụng để xuất thông tin bảng cơ sở dữ liệu vào một tệp?

Cụ thể hơn, tôi đang bỏ đầu ra của một cơ sở dữ liệu vào một cơ sở dữ liệu khác như thế này:

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

Tôi đã thử như sau nhưng cuối cùng tập tin trống

mysqldump -alv -h 123.123.123.123 --user = tên người dùng --password = p @ ssw0rd --add-drop-bảng databasename | mysql --user = tên người dùng --password = p @ ssw0rd -h localhost localdatabase> output.log

Cũng đã thử cách sau, nhưng nó đã chuyển hướng thông tin cơ sở dữ liệu đến output.log thay vì cơ sở dữ liệu đích:

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

Và tôi không thấy bất kỳ loại --log-file=FILEtùy chọn nào cho mysqldumpcả hai.

Câu trả lời:


9

Mysqldump đầu tiên của bạn tạo các cấu trúc bảng và INSERT và đặt nó vào dump.sql.

Kết xuất thứ 2 của bạn là kết xuất từ ​​xa được chuyển thẳng vào mysql trong localhost.

Nếu bạn đang cố gắng bắt bất kỳ đầu ra nào dựa trên lỗi, hãy thử điều này:

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

Sử dụng 2>sẽ bắt bất kỳ đầu ra dựa trên lỗi (còn gọi là stderr). Mysqldump vẫn nên chuyển đầu ra giao diện điều khiển bình thường (hay còn gọi là stdout) sang phiên mysql khác và tải dữ liệu theo dự định.

VÍ DỤ: Tôi có một cơ sở dữ liệu nhỏ gọi là mẫu trên PC của tôi.

Tôi chạy cái này:

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>

Hãy thử một lần !!!


Cảm ơn đã làm việc tuyệt vời. Sử dụng 2>thay vì >là chìa khóa. Điều đó có nghĩa chính xác là gì? Tôi nghĩ rằng 2>bạn không xuất hiện stderrtrong Linux ...
Jake Wilson

2> là stderr. Tôi đoán MySQL (eh Oracle [ghét nói rằng]) có nghĩa là --verbose đi đến stderr để tránh nhầm lẫn đầu ra mysqldump với đầu ra trạng thái.
RolandoMySQLDBA

3

mysqldump -v xuất ra luồng stderr để bạn chỉ cần chuyển hướng đó

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

thí dụ

 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...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.