sql backup database备份d盘_ClickHouse 备份与恢复

本文转载自 万能修实验室 作者:公先生 ID: dropudatabase

我们评估一款数据库产品,除了稳定性和易用性外,数据安全也十分重要,备份与恢复往往是最后一道安全门。

但如果备份策略不完善、恢复手段无效,一旦发生数据误删除就真的抢救无效-扑街了。

目前Clickhouse的备份方式有以下几种:

  • 文本文件导入导出

  • 表快照

  • ALTER TABLE…FREEZE

  • 备份工具Clickhouse-Backup

  • Clickhouse-Copier

下面就逐个试试吧。

# 数据备份 概述

https://clickhouse.tech/docs/en/operations/backup/


1. 文本文件导入导出

# 测试数据

MySQL中源数据6.70G,表数据量899万

--测试表数据量899万--MySQL中源数据6.70G0 rows in set. Elapsed: 71.482 sec. Processed 8.99 million rows, 6.70 GB (125.77 thousand rows/s., 93.71 MB/s.)

# 导出

clickhouse-client --query="select * from caihao.ch_test_customer" > /data/clickhouse/tmp/caihao.ch_test_customer.tsv

# 导入 (注意FORMAT后面大写) 多个文件可以用 ch_test*

cat /data/clickhouse/tmp/caihao.ch_test_customer.tsv | clickhouse-client --query="insert into caihao.ch_test_customer FORMAT TSV"

速度:导入需要20多秒

# CH文件磁盘占用 368MB

368     ch_test_customer

# 备份文件3.5G 压缩后139MB

[root@clickhouse-01 tmp]# du -hsm *3539    caihao.ch_test_customer.tsv[root@clickhouse-01 tmp]# gzip caihao.ch_test_customer.tsv[root@clickhouse-01 tmp]# du -hsm *139     caihao.ch_test_customer.tsv.gz

# 对比下占用空间:

  • MySQL -- 6.7G

  • ClickHouse -- 368M

  • 导出文本 -- 3.5G

  • 压缩后 -- 139M

2. CTAS表快照

# 1 本地复制表

clickhouse-01 :) create table ch1  as ch_test_customer ;CREATE TABLE ch1 AS ch_test_customerOk.0 rows in set. Elapsed: 0.006 sec. clickhouse-01 :) insert into table ch1 select * from ch_test_customer ;INSERT INTO ch1 SELECT *FROM ch_test_customerOk.0 rows in set. Elapsed: 18.863 sec. Processed 8.99 million rows, 6.70 GB (476.59 thousand rows/s., 355.13 MB/s.)

# 2 远程复制表

https://clickhouse.tech/docs/en/sql-reference/table-functions/remote/

-# 语法remote('addresses_expr', db, table[, 'user'[, 'password']])remote('addresses_expr', db.table[, 'user'[, 'password']])-# 例子:dba-docker :) insert into table ch1 select * from remote ('10.222.2.222','caihao.ch_test_customer','ch_app','qwerty_123');INSERT INTO ch1 SELECT *FROM remote('10.222.2.222', 'caihao.ch_test_customer', 'ch_app', 'qwerty_123')Ok.0 rows in set. Elapsed: 17.914 sec. Processed 8.99 million rows, 6.70 GB (501.85 thousand rows/s., 373.95 MB/s.)

3. ALTER TABLE…FREEZE

语法:

ALTER TABLE table_name FREEZE [PARTITION partition_expr]

该操作为指定分区创建一个本地备份。

如果 PARTITION 语句省略,该操作会一次性为所有分区创建备份。整个备份过程不需要停止服务

注意:FREEZE PARTITION 只复制数据, 不备份元数据. 元数据默认在文件 /var/lib/clickhouse/metadata/database/table.sql

1. 备份的步骤:

# 确认shadow目录为空:

(默认位置:/var/lib/clickhouse/shadow/)

# OPTIMIZE TABLE 把临时分区的数据,合并到已有分区中

OPTIMIZE TABLE caihao.test_restore_tab PARTITION '2020-10' FINAL;

或者

OPTIMIZE TABLE caihao.test_restore_tab FINAL;

# 让ClickHouse冻结表:

echo -n 'alter table caihao.ch_test_customer freeze' | clickhouse-client

# 备份后的文件

[root@clickhouse-01 shadow]# ll /data/clickhouse/data/shadow/total 8drwxr-x--- 3 clickhouse clickhouse 4096 Oct 16 15:34 1-rw-r----- 1 clickhouse clickhouse    2 Oct 16 15:34 increment.txt[root@clickhouse-01 shadow]# du -hsm *309     11       increment.txt

# 按日期保存备份:

mkdir -p /data/clickhouse/data/backup/20201016/cp -r /data/clickhouse/data/shadow/ /data/clickhouse/data/backup/20201016/

# 最后,为下次备份清理shadow目录:

rm -rf /data/clickhouse/data/shadow/*

2. 手动恢复

从备份中恢复数据,按如下步骤操作:

  1. 如果表不存在,先创建。查看.sql 文件获取执行语句 (将ATTACH 替换成 CREATE).

  2. 从 备份的data/database/table/目录中,将数据复制到 /var/lib/clickhouse/data/database/table/detached/目录

  3. 运行 ALTER TABLE t ATTACH PARTITION操作,将数据添加到表中

测试把数据恢复到一个新表test_restore_tab中

# 1 获取建表语句:

cat /data/clickhouse/data/metadata/caihao/ch_test_customer.sql

然后将DDL语句中的 ATTACH TABLE 改为 CREATE TABLE

# 2 备份复制到表的“ detached”目录中:

cp -rl /data/clickhouse/data/backup/20201016/shadow/1/data/caihao/ch_test_customer/* /data/clickhouse/data/data/caihao/test_restore_tab/detached/chown clickhouse:clickhouse -R /data/clickhouse/data/data/caihao/test_restore_tab/detached/*

# 3 将数据添加到表中 attach partition

echo 'alter table caihao.test_restore_tab attach partition 202010 ' | clickhouse-clientecho 'alter table caihao.test_restore_tab attach partition 202009 ' | clickhouse-client

要把所有分区都执行一遍,最终detached 目录下所有的分区,都移动到了上一目录

# 4 确认数据已还原:

echo 'select count() from caihao.test_restore_tab attach' | clickhouse-clientclickhouse-01 :)  select count(*) from test_restore_tab;SELECT count(*)FROM test_restore_tab┌─count()─┐│ 8990020 │└─────────┘1 rows in set. Elapsed: 0.002 sec. clickhouse-01 :)  select count(*) from ch_test_customer;SELECT count(*)FROM ch_test_customer┌─count()─┐│ 8990020 │└─────────┘1 rows in set. Elapsed: 0.002 sec.

数据量和原表一致

4. Clickhouse-Backup

# Clickhouse-Backup简介

https://github.com/AlexAkulov/clickhouse-backup

# 使用限制:

  • 支持1.1.54390以上的ClickHouse

  • 仅MergeTree系列表引擎

  • 不支持备份Tiered storage或storage_policy

  • 云存储上的最大备份大小为5TB

  • AWS S3上的parts数最大为10,000

--安装方式1:二进制文件安装

# clickhouse-backup下载:

wget https://github.com/AlexAkulov/clickhouse-backup/releases/download/v0.6.0/clickhouse-backup.tar.gz

# 解压即用

tar -xf clickhouse-backup.tar.gz cd clickhouse-backup / sudo cp clickhouse-backup  /usr/local/bin

--安装方式2:rpm安装:

wget https://github.com/AlexAkulov/clickhouse-backup/releases/download/v0.6.0/clickhouse-backup-0.6.0-1.x86_64.rpmrpm -ivh clickhouse-backup-0.6.0-1.x86_64.rpm

# 查看版本

[root@clickhouse-01 clickhouse-backup]# clickhouse-backup -vVersion:         0.6.0Git Commit:      7d7df1e36575f0d94d330c7bfe00aef7a2100276Build Date:      2020-10-02

# 编辑配置文件:

mkdir -p /etc/clickhouse-backup/vi /etc/clickhouse-backup/config.yml

添加一些基本的配置信息

general:  remote_storage: none  backups_to_keep_local: 7  backups_to_keep_remote: 31clickhouse:  username: default  password: ""  host: localhost  port: 9000  data_path: "/data/clickhouse/data"

# 查看全部默认的配置项

clickhouse-backup default-config

# 查看可备份的表

clickhouse-backup tables

# 创建备份

1. 全库备份

clickhouse-backup create

备份存储在中 $data_path/backup 下,备份名称默认为时间戳,可手动指定备份名称。例如:

clickhouse-backup create ch_bk_20201020

备份包含两个目录:

  • 'metadata'目录: 包含重新创建所需的DDL SQL

  • 'shadow'目录: 包含作为ALTER TABLE ... FREEZE操作结果的数据。

2. 单表备份

语法:

clickhouse-backup create [-t, --tables=.

备份表caihao.ch_test_customer

clickhouse-backup create  -t caihao.ch_test_customer ch_test_customer

3. 备份多个表

clickhouse-backup create  -t caihao.test_restore_tab,caihao.ch1 ch_bak_2tab

# 查看备份文件

[root@clickhouse-01 backup]# clickhouse-backup listLocal backups:- 'test20201019'        (created at 20-10-2020 14:18:40)- 'ch_bk_20201020'      (created at 20-10-2020 14:20:35)- '2020-10-20T06-27-08' (created at 20-10-2020 14:27:08)- 'ch_test_customer'    (created at 20-10-2020 15:17:13)- 'ch_bak_2tab' (created at 20-10-2020 15:33:41)

# 删除备份文件

[root@clickhouse-01 backup]# clickhouse-backup delete local test20201019[root@clickhouse-01 backup]# [root@clickhouse-01 backup]# clickhouse-backup listLocal backups:- 'ch_bk_20201020'      (created at 20-10-2020 14:20:35)- '2020-10-20T06-27-08' (created at 20-10-2020 14:27:08)- 'ch_test_customer'    (created at 20-10-2020 15:17:13)- 'ch_bak_2tab' (created at 20-10-2020 15:33:41)

# 清除shadow下的临时备份文件

[root@clickhouse-01 shadow]#  clickhouse-backup  clean2020/10/20 14:19:13 Clean /data/clickhouse/data/shadow

# 数据恢复

语法:

clickhouse-backup restore 备份名

[root@clickhouse-01 ~]# clickhouse-backup restore  -helpNAME:   clickhouse-backup restore - Create schema and restore data from backupUSAGE:   clickhouse-backup restore [--schema] [--data] [-t, --tables=.
] OPTIONS:   --config FILE, -c FILE                   Config FILE name. (default: "/etc/clickhouse-backup/config.yml") [$CLICKHOUSE_BACKUP_CONFIG]   --table value, --tables value, -t value     --schema, -s                             Restore schema only   --data, -d                               Restore data only

一些参数:

--table 只恢复特定表,可使用正则。

如针对特定的数据库:--table=dbname.*

--schema 只还原表结构

--data 只还原数据

# 备份到远程目标

Clickhouse-backup 支持从远程对象存储(例如S3,GCS或IBM的COS)上载和下载备份。

例如 AWS 的 S3, 修改配置文件/etc/clickhouse-backup/config.yml

s3:  access_key:     secret_key:     bucket:     region: us-east-1  path: "/some/path/in/bucket"  

然后即可以上传备份:

$ clickhouse-backup upload 2020-07-06T20-13-022020/07/07 15:22:32 Upload backup '2020-07-06T20-13-02'2020/07/07 15:22:49   Done.

或者下载备份:

$ sudo clickhouse-backup download 2020-07-06T20-13-022020/07/07 15:27:16   Done.

# 备份保留策略

general:下的2个参数来控制备份的保留策略

backups_to_keep_local: 0 # 本地备份保留个数

backups_to_keep_remote: 0 # 远程备份保留个数

默认为0,即不自动做备份清理。

可以设置为:

backups_to_keep_local: 7

backups_to_keep_remote: 31

使用clickhouse-backup upload 上传备份可以使用参数 --diff-from

将文件与以前的本地备份进行比较,仅上载新的/更改的文件。

必须保留先前的备份,以便从新备份中进行还原。

# 备份恢复测试:

测试库有3张表,数据量一样

dba-docker :) show tables;SHOW TABLES┌─name─┐│ ch1  │  # 数据量 8990020│ ch2  │  # 数据量 8990020│ ch3  │  # 数据量 8990020└──────┘

做个备份:bk_3_tab

clickhouse-backup create bk_3_tab

进行数据破坏:

truncate table ch1;insert into ch2 select * from ch3;drop table ch3;

此时的数据量

dba-docker :) show tables;SHOW TABLES┌─name─┐│ ch1  │ # 数据量 0│ ch2  │ # 数据量 8990020*2=17980040└──────┘ # ch3被drop

只使用 --schema 恢复ch3表的表结构

clickhouse-backup restore bk_3_tab -table caihao.ch3  --schema

只有表结构,没数据

dba-docker :) select count(*) from ch3;SELECT count(*)FROM ch3┌─count()─┐│       0 │└─────────┘

用 --data 恢复ch3表中数据

(注意,由于是ATTACH PART操作,如果执行2次的话,数据会翻倍)

clickhouse-backup restore bk_3_tab -table caihao.ch3  --data

数据已导入

dba-docker :) select count(*) from ch3;SELECT count(*)FROM ch3┌─count()─┐│ 8990020 │└─────────┘

恢复其他表:

[root@dba-docker ~]# clickhouse-backup restore bk_3_tab 2020/10/20 17:42:37 Create table 'caihao.ch1'2020/10/20 17:42:37 can't create table 'caihao.ch1': code: 57, message: Table caihao.ch1 already exists.

由于要新建表,只能把表drop掉才能全库恢复。

直接 drop database,然后全库恢复

clickhouse-backup restore bk_3_tab

验证后数据是全部恢复成功了

dba-docker :) show tables;SHOW TABLES┌─name─┐│ ch1  │ │ ch2  │  │ ch3  │└──────┘
dba-docker :) select count(*) from ch1;
SELECT count(*)FROM ch1┌─count()─┐│ 8990020 │└─────────┘

# 加到每日备份任务中:

mkdir -p /data/clickhouse/scriptsvi /data/clickhouse/scripts/CH_Full_Backup.sh
#!/bin/bashBACKUP_NAME=CH_Full_Backup_$(date +%Y-%m-%dT%H-%M-%S)/usr/bin/clickhouse-backup create $BACKUP_NAME# /usr/bin/clickhouse-backup upload $BACKUP_NAME

由于需要副本环境才能使用,Clickhouse-Copier就不做测试了。

数据库的“后悔药”

备份作为数据库最后的“后悔药”意义十分重大:

没有做备份,小心被删库;

一旦删了库,就要快跑路;

万一被抓住,十五年起步。

所以,如果做不好备份恢复,就苦练跑路甩锅,情况不好,拔腿就跑。

9c8a1e4ffcdb0198d8f38b05cda7d098.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程启动语句的顺序是否决定线程的执行次序。_详细分析 Java 中启动线程的正确和错误方式

start 方法和 run 方法的比较代码演示:/** * * start() 和 run() 的比较 * * * author 踏雪彡寻梅 * version 1.0 * date 2020/9/20 - 16:15 * since JDK1.8 */public class StartAndRunMethod { public static void main(String[] args) { // run 方法演示 // 输出: name: mai…

webgl 游戏_如何选择 WebGL 框架和引擎?

数据可视化Sugar-百度智能云​cloud.baidu.comSugar 是我们从零开始开发的 BI 产品,可以不用写 SQL 制作报表及大屏页面,上半年我们发布了三维场景功能,可以放到大屏中展现:为了实现这个功能,我们调研了大量 WebGL 相关…

java 正则表达式 替换字符串img标签的路径_正则表达式和有限自动机的应用

1. 为什么谈有限自动机时要谈正则表达式?原因是:正则表达式所匹配的所有字符串所构成的语言可以用有限自动机识别。根本原因是:正则集(正则表达式所匹配的所有字符串集合)是由右线性文法(3型文法&#xff0…

14.6 Spring MVC 测试框架(翻译)

14.6 Spring MVC 测试框架(每天翻译一点点) Spring MVC测试框架对 Spring MVC 代码提供一流的测试支持 ,它拥有一个 fluent API ,可以和JUnit, TestNG 或其它任何测试框架协同使用。 此测试框架基于 spring-test 模块的Servlet API mock obje…

html读取本地txt_手机本地电子书籍阅读器 — 静读天下

在早期山寨按键手机流行的年代手机中必装两款软件莫过于Anyview和Opera浏览器了,一个是本地最佳阅读工具另一个是压缩流量访问网页的利器,时过境迁好多人都早以忘记了这些昔日的王者。曾经那帮挑灯夜读看小说的熊孩子都已经长大了,在难得的休…

华为手机丢失定位网站_手机端网站优化要从网站的设计和定位开始入手

移动端网站优化要从网站的设计和定位开始入手,重要的是简洁易用,切忌复杂,令用户搞不明白找不到想用的。对于搜索引擎而言,好的用户访问体验也是排名的最佳标准。下面小编就来分析一下设计对手机端网站优化排名的影响。1、使用规范…

安卓接受后台数据转换解析出错_安卓手机内存越大,速度就会越快?

与非网 2 月 18 日讯,现在安卓手机的内存在产品规划上越来越大,2020 年发布的旗舰手机运行内存已经拓展到惊人的 10GB 以上,而这个运存大小已经超过笔记本主流的 8GB 内存,手机到底需要这么大的内存吗?安卓手机的内存为…

ipv6地址格式_IPV6与IPV4的差异

ipv6相比,我们现在的IPV4,有什么优势,有什么差异IPv6的路由表更小,IPv6的组播支持以及对流的支持增强,IPv6加入了对自动配置的支持,IPv6具有更高的安全性. 与IPV4相比,IPV6具有以下几个优势:IPv6具有更大的地址空间。IPv4中规定IP…

反序列化对象列表发生异常_通过反序列化漏洞,黑客能做什么呢?

在之前的文章中讲解了一个反序列化的例子,我们已经知道,通过反序列化漏洞,黑客可以调用到Runtime.exec()来进行命令执行。换一句话说,黑客已经能够在服务器上执行任意的命令,这就相当于间接掌控了你的服务器&#xff0…

tcl之内容

转载于:https://www.cnblogs.com/chip/p/5847126.html

js密码强度正则表达式_知道这20个前端正则表达式,能让你做项目时少写1000行甚至一万行

正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的…

腾讯视频客户端导出MP4格式

腾讯视频下载下来之后是.qlv格式,这种格式只能使用客户端播放。感觉挺蛋疼的,Mp4好不容易让各种设备都可以统一播放视频了,这样一搞感觉又倒退了几十年,关键的是,有些资源是腾讯独家的,不装客户端就看不了&…

labview项目实例_labview操作者框架

0.引言操作者框架适合于多并行任务的项目。在这样的项目中,多个并行任务之间往往需要相互通信,传统的解决办法是,每个任务一个队列,一个while循环,多任务项目需要在一个程序框图使用多个while,不好看。NI说…

eclipse发布web不带项目名的url

默认发布后访问地址是&#xff1a; http://localhost:8080/huanle/ 要达到的效果是&#xff1a; http://localhost:8080/ 不带项目名的url的好处是&#xff0c;不用再在每个地址前加<% path%>了&#xff1a; &#xff08;很烦有木有&#xff09; 操作方法&#x…

php 随机在文章中添加锚文本_页面SEO优化的锚文本优化概念

SEO优化分为结构优化和页面优化&#xff0c;页面的SEO优化中其中一个重点是锚文本的建设。锚文本的概念就是网站的内部链接&#xff0c;较为常见的就是将文章中的关键词作为锚文本。但在具体建设当中&#xff0c;很多网站对锚文本的处理出现了很多错误。这是因为对锚文本的优化…

eclipse发布web显示异常,清除缓存也无效?

发布的项目突然之间显示就不正常了&#xff0c;清除了n遍缓存&#xff0c;tomcat目录&#xff0c;一点效果都没有&#xff0c;这时候&#xff0c;应该用Dreamweaver检查下页面代码&#xff0c;很可能是你不小心删了点什么。 下面是一个血的教训&#xff0c;浪费了一上午时间&a…

关于NPN和PNP传感器的应用区别(转载)

http://blog.csdn.net/greatwgb/article/details/9120735 PNP与NPN型传感器其实就是利用三极管的饱和和截止&#xff0c;输出两种状态&#xff0c;属于开关型传感器。但输出信号是截然相反的&#xff0c;即高电平和低电平。PNP输出是高电平1&#xff0c;NPN输出的是低电平0。 …

spring security:第一个程序

spring security虽然已经简化了&#xff0c;但配置还是要小心翼翼的。这里运行起第一个spring security程序。 环境&#xff1a; spring 4.2.4spring security 4.0.4 &#xff08;GA&#xff09; 搭建步骤&#xff1a; pom.xml 加入web和config模块&#xff0c;config模块是…

文献引用的标准格式_外语论文文献引用格式—APA Style

APA Style写外语论文时&#xff0c;非常注意引用格式的使用。APA作为常见的论文引用格式之一&#xff0c;常被用于心理学、教育学和社会学科领域。可是你知道APA格式要如何使用&#xff1f;APA格式有哪些要求&#xff1f;下面小编为大家整理一下~什么是APA格式&#xff1f;APA格…

pandas 提取某几列_【科学计算工具二】初识Pandas

和Numpy最大的不同&#xff0c;Pandas的数据有对应的index。一、Series数组Series 是带有标签的一维数组&#xff0c;可以保存任何数据类型&#xff08;整数&#xff0c;字符串&#xff0c;浮点数&#xff0c;Python对象等&#xff09;&#xff0c;轴标签统称为索引创建Series数…