Lâu rồi mới xuất bản bài mới, khả năng viết ngày càng kém đi rồi :)))
Sài Gòn nay lại mưa, ngồi nhâm nhi ly cafe, mình lại rảnh rỗi đem laptop ra ngồi viết lách chém gió xíu đây, kakaka…
1. Giới thiệu
Influxdb là mã nguồn mở cơ sở dữ liệu hình thức time series, nó nằm trong bộ TICK (Telegraf, InfluxDB, Chronograf, Kapacitor), được viết bởi ngôn ngữ Go và được tối ưu về tốc độ, độ sẵn sàng lưu trữ cao, truy xuất theo chuổi thời gian thực vì vậy thích hợp với các giám sát, số liệu, IoT sensor data…
Mình làm trong lĩnh vực IoT, nên may mắn được tiếp xúc với influxdb, thực ra trong bộ TICK mình cũng chỉ mới biết có influxdb và Chronograf mà thôi, trong bài này mình không đi sâu vào lý thuyết mà sẽ hướng dẫn các bạn cách backup database từ một host và restore lại ở một host khác. Cùng mình theo dõi bài hướng dẫn “Influxdb backup restore database” nhé.
2. Backup
- Nếu bạn sử dụng influxdb phiên bản < 1.5, có thể sử dụng backup như sau:
/usr/bin/influxd backup -database <Database Name> <Path to Directory backup>
- Nếu bạn sử dụng influxdb phiên bản > 1.5, nó hỗ trợ bạn sử dụng định dạng backup mới theo hướng tuơng thích với enterprise và tiết kiệm dung lượng lưu trữ hơn, được khuyến khích sử dụng hơn, tất nhiên cách cũ vẫn có thể sử dụng được:
/usr/bin/influxd backup -portable [Option] <path to Directory Backup>
Ví dụ như:
/usr/bin/influxd backup -portable -database <Database name> <path to Directory Backup>
Một số option có hỗ trợ như:
-host <host:port> – Host để connect tới và thực hiện snapshot. Defaults là 127.0.0.1:8088. -database <name> – Database để backup, nếu không chỉ định mặc định là All database. -retention <name> – Retention policy để backup. Optional. -shard <id> – Shard id to backup. Optional. Nếu được chỉ định, -retention sẽ được yêu cầu. -since <2015-12-24T08:12:13Z> – Thực hiện sao lưu kể từ thời gian nhất định. Thời gian cần phải ở định dạng RFC3339. Optional. -start <2020-05-23T06:12:23Z> – Tất cả các point sớm hơn thời gian trên sẽ được bỏ qua. -end <2020-05-23T08:12:23Z> – Tuơng tự, tất cả các point trễ hơn thời gian trên sẽ không lấy. -portable – Tạo backup file ở định dạng tuơng thích với InfluxDB Enterprise.
Ở đây có một điểm bạn cần lưu ý nếu backup theo cách cũ là retetion policy tùy theo bạn cấu hình mà cục backup của mình nhiều hay ít, ví dụ retetion policy bạn cấu hình là 30 ngày, thì cục backup của mình sẽ có 30 cục shard + với metadata.
3. Restore
Để restore một snapshot:
- Với version < 1.5
/usr/bin/influxd restore -metadir <path to meta data> -datadir <path to data> -database <database name> <path to folder backup>
Ví dụ:
influxd restore -metadir /var/db/influxdb/meta -datadir /var/db/influxdb/data -database collectd .
- Với version >= 1.5
influxd restore -portable [Option] <path-to-backup>
Ví dụ:
influxd restore -portable -db tn001r3_metric_db -newdb tn001r3_test_tmp <path-to-backup>
Một số option hỗ trợ như:
-host <host:port> – Host để connect tới và thực hiện snapshot. Defaults là 127.0.0.1:8088. -db <name> – Xác định database name từ backup sẽ được restore. -newdb <name> – Tên của database mà dữ liệu lưu trữ sẽ được import trên hệ thống đích. Nếu không được cung cấp, thì giá trị của -db được sử dụng. Tên cơ sở dữ liệu mới phải là duy nhất cho hệ thống đích. -rp <name> – Xác định retention policy sẽ được restore. yêu cầu -db được chỉ định. -newrp <name> – Tên của retention policy sẽ được tạo ở hệ thống đích. Yêu cầu -rp được sử dụng. Nếu không chỉ định, giá trị của -rp sẽ được sử dụng. -shard <id> – Optional. Nếu chỉ định, -db and -rp được yêu cầu.
4. Bonus (Sử dụng script để tự động hóa tác vụ)
Mình có viết một small script để tự động backup database của influxdb, mục định là sao lưu định kỳ, các bạn có thể tham khảo qua.
#!/bin/sh #Script backup daily influxdb #Source: tritran DATE=`/usr/bin/date +%d%m%y` PATH=/opt/influxdb_backup_daily DB_NAME=$1 echo "$DB_NAME" timestamp=`/usr/bin/date "+%Y-%m-%d %H:%M:%S"` MAIN_BACKUP(){ /usr/bin/mkdir $PATH/$DB_NAME-$DATE /usr/bin/influxd backup -portable -database $DB_NAME $PATH/$DB_NAME-$DATE if [[ $? -eq 0 ]]; then /usr/bin/zip -r $PATH/$DB_NAME-$DATE.zip $PATH/$DB_NAME-$DATE fi /usr/bin/rm -rf $PATH/$DB_NAME-$DATE } MAIN_BACKUP
How to run: ./backup_influxdb.sh <database name>
5. Tổng kết
Mình đã hoàn tất bài hướng dẫn “Influxdb backup restore database”, bài này chưa nói nhiều về lý thuyết cũng như cách hoạt động của influxdb, sẽ hẹn các bạn một ngày không xa. Cám ơn các bạn đã theo dõi.