Κάποτε κατέστρεψα το DB παραγωγής μου με μια υπνηλία UPDATE και δεν είχα φρέσκα αντίγραφα ασφαλείας. έχασα ~30% των εσόδων, ένα σωρό νεύρα και πάρα πολλές ώρες. Table of content Σχετικά με το Open-Source PostgreSQL Backup Project Η ιστορία του πώς έσπασα το DB και δεν μπόρεσα να ανακάμψω πλήρως Πώς ξεκίνησα να δημιουργώ το project Οδικός χάρτης και μελλοντικά σχέδια Κανόνες ασφαλείας DB που εφαρμόζω τώρα σε κάθε έργο Επανασύνδεση Σχετικά με το Open Source PostgreSQL Backup Project Άνοιξα το δικό μου εργαλείο για την παρακολούθηση και την δημιουργία αντιγράφων ασφαλείας του PostgreSQL. Το χτίζω και το χρησιμοποιώ για λίγο περισσότερο από δύο χρόνια. Μόνο πρόσφατα με χτύπησε ότι το έργο φαίνεται πραγματικά αρκετά καλό για να δείξει δημόσια, βοηθά ήδη τους φίλους μου και θα μπορούσε να είναι χρήσιμο για την κοινότητα. Go, gin, gorm, React, TypeScript, PostgreSQL – όλα τυλιγμένα στο Docker.Η πρώτη έκδοση ήταν σε Java, αλλά την ξαναγράψαμε σε Go με την πάροδο του χρόνου. Stack: Στην ουσία, είναι ένα UI wrapper γύρω από το πρότυπο σε προσαρμοσμένη μορφή, με μια σειρά από πρόσθετα που κάνουν το UX λιγότερο επώδυνο και προσθέτουν ενσωμάτωση με εξωτερικές υπηρεσίες αποθήκευσης και ειδοποιήσεων. pg_dump What it can do: Προγραμματίστε αντίγραφα ασφαλείας (π.χ. κάθε μέρα στις 4 το πρωί ή κάθε Κυριακή τα μεσάνυχτα) για το PostgreSQL 13-17. Αποθηκεύστε συμπιεσμένα αντίγραφα ασφαλείας τοπικά στον διακομιστή, στο S3 ή στο Google Drive (οι διακομιστές NS και FTP βρίσκονται στο οδικό χάρτη). Σας στέλνουμε ένα μήνυμα μετά από κάθε αντίγραφο ασφαλείας ότι όλα είναι εντάξει ... ή όχι. Πινγκ σε Discord, email, Telegram και Slack αν το DB σταματήσει να ανταποκρίνεται. προειδοποιεί μόνο μετά από n αποτυχημένους ελέγχους (για να αποφευχθούν ψευδώς θετικά λόγω διαταραχών δικτύου) και εμφανίζει ένα γράφημα διαθεσιμότητας. Φυσικά, το έργο είναι δωρεάν, ανοιχτού κώδικα (MIT), αυτο-hosted και έρχεται με ένα ανθρώπινο web UI. Ιστοσελίδα του προγράμματος: https://postgresus.com/ https://postgresus.com/ Το Github: https://github.com/RostislavDugin/postgresus https://github.com/RostislavDugin/postgresus P.S. Αν το έργο φαίνεται χρήσιμο και έχετε λογαριασμό GitHub, ⭐️ Τα πρώτα αστέρια είναι πραγματικά τα πιο δύσκολα να πάρουν. I’d really appreciate a Η ιστορία του πώς έσπασα το DB και δεν μπόρεσα να ανακάμψω πλήρως Το 2023 είχα ένα έργο κατοικίδιων ζώων που ήταν ένα περιτύλιγμα του ChatGPT (3.5). Βασικά, ήταν απλά η μεταπώληση της πρόσβασης API με ένα ωραίο UI και συντομεύσεις. Το έργο μεγάλωσε, στη συνέχεια άρχισε να πέφτει και τελικά το πούλησα. σε άλλο server. PgBackRest Την στιγμή που το έργο έφερε περίπου 1.500 δολάρια παθητικά και χτύπησε το αποκορύφωμά του, συνέβη κάτι κακό: . I broke the data in the DB Ήταν μια Παρασκευή βράδυ. ήμουν κουρασμένος, ήμουν αμέσως μετάβαση από την κωδικοποίηση σε μηνύματα απαντώντας, εντελώς μη εστιασμένη. ένας πελάτης μου ζήτησε να αλλάξω το email για το λογαριασμό του. Μέσω του SSH και Έπεσα στο VPS παραγωγής και έγραψα κάτι σαν αυτό: psql UPDATE users SET email = 'customer@email.com' WHERE email ILIKE '%%'; Στη συνέχεια, αποσπάσα την προσοχή μου για να αντιγράψω το σωστό μήνυμα ηλεκτρονικού ταχυδρομείου από τη συνομιλία και... πατήστε το πλήκτρο Εισαγωγή στο "autopilot". . AFFECTED ROWS: 10 000 Ήταν η μόνη φορά σε πολλά, πολλά χρόνια που αισθάνθηκα κυριολεκτικά έναν κρύο ιδρώτα στην πλάτη μου. Φυσικά, ήξερα ότι έπρεπε να είχα κάνει ένα Πρώτον, μπορεί να θέσει ένα Αλλά όπως σε κάθε ιστορία τρόμου, οι βασικοί κανόνες ασφαλείας αγνοήθηκαν και όλα κατέληξαν σε καταστροφή. Disclaimers SELECT SAVEPOINT Όλα τα μηνύματα ηλεκτρονικού ταχυδρομείου των χρηστών υπεγράφησαν.Και εδώ είναι η βασική λεπτομέρεια: τα συστήματα πληρωμών έχουν αυστηρούς κανόνες - αν ένας χρήστης δεν μπορεί να έχει πρόσβαση σε μια πληρωμένη υπηρεσία, αυτό είναι μια τεράστια παραβίαση. Έτρεξα στα αντίγραφα ασφαλείας - και ο κρύος ιδρώτας έγινε ακόμα χειρότερος. το πιο πρόσφατο αντίγραφο ασφαλείας ήταν περίπου ένα μήνα. Δεν υπάρχει τρόπος ανάκτησης από αυτό. Από εκείνη τη στιγμή ήρθαν νέες πληρωμές, ακυρώθηκαν οι συνδρομές (που σημαίνει ότι δεν μπορούσα απλά να επαναφέρω όλους - μερικοί άνθρωποι είχαν ήδη φύγει), κλπ. Κατά κάποιο τρόπο, για το υπόλοιπο της νύχτας και το πρωί, κατάφερα να ανακατασκευάσω περίπου το 65% του DB μέσω σεναρίων χρησιμοποιώντας τα αναγνωριστικά χρηστών. Το μάθημα έχει διδαχθεί. Πώς ξεκίνησα να δημιουργώ το project Χρόνος απόφασης: Θα οικοδομήσω για τον εαυτό μου ένα εργαλείο δημιουργίας αντιγράφων ασφαλείας που θα με ping κάθε μέρα ότι όλα είναι εντάξει! Και να επαναφέρετε σε μερικά κλικ! Και blackjack και microservices! Και θα προσθέσω ένα άκρο ελέγχου υγείας API επίσης! Έκανα την πρώτη έκδοση του Postgresus σε περίπου ένα μήνα στη Java. Άρχισα να το χρησιμοποιώ. Αφήστε μερικούς φίλους να το δοκιμάσουν. Αποδείχθηκε: είναι χρήσιμο. μερικές φορές αυτά τα αντίγραφα ασφαλείας με έσωσαν (και όχι μόνο εμένα). το όνομα "Postgresus" εμφανίστηκε μόνο πριν από δύο μήνες, πριν από το repo απλά ονομάστηκε . «pg-web backup» Προς το παρόν, το Postgresus λύει αυτά τα προβλήματα για μένα: Είναι το κύριο εργαλείο δημιουργίας αντιγράφων ασφαλείας εάν το έργο είναι μικρό ή ζει σε ένα VPS αντί για μια υπηρεσία cloud DB. Είναι το εργαλείο backup fallbackif το έργο είναι μεγάλο και ζει σε ένα DBaaS με τα δικά του cloud backups.It δημιουργεί αντίγραφα ασφαλείας "μόνο σε περίπτωση" (αν το cloud πεθάνει, μπλοκάρεται, το DB διαγράφεται κατά λάθος μαζί με τα cloud backups λόγω μη πληρωμής, κλπ.). Οδικός χάρτης και μελλοντικά σχέδια που σχεδιάζω να ωθήσω το έργο προς αυτές τις κατευθύνσεις: Add more PostgreSQL-specific load monitoring (pg_stat_activity, pg_stat_system, pg_locks) with a friendly UI. Think of it as an alternative to postgres_exporter + Grafana, but bundled out of the box with backups. Observe and alert on slowdown of key queries. In my work project, there are tables and specific functions that are too early to optimize (if the hypothesis fails, we might drop them), but they could grow and slow down. For example, if INSERT INTO users (...) VALUES (...) starts taking more than 100 ms while the flow of new users is growing - we'll get a notification and go optimize. Collect query stats by CPU time and execution frequency to see where resources are actually going and what’s worth improving. Add more channels for notifications and more storage providers. Κανόνες ασφαλείας DB που εφαρμόζω τώρα σε κάθε έργο Επιτρέψτε μου να σας θυμίσω δύο κομμάτια λαϊκής σοφίας: Οι διαχειριστές συστήματος χωρίζονται σε δύο κατηγορίες: εκείνοι που δεν δημιουργούν αντίγραφα ασφαλείας ακόμα και εκείνοι που ήδη το κάνουν. Οι διαχειριστές συστήματος χωρίζονται σε δύο κατηγορίες: εκείνοι που δεν δημιουργούν αντίγραφα ασφαλείας ακόμα και εκείνοι που ήδη το κάνουν. Μην κάνετε μόνο αντίγραφα ασφαλείας - ελέγξτε τακτικά ότι μπορείτε πραγματικά να επαναφέρετε από αυτά. Μην κάνετε μόνο αντίγραφα ασφαλείας - ελέγξτε τακτικά ότι μπορείτε πραγματικά να επαναφέρετε από αυτά. Από τότε που σπαταλάω το DB του έργου μου, έχω υιοθετήσει αυτούς τους κανόνες χωρίς εξαίρεση: Πριν από οποιαδήποτε ενημέρωση, εκτελέστε πάντα μια επιλογή και βεβαιωθείτε ότι αγγίζετε ακριβώς 1-2 γραμμές. Εάν η αλλαγή είναι μεγάλη, ορίστε ένα SAVEPOINT με μη αυτόματο τρόπο. Εκτελέστε «προειδοποιήσεις πυρκαγιάς» με αποκατάσταση τουλάχιστον μία φορά κάθε 3 μήνες: επαναφέρετε από ένα αντίγραφο cloud και από ένα τοπικό αντίγραφο. Τα τελευταία δύο χρόνια υπήρξαν μερικές περιπτώσεις όπου χρειαζόμασταν να ανακτήσουμε από αντίγραφα ασφαλείας – κάθε φορά που λειτούργησε, τόσο στο cloud όσο και μέσω του Postgresus. Επανασύνδεση Ελπίζω ότι αυτό το έργο θα είναι χρήσιμο για ένα ευρύ φάσμα προγραμματιστών, DBAs και DevOps ανθρώπους. σχεδιάζω να συνεχίσω να εξελίσσεται για να γίνει ακόμα πιο χρήσιμο σε πραγματικά σενάρια.