当然,您可以使用 docker cp
命令来在 Docker 容器和宿主机之间复制文件,而不需要重启您的 Docker 容器。这是一个简单有效的方法来备份和恢复数据。首先,确保在宿主机和 Docker 容器内都创建了相应的备份目录。
-
在宿主机上创建备份目录:
mkdir -p ~/clickhouse_backup
-
在 Docker 容器内创建备份目录:
docker exec $CONTAINER_ID mkdir -p /clickhouse_backup
-
在 Docker 容器内备份数据到容器内的目录:
docker exec $CONTAINER_ID bash -c "clickhouse-client -d data_emailflow_ai --query 'SELECT * FROM eflowdb FORMAT TSV' > /clickhouse_backup/eflowdb_backup_$(date +%Y%m%d_%H%M).tsv"
-
在 Docker 容器内备份表结构到容器内的目录:
docker exec $CONTAINER_ID bash -c "clickhouse-client -d data_emailflow_ai --query 'SHOW CREATE TABLE eflowdb' > /clickhouse_backup/eflowdb_structure_$(date +%Y%m%d_%H%M).sql"
-
从 Docker 容器复制备份文件到宿主机:
docker cp $CONTAINER_ID:/clickhouse_backup/. ~/clickhouse_backup
-
从宿主机复制备份文件到 Docker 容器:
docker cp ~/clickhouse_backup/your_backup_filename.tsv $CONTAINER_ID:/clickhouse_backup/ docker cp ~/clickhouse_backup/your_backup_filename.sql $CONTAINER_ID:/clickhouse_backup/
-
在 Docker 容器内恢复数据:
docker exec $CONTAINER_ID bash -c "clickhouse-client -d data_emailflow_ai --query '$(cat /clickhouse_backup/your_backup_filename.sql)'" docker exec $CONTAINER_ID bash -c "clickhouse-client -d data_emailflow_ai --query 'INSERT INTO eflowdb FORMAT TSV' < /clickhouse_backup/your_backup_filename.tsv"
替换 your_backup_filename
为您实际的备份文件名。
- 在执行这些操作之前,请确保您具有相应的权限。
- 在执行恢复操作之前,请确保您完全了解备份文件的内容,以防数据丢失或损坏。
- 请根据实际情况调整命令中的日期和时间格式,以匹配您的备份文件名。
- 如果您对 Docker 或 ClickHouse 的操作不熟悉,建议在执行这些操作之前咨询相关专家。