ClickHouse备份方案

一只会飞的鱼儿 6月前 ⋅ 2298 阅读
ad

ClickHouse备份方案主要包括以下几种方法:

一、使用clickhouse-backup工具

(参考地址:https://blog.csdn.net/qq_43510111/article/details/136570850)

  • 安装与配置:首先从GitHub获取clickhouse-backup工具并按照文档进行安装配置。这个工具由Altinity维护,支持全量备份、增量备份、恢复、备份加密、备份验证等功能。
  • 全量备份:使用clickhouse-backup create命令创建一个全量备份,该命令会备份所有数据和元数据。
  • 增量备份:使用clickhouse-backup create --incremental命令创建增量备份,仅备份自上次备份以来变化的数据。
  • 恢复数据:使用clickhouse-backup restore命令恢复数据,可以选择恢复到特定的备份点。

二、ALTER TABLE … FREEZE PARTITION

  • ClickHouse原生支持使用ALTER TABLE … FREEZE PARTITION命令来创建表分区的本地副本。这是一种在线备份的方式,不会影响表的正常使用,但需要手动管理备份文件,并且更适合小规模或特定场景下的备份需求。

三、手动导出数据

  • 可以使用如ALTER TABLE table_name EXPORT TO 'path/to/backup_file' PARTITION BY 'column_name' WITH (ONLINE = 1);这样的SQL命令导出数据。这种方式提供了在线备份的能力,适合小规模数据或部分数据的备份。

四、复制(Replication)

  • 虽然复制主要用于高可用而非备份,但在ClickHouse中配置副本(Replica)可以在一定程度上保护数据免受单点故障的影响。不过,副本并不能防止因误操作导致的数据丢失,因此仍需配合上述备份方案。

选择备份方案时,应根据实际业务需求、数据量大小、RTO(恢复时间目标)和RPO(恢复点目标)等因素综合考虑。对于大规模生产环境,通常推荐使用clickhouse-backup工具进行自动化备份管理,因为它提供了更全面的功能和更好的灵活性。同时,结合ClickHouse的复制功能,可以进一步增强数据的可靠性和可用性。

五、下面对clickhouse-backup的远程备份进行说明:

clickhouse-backup 是一个用于 ClickHouse 数据库备份和恢复的工具,它支持多种云和非云存储类型的备份。尽管 clickhouse-backup 主要设计用于在本地进行备份和恢复操作,但它可以通过将备份文件上传到远程存储服务来实现远程备份的目的。以下是使用 clickhouse-backup 实现远程备份的一般步骤:

1.安装 clickhouse-backup:确保你已经在 ClickHouse 服务器上安装了 clickhouse-backup。你可以通过 GitHub 上的项目页面(https://github.com/Altinity/clickhouse-backup)获取最新的安装指南。

   下载安装包

cd /server/tools
wget https://github.com/Altinity/clickhouse-backup/releases/download/v2.5.17/clickhouse-backup-linux-amd64.tar.gz

创建存放clickhouse-backup的目录,并解压

mkdir -pv /data/clickhouse-backup
tar xvf clickhouse-backup-linux-amd64.tar.gz -C /data/clickhouse-backup/

创建软连接

ln -sv /data/clickhouse-backup/build/linux/amd64/clickhouse-backup /usr/local/bin

测试clickhouse-backup命令

clickhouse-backup -v

创建配置文件

#注意:下面的配置文件是按本地标准来的,配置文件中默认data_path:"/var/lib/clickhouse",如果clickhouse-server存储数据的路径变了,这个地方也需要加上data_path
mkdir -p /etc/clickhouse-backup/
cd /etc/clickhouse-backup/
vim config.yml
general:
  remote_storage: none
  backups_to_keep_local: 7 # 本地备份保留个数,默认0表示不自动做备份清理
  backups_to_keep_remote: 31 # 远程备份保留个数
clickhouse:
  username: default
  password: "XXXXXX"
  host: localhost
  port: 9000
  #data_path: "/var/lib/clickhouse"

 

2.配置远程存储:根据你的远程存储类型(例如 Amazon S3、Google Cloud Storage、FTP、Azure Blob 等),在 clickhouse-backup 的配置文件中设置相应的凭证和连接信息。配置文件通常位于 /etc/clickhouse-backup/config.yml,并且包含用于指定存储类型的设置。

3.创建备份:使用 clickhouse-backup 创建一个本地备份。例如,运行以下命令来创建一个全库备份:

clickhouse-backup create full_backup_name

4.上传备份到远程存储:使用 clickhouse-backup 提供的上传命令将创建的备份上传到远程存储。具体的命令格式取决于你的配置和所选的存储类型,一般形式可能是:

clickhouse-backup upload full_backup_name

    这个命令会根据配置文件中的设置,将备份文件上传到指定的远程存储位置。

  5.验证备份:在备份上传完成后,检查远程存储上是否成功接收到了备份文件,确保备份是完整且可访问的。

  6.清理本地备份(可选):如果存储空间有限,你可能希望在成功上传备份后从本地删除备份,可以通过 clickhouse-backup remove 命令实现。

请注意,虽然 clickhouse-backup 支持多种存储类型,但在使用前务必确认你的 ClickHouse 服务器能够访问目标存储服务,并且已正确配置了必要的网络连接和认证信息。此外,定期检查备份的完整性以及备份策略的有效性对于灾难恢复计划至关重要。

完整的yml配置文件方式如下:

general:
  remote_storage: sftp   # 通过sftp,上传到远程服务器的话,需要这个参数,否则为none
  max_file_size: 1099511627776
  disable_progress_bar: false
  backups_to_keep_local: 2   # 本地备份的个数,大于2则自动删除旧的备份,默认为0,不删除备份
  backups_to_keep_remote: 2  # 远程备份的个数
  log_level: info
  allow_empty_backups: false
clickhouse:
  username: default    # 本地clickhouse的连接参数
  password: ""
  host: localhost
  port: 9010
  disk_mapping: {}
  skip_tables:
  - system.*
  - db.*
  - information_schema.*
  - INFORMATION_SCHEMA.*
  timeout: 5m
  freeze_by_part: false
  secure: false
  skip_verify: false
  sync_replicated_tables: true
  skip_sync_replica_timeouts: true
  log_sql_queries: false
s3:
  access_key: ""
  secret_key: ""
  bucket: ""
  endpoint: ""
  region: us-east-1
  acl: private
  force_path_style: false
  path: ""
  disable_ssl: false
  part_size: 536870912
  compression_level: 1
  compression_format: tar
  sse: ""
  disable_cert_verification: false
  storage_class: STANDARD
gcs:
  credentials_file: ""
  credentials_json: ""
  bucket: ""
  path: ""
  compression_level: 1
  compression_format: tar
cos:
  url: ""
  timeout: 2m
  secret_id: ""
  secret_key: ""
  path: ""
  compression_format: tar
  compression_level: 1
api:
  listen: localhost:7171
  enable_metrics: true
  enable_pprof: false
  username: ""
  password: ""
  secure: false
  certificate_file: ""
  private_key_file: ""
  create_integration_tables: false
ftp:
  address: ""
  timeout: 2m
  username: ""
  password: ""
  tls: false
  path: ""
  compression_format: tar
  compression_level: 1
sftp:
  address: "host"
  port: 端口号
  username: "用户名"
  password: "密码"
  key: ""
  path: "/home/data_dev/clickhouse_backup"   # 上传文件到远程服务器的路径
  compression_format: tar
  compression_level: 1
azblob:
  endpoint_suffix: core.windows.net
  account_name: ""
  account_key: ""
  sas: ""
  container: ""
  path: ""
  compression_level: 1
  compression_format: tar
  sse_key: ""

 

先备份一个表如下操作:

clickhouse-backup create  -t webfunny_db_clickhouse.config ch_config_20240617

然后上传到远程服务器上:

clickhouse-backup upload ch_config_20240617

config.yml配置如下:这个文件目录在安装目前下

备份到服务器目录:/var/lib/clickhouse,是clickhouse数据库安装目录