Sebaik sahaja saya memusnahkan DB pengeluaran saya dengan UPDATE yang mengantuk dan tidak mempunyai cadangan baru. kehilangan ~30% pendapatan, sekumpulan saraf dan terlalu banyak jam. kesakitan itu mendorong saya untuk membina dan open-source alat cadangan dan pemantauan PostgreSQL yang kini saya gunakan di mana-mana. Table of content Tentang projek cadangan sumber terbuka PostgreSQL Kisah bagaimana saya patah DB dan tidak dapat pulih sepenuhnya Bagaimana saya mula membina projek Roadmap & Rancangan Masa Depan peraturan keselamatan DB yang kini saya mematuhi pada setiap projek Wrap-up Tentang projek cadangan sumber terbuka PostgreSQL Saya membuka sumber alat saya sendiri untuk memantau dan menyokong PostgreSQL. Saya telah membina dan menggunakannya selama sedikit lebih dua tahun. Pada mulanya, saya telah membangunkan untuk kerja hari saya dan beberapa projek haiwan kesayangan. Hanya baru-baru ini ia menjejaskan saya bahawa projek sebenarnya kelihatan cukup baik untuk menunjukkan secara awam, ia sudah membantu rakan-rakan saya dan boleh berguna untuk komuniti. Go, gin, gorm, React, TypeScript, PostgreSQL — semuanya dibungkus dalam Docker. Versi pertama adalah dalam Java, tetapi saya menuliskannya semula ke Go dari masa ke masa. Stack: Pada asasnya, ia adalah wrapper UI di sekitar standard dalam format tersuai, dengan banyak tambahan yang menjadikan UX kurang menyakitkan dan menambah integrasi dengan perkhidmatan storan dan pemberitahuan luaran. pg_dump What it can do: Melancarkan cadangan (contohnya, setiap hari pada jam 4 pagi atau setiap hari Ahad pada tengah malam) untuk PostgreSQL 13–17. Simpan cadangan yang dikompres secara tempatan di pelayan, di S3 atau Google Drive (pelayan NS dan FTP berada pada peta jalan). Hantar mesej kepada anda selepas setiap cadangan bahawa segala-galanya baik-baik saja ... atau tidak. Ping anda dalam Discord, e-mel, Telegram dan Slack jika DB berhenti bertindak balas. ia hanya memberi amaran selepas n pemeriksaan gagal (untuk mengelakkan positif palsu disebabkan kesilapan rangkaian) dan memaparkan grafik ketersediaan. Sudah tentu, projek ini adalah percuma, sumber terbuka (MIT), self-hosted dan dilengkapi dengan UI web manusia. Laman web projek : https://postgresus.com/ https://postgresus.com/ daripada GitHub: https://github.com/RostislavDugin/postgresus https://github.com/RostislavDugin/postgresus P.S. Jika projek ini kelihatan berguna dan anda mempunyai akaun GitHub, Bintang pertama ialah yang paling sukar untuk diperolehi. I’d really appreciate a Kisah bagaimana saya patah DB dan tidak dapat pulih sepenuhnya Pada tahun 2023, saya mempunyai projek haiwan kesayangan yang merupakan kemasan ChatGPT (3.5). Pada asasnya, ia hanya menjual semula capaian API dengan UI yang bagus dan pendekatan. Projek itu tumbuh, kemudian mula turun dan saya akhirnya menjualnya. kepada pelayan lain. PgBackRest Pada masa ketika projek itu membawa kira-kira $ 1,500 secara pasif dan mencapai puncak pendapatan, sesuatu yang buruk berlaku: . I broke the data in the DB Ia adalah malam Jumaat. saya letih, saya segera beralih daripada pengkodean kepada mesej menjawab, benar-benar tidak memberi tumpuan. Melalui SSH dan Saya melompat ke dalam VPS pengeluaran dan mengetik sesuatu seperti: psql UPDATE users SET email = 'customer@email.com' WHERE email ILIKE '%%'; Kemudian saya terganggu untuk menyalin e-mel yang betul daripada chat dan... ketik Enter pada “autopilot”. . AFFECTED ROWS: 10 000 Itu merupakan satu-satunya kali dalam bertahun-tahun saya secara harfiah merasakan keringat sejuk di belakang saya. : tentu saja, saya tahu saya perlu melakukan a Pertama, anda boleh menetapkan a Tetapi seperti dalam setiap kisah horor, peraturan keselamatan asas diabaikan, dan semuanya menjadi bencana. Disclaimers SELECT SAVEPOINT Semua e-mel pengguna telah ditulis berlebihan.Dan di sini adalah butiran utama: sistem pembayaran mempunyai peraturan yang ketat - jika pengguna tidak boleh mengakses perkhidmatan berbayar, itu merupakan pelanggaran besar. Saya berlari ke cadangan - dan berpeluh sejuk menjadi lebih teruk. cadangan terkini adalah kira-kira sebulan 😐. Tiada cara untuk memulihkan daripada itu. Dari masa itu pembayaran baru datang, langganan dibatalkan (iaitu saya tidak boleh memulihkan semua orang - sesetengah orang telah pergi), dan lain-lain. Entah bagaimana, sepanjang sisa malam dan pagi, saya berjaya membina semula kira-kira 65% DB melalui skrip menggunakan ID pengguna. Untuk sisanya, saya terpaksa membatalkan langganan dan mengembalikan orang. Pelajaran telah dipelajari. Bagaimana saya mula membina projek Masa keputusan: Saya akan membina diri saya alat cadangan yang akan ping saya setiap hari bahawa semuanya baik-baik sahaja! Dan memulihkan dalam beberapa klik! Dan blackjack dan microservices! Dan saya akan menambah titik akhir pemeriksaan kesihatan API juga! Saya membuat versi pertama Postgresus dalam kira-kira sebulan dalam Java. mula menggunakannya. biarkan beberapa rakan-rakan mencuba. Ternyata: ia berguna. beberapa kali cadangan itu menyelamatkan saya (dan bukan sahaja saya). Nama "Postgresus" hanya muncul dua bulan yang lalu, sebelum repo hanya dipanggil . “pg-web-backup” yang boleh digunakan Pada masa ini, Postgresus menyelesaikan masalah ini untuk saya: Ia adalah alat cadangan utama jika projek itu kecil atau hidup pada VPS bukannya perkhidmatan cloud DB. Ia adalah alat cadangan backback jika projek itu besar dan hidup dalam DBaaS dengan cadangan awan sendiri.Ia menyimpan "hanya dalam kes" (jika awan mati, disekat, DB disingkirkan secara tidak sengaja bersama dengan cadangan awan kerana tidak membayar, dan lain-lain).Ia sentiasa lebih baik untuk mempunyai cadangan duplikat daripada berakhir dalam 0.01% yang tidak bernasib baik apabila walaupun awan hilang dan tiada Rencana B. Roadmap & rancangan masa depan saya merancang untuk mendorong projek ini ke arah berikut: 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. peraturan keselamatan DB yang kini saya mematuhi pada setiap projek Saya mahu mengingatkan anda dua bahagian kebijaksanaan rakyat: Pentadbir sistem terbahagi kepada dua kategori: mereka yang belum membuat cadangan dan mereka yang sudah melakukannya. Pentadbir sistem terbahagi kepada dua kategori: mereka yang belum membuat cadangan dan mereka yang sudah melakukannya. Jangan hanya membuat cadangan - menguji secara teratur bahawa anda sebenarnya boleh memulihkan daripada mereka. Jangan hanya membuat cadangan - menguji secara teratur bahawa anda sebenarnya boleh memulihkan daripada mereka. Sejak membuang DB projek saya, saya telah mengamalkan peraturan ini tanpa pengecualian: Sebelum apa-apa UPDATE, sentiasa menjalankan SELECT dan pastikan anda menyentuh tepat 1-2 baris. Jika perubahan yang besar - tetapkan SAVEPOINT secara manual. Lakukan "alarm kebakaran" dengan pemulihan sekurang-kurangnya sekali setiap 3 bulan: memulihkan daripada salinan awan dan daripada lokal. jadi apabila ia penting, anda tidak mendapati tiada data, cadangan tidak berfungsi, atau pemulihan mengambil masa untuk selamanya. Dalam dua tahun kebelakangan ini, terdapat beberapa kes di mana kami perlu memulihkan daripada cadangan – setiap kali ia berfungsi, baik dalam awan dan melalui Postgresus. Tiada masalah, kerana proses itu telah diselesaikan semasa ujian. Wrap-up Saya berharap projek ini akan berguna kepada pelbagai pengembang, DBA dan orang-orang DevOps. saya merancang untuk terus berkembang untuk menjadikannya lebih berguna dalam senario dunia sebenar.