Bagaimana cara mencatat keluaran verbose dari mysqldump?

11

Anda biasanya menyimpan output verbose dari perintah Linux seperti ini:

# command > output.txt

Tetapi ketika Anda menggunakan perintah like mysqldump, >opsi output dump dari tabel database ke file yang diinginkan:

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

Jika Anda menambahkan opsi -v(verbose) ke mysqldump, itu output informasi bantuan tentang apa yang dilakukan perintah. Bagaimana cara menyimpan output verbose ini ke file karena >opsi ini digunakan untuk menampilkan informasi tabel database ke file?

Lebih khusus lagi, saya membuang output dari satu database ke database lain seperti ini:

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

Saya mencoba yang berikut tetapi file output pada akhirnya kosong

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

Juga mencoba yang berikut ini, tetapi mengalihkan informasi database ke output.log alih-alih databse target:

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

Dan saya juga tidak melihat --log-file=FILEopsi apa pun mysqldump.

Jake Wilson
sumber

Jawaban:

9

Mysqldump pertama Anda membuat struktur tabel dan INSERT dan meletakkannya di dump.sql.

Dump kedua Anda adalah dump jarak jauh yang disalurkan langsung ke mysql di localhost.

Jika Anda mencoba menangkap output apa pun berdasarkan kesalahan, coba ini:

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

Menggunakan 2>akan menangkap output berbasis kesalahan (alias stderr). Mysqldump masih harus menyalurkan output konsol normal (alias stdout) ke sesi mysql lainnya dan memuat data sebagaimana dimaksud.

CONTOH: Saya memiliki database kecil yang disebut sampel di PC saya.

Saya menjalankan ini:

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>

Cobalah !!!

RolandoMySQLDBA
sumber
Terima kasih itu berhasil. Menggunakan 2>alih-alih >adalah kuncinya. Apa artinya itu? Saya pikir tidak berarti 2>Anda memproduksi stderrdi Linux ...
Jake Wilson
2> adalah stderr. Saya kira MySQL (eh Oracle [benci mengatakan itu]) berarti --verbose untuk pergi ke stderr untuk menghindari kebingungan output mysqldump dengan output status.
RolandoMySQLDBA
3

mysqldump -v output ke aliran stderr sehingga Anda hanya perlu mengarahkan ulang itu

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

contoh

 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...
RS
sumber