...
执行以下命令进行同步
代码块 language json POST _snapshot/s3_backup_repository/snapshot-20240917/_restore { "indices": "barnard.0727.uncle_blocks", "ignore_unavailable": true, "include_global_state": false } # 成功 { "acknowledge": true }
查看同步进度,可以通过检查doc的数量与源集群的索引是否一致来判断是否同步完成
代码块 language json GET /barnard.0727.uncle_blocks/_count { "count" : 1109354, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 } }
Postgresql数据库
该部分比较简单,由于数据量较小(1.7G),直接使用 pg_dump 工具将其所有数据直接导出即可,之后可以进行导入。
在进行导出之前,先使用以下脚本先清理掉原来库中的一些数据,避免脏数据影响。注意schemaname
要改成需要的schema 名称以免清理错误。
代码块 | ||
---|---|---|
| ||
DO $$
DECLARE
r RECORD;
BEGIN
-- 禁用所有触发器
SET session_replication_role = 'replica';
-- 开始事务
BEGIN
-- 循环遍历指定schema中的所有表
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = 'barnard')
LOOP
-- 执行TRUNCATE
EXECUTE 'TRUNCATE TABLE barnard' || quote_ident(r.tablename) || ' CASCADE';
END LOOP;
-- 提交事务
COMMIT;
-- 重新启用触发器
SET session_replication_role = 'origin';
END $$; |
此处为了影响最小,写了一个分离程序,将导出的部分拆分成了main和barnard两个schema
代码块 | ||
---|---|---|
| ||
# python postgresql-dump-extractor.py \
# -s barnard \
# -i 576184071779_dump_20240923.sql\
# -o 576184071779_dump_20240923_barnard.sql
import argparse
import re
def extract_copy_statements(input_file, output_file, schema):
with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
copy_block = []
in_copy_block = False
copy_pattern = re.compile(rf'^COPY {re.escape(schema)}\.(\w+)')
for line in infile:
if not in_copy_block:
if copy_pattern.match(line):
in_copy_block = True
copy_block = [line]
else:
copy_block.append(line)
if line.strip() == '\.':
outfile.writelines(copy_block)
outfile.write('\n')
in_copy_block = False
copy_block = []
def main():
parser = argparse.ArgumentParser(description='Extract COPY statements from PostgreSQL dump file.')
parser.add_argument('-i', '--input', required=True, help='Input dump file name')
parser.add_argument('-o', '--output', required=True, help='Output file name')
parser.add_argument('-s', '--schema', required=True, help='Schema name')
args = parser.parse_args()
extract_copy_statements(args.input, args.output, args.schema)
print(f"Extraction complete. Output written to {args.output}")
if __name__ == "__main__":
main() |
运行以下命令可以将其数据分离出来,可以通过psql命令导入
代码块 | ||
---|---|---|
| ||
python postgresql-dump-extractor.py \
-s barnard \
-i 576184071779_dump_20240923.sql\
-o 576184071779_dump_20240923_barnard.sql |