@@ -41,9 +41,9 @@ func main() {
4141
4242 cliapp .Flags = []cli.Flag {
4343 cli.StringFlag {
44- Name : "config, c" ,
45- Value : defaultConfigPath ,
46- Usage : "Config `FILE` name." ,
44+ Name : "config, c" ,
45+ Value : defaultConfigPath ,
46+ Usage : "Config `FILE` name." ,
4747 EnvVar : "CLICKHOUSE_BACKUP_CONFIG" ,
4848 },
4949 }
@@ -68,6 +68,35 @@ func main() {
6868 },
6969 Flags : cliapp .Flags ,
7070 },
71+ {
72+ Name : "create" ,
73+ Usage : "Create new backup" ,
74+ UsageText : "clickhouse-backup create [-t, --tables=<db>.<table>] <backup_name>" ,
75+ Description : "Create new backup" ,
76+ Action : func (c * cli.Context ) error {
77+ return createBackup (* getConfig (c ), c .Args ().First (), c .String ("t" ))
78+ },
79+ Flags : append (cliapp .Flags ,
80+ cli.StringFlag {
81+ Name : "table, tables, t" ,
82+ Hidden : false ,
83+ },
84+ ),
85+ },
86+ {
87+ Name : "upload" ,
88+ Usage : "Upload backup to remote storage" ,
89+ UsageText : "clickhouse-backup upload [--diff-from=<backup_name>] <backup_name>" ,
90+ Action : func (c * cli.Context ) error {
91+ return upload (* getConfig (c ), c .Args ().First (), c .String ("diff-from" ))
92+ },
93+ Flags : append (cliapp .Flags ,
94+ cli.StringFlag {
95+ Name : "diff-from" ,
96+ Hidden : false ,
97+ },
98+ ),
99+ },
71100 {
72101 Name : "list" ,
73102 Usage : "Print list of backups" ,
@@ -96,6 +125,39 @@ func main() {
96125 },
97126 Flags : cliapp .Flags ,
98127 },
128+ {
129+ Name : "download" ,
130+ Usage : "Download backup from remote storage" ,
131+ UsageText : "clickhouse-backup download <backup_name>" ,
132+ Action : func (c * cli.Context ) error {
133+ return download (* getConfig (c ), c .Args ().First ())
134+ },
135+ Flags : cliapp .Flags ,
136+ },
137+ {
138+ Name : "restore" ,
139+ Usage : "Create schema and restore data from backup" ,
140+ UsageText : "clickhouse-backup restore [--schema] [--data] [-t, --tables=<db>.<table>] <backup_name>" ,
141+ Action : func (c * cli.Context ) error {
142+ return restore (* getConfig (c ), c .Args ().First (), c .String ("t" ), c .Bool ("s" ), c .Bool ("d" ))
143+ },
144+ Flags : append (cliapp .Flags ,
145+ cli.StringFlag {
146+ Name : "table, tables, t" ,
147+ Hidden : false ,
148+ },
149+ cli.BoolFlag {
150+ Name : "schema, s" ,
151+ Hidden : false ,
152+ Usage : "Restore schema only" ,
153+ },
154+ cli.BoolFlag {
155+ Name : "data, d" ,
156+ Hidden : false ,
157+ Usage : "Restore data only" ,
158+ },
159+ ),
160+ },
99161 {
100162 Name : "delete" ,
101163 Usage : "Delete specific backup" ,
@@ -119,6 +181,14 @@ func main() {
119181 },
120182 Flags : cliapp .Flags ,
121183 },
184+ {
185+ Name : "default-config" ,
186+ Usage : "Print default config" ,
187+ Action : func (* cli.Context ) {
188+ PrintDefaultConfig ()
189+ },
190+ Flags : cliapp .Flags ,
191+ },
122192 {
123193 Name : "freeze" ,
124194 Usage : "Freeze tables" ,
@@ -134,80 +204,6 @@ func main() {
134204 },
135205 ),
136206 },
137- {
138- Name : "create" ,
139- Usage : "Create new backup" ,
140- UsageText : "clickhouse-backup create [-t, --tables=<db>.<table>] <backup_name>" ,
141- Description : "Create new backup" ,
142- Action : func (c * cli.Context ) error {
143- return createBackup (* getConfig (c ), c .Args ().First (), c .String ("t" ))
144- },
145- Flags : append (cliapp .Flags ,
146- cli.StringFlag {
147- Name : "table, tables, t" ,
148- Hidden : false ,
149- },
150- ),
151- },
152- {
153- Name : "upload" ,
154- Usage : "Upload backup to remote storage" ,
155- UsageText : "clickhouse-backup upload [--diff-from=<backup_name>] <backup_name>" ,
156- Action : func (c * cli.Context ) error {
157- return upload (* getConfig (c ), c .Args ().First (), c .String ("diff-from" ))
158- },
159- Flags : append (cliapp .Flags ,
160- cli.StringFlag {
161- Name : "diff-from" ,
162- Hidden : false ,
163- },
164- ),
165- },
166- {
167- Name : "download" ,
168- Usage : "Download backup from remote storage" ,
169- UsageText : "clickhouse-backup download <backup_name>" ,
170- Action : func (c * cli.Context ) error {
171- return download (* getConfig (c ), c .Args ().First ())
172- },
173- Flags : cliapp .Flags ,
174- },
175- {
176- Name : "restore-schema" ,
177- Usage : "Create databases and tables from backup metadata" ,
178- UsageText : "clickhouse-backup restore-schema [-t, --tables=<db>.<table>] <backup_name>" ,
179- Action : func (c * cli.Context ) error {
180- return restoreSchema (* getConfig (c ), c .Args ().First (), c .String ("t" ))
181- },
182- Flags : append (cliapp .Flags ,
183- cli.StringFlag {
184- Name : "table, tables, t" ,
185- Hidden : false ,
186- },
187- ),
188- },
189- {
190- Name : "restore-data" ,
191- Usage : "Copy data to 'detached' folder and execute ATTACH" ,
192- UsageText : "clickhouse-backup restore-data [-t, --tables=<db>.<table>] <backup_name>" ,
193- Action : func (c * cli.Context ) error {
194- return restoreData (* getConfig (c ), c .Args ().First (), c .String ("t" ))
195- },
196- Flags : append (cliapp .Flags ,
197- cli.StringFlag {
198- Name : "table, tables, t" ,
199- Hidden : false ,
200- },
201- ),
202- },
203- {
204- Name : "default-config" ,
205- Usage : "Print default config" ,
206- Action : func (* cli.Context ) {
207- PrintDefaultConfig ()
208- },
209- Flags : cliapp .Flags ,
210- },
211207 {
212208 Name : "clean" ,
213209 Usage : "Remove data in 'shadow' folder" ,
@@ -598,6 +594,22 @@ func createBackup(config Config, backupName, tablePattern string) error {
598594 return nil
599595}
600596
597+ func restore (config Config , backupName string , tablePattern string , schemaOnly bool , dataOnly bool ) error {
598+ if schemaOnly || (schemaOnly == dataOnly ) {
599+ err := restoreSchema (config , backupName , tablePattern )
600+ if err != nil {
601+ return err
602+ }
603+ }
604+ if dataOnly || (schemaOnly == dataOnly ) {
605+ err := restoreData (config , backupName , tablePattern )
606+ if err != nil {
607+ return err
608+ }
609+ }
610+ return nil
611+ }
612+
601613func restoreData (config Config , backupName string , tablePattern string ) error {
602614 if backupName == "" {
603615 fmt .Println ("Select backup for restore:" )
0 commit comments