14
14
package main
15
15
16
16
import (
17
- "flag"
18
17
"fmt"
19
18
_ "net/http/pprof"
20
19
"os"
@@ -23,6 +22,7 @@ import (
23
22
"github.com/pingcap/dumpling/v4/cli"
24
23
"github.com/pingcap/dumpling/v4/export"
25
24
"github.com/pingcap/dumpling/v4/log"
25
+ "github.com/spf13/cobra"
26
26
"go.uber.org/zap"
27
27
)
28
28
@@ -38,48 +38,38 @@ var (
38
38
logLevel string
39
39
consistency string
40
40
snapshot string
41
- )
42
-
43
- func init () {
44
- flag .StringVar (& database , "database" , "" , "Database to dump" )
45
- flag .StringVar (& database , "B" , "" , "Database to dump" )
46
-
47
- flag .StringVar (& host , "h" , "127.0.0.1" , "The host to connect to" )
48
- flag .StringVar (& host , "host" , "127.0.0.1" , "The host to connect to" )
49
-
50
- flag .StringVar (& user , "user" , "root" , "Username with privileges to run the dump" )
51
- flag .StringVar (& user , "u" , "root" , "Username with privileges to run the dump" )
52
-
53
- flag .IntVar (& port , "port" , 4000 , "TCP/IP port to connect to" )
54
- flag .IntVar (& port , "P" , 4000 , "TCP/IP port to connect to" )
55
-
56
- flag .StringVar (& password , "password" , "" , "User password" )
57
- flag .StringVar (& password , "p" , "" , "User password" )
58
-
59
- flag .IntVar (& threads , "threads" , 4 , "Number of goroutines to use, default 4" )
60
- flag .IntVar (& threads , "t" , 4 , "Number of goroutines to use, default 4" )
61
-
62
- flag .Uint64Var (& fileSize , "F" , export .UnspecifiedSize , "The approximate size of output file" )
63
- flag .Uint64Var (& fileSize , "filesize" , export .UnspecifiedSize , "The approximate size of output file" )
64
-
65
- flag .StringVar (& outputDir , "output" , defaultOutputDir , "Output directory" )
66
- flag .StringVar (& outputDir , "o" , defaultOutputDir , "Output directory" )
67
-
68
- flag .StringVar (& logLevel , "loglevel" , "info" , "Log level: {debug|info|warn|error|dpanic|panic|fatal}" )
69
41
70
- flag .StringVar (& consistency , "consistency" , "auto" , "Consistency level during dumping: {auto|none|flush|lock|snapshot}" )
71
-
72
- flag .StringVar (& snapshot , "snapshot" , "" , "Snapshot position. Valid only when consistency=snapshot" )
73
- }
42
+ rootCmd = & cobra.Command {
43
+ Use : "dumpling" ,
44
+ Short : "A tool to dump MySQL/TiDB data" ,
45
+ Long : `Dumpling is a CLI tool that helps you dump MySQL/TiDB data` ,
46
+ Run : func (cmd * cobra.Command , args []string ) {
47
+ run ()
48
+ },
49
+ }
50
+ )
74
51
75
52
var defaultOutputDir = timestampDirName ()
76
53
77
54
func timestampDirName () string {
78
55
return fmt .Sprintf ("./export-%s" , time .Now ().Format (time .RFC3339 ))
79
56
}
80
57
81
- func main () {
82
- flag .Parse ()
58
+ func init () {
59
+ rootCmd .PersistentFlags ().StringVarP (& database , "database" , "B" , "" , "Database to dump" )
60
+ rootCmd .PersistentFlags ().StringVarP (& host , "host" , "H" , "127.0.0.1" , "The host to connect to" )
61
+ rootCmd .PersistentFlags ().StringVarP (& user , "user" , "u" , "root" , "Username with privileges to run the dump" )
62
+ rootCmd .PersistentFlags ().IntVarP (& port , "port" , "P" , 4000 , "TCP/IP port to connect to" )
63
+ rootCmd .PersistentFlags ().StringVarP (& password , "password" , "p" , "" , "User password" )
64
+ rootCmd .PersistentFlags ().IntVarP (& threads , "threads" , "t" , 4 , "Number of goroutines to use, default 4" )
65
+ rootCmd .PersistentFlags ().Uint64VarP (& fileSize , "filesize" , "F" , export .UnspecifiedSize , "The approximate size of output file" )
66
+ rootCmd .PersistentFlags ().StringVarP (& outputDir , "output" , "o" , defaultOutputDir , "Output directory" )
67
+ rootCmd .PersistentFlags ().StringVar (& logLevel , "loglevel" , "info" , "Log level: {debug|info|warn|error|dpanic|panic|fatal}" )
68
+ rootCmd .PersistentFlags ().StringVar (& consistency , "consistency" , "auto" , "Consistency level during dumping: {auto|none|flush|lock|snapshot}" )
69
+ rootCmd .PersistentFlags ().StringVar (& snapshot , "snapshot" , "" , "Snapshot position. Valid only when consistency=snapshot" )
70
+ }
71
+
72
+ func run () {
83
73
println (cli .LongVersion ())
84
74
85
75
err := log .InitAppLogger (& log.Config {Level : logLevel })
@@ -105,3 +95,7 @@ func main() {
105
95
}
106
96
return
107
97
}
98
+
99
+ func main () {
100
+ rootCmd .Execute ()
101
+ }
0 commit comments