تنصلأنا مطور. اكتب الرمز ، وأنا أتفاعل مع قاعدة البيانات فقط كمستخدم. لا أدعي بأي حال من الأحوال أن أكون مسؤول نظام ، ولا سيما ديسيبل. لكن ...
لقد حدث أن احتجت إلى تنظيم نسخة احتياطية من قاعدة بيانات postgresql. لا توجد غيوم - حافظ على SSH واجعلها تعمل ولا تسأل عن المال. ماذا نفعل في مثل هذه الحالات؟ هذا صحيح ، فنحن ندفع pgdump إلى cron ، كل يوم نقوم بعمل نسخة احتياطية لكل شيء في الأرشيف ، وإذا فرقنا تمامًا ، فإننا نرسل هذا الأرشيف إلى مكان ما إلى الجحيم.
هذه المرة ، كانت الصعوبة أنه وفقًا للخطط ، كان من المفترض أن تنمو القاعدة بحوالي + - 100 ميغابايت يوميًا. بالطبع ، في غضون أسبوعين ، ستختفي الرغبة في النسخ الاحتياطي لكل شيء باستخدام pgdump. هنا تأتي النسخ الاحتياطية الإضافية لإنقاذ.
المهتمة؟ مرحبا بكم في القط.
النسخ الاحتياطي التزايدي هو نوع من النسخ الاحتياطي عندما لا يتم نسخ جميع الملفات المصدر احتياطيًا ، ولكن فقط يتم تغييرها وتغييرها منذ إنشاء النسخة الاحتياطية السابقة.
مثل أي مطور ، لا أريد (في ذلك الوقت) لفهم تعقيدات postgres ، أردت أن أجد زرًا أخضر. حسنًا ، كما تعلمون ، كما هو الحال في AWS ، DigitalOcean: النقر فوق زر واحد - حصلت على النسخ المتماثل ، والنقر على النسخ الاحتياطية الثانية - الإعداد ، والثالثة - استرجعت قبل ساعتين. أزرار وأداة واجهة المستخدم الرسومية الجميلة لم أجد. إذا كنت تعرف هذا (مجاني أو رخيص) - اكتب عنه في التعليقات.
غوغلينغ ، لقد وجدت أداتين
pgbarman و
pgbackrest . لم أواجه مشكلة مع المشكلة الأولى (الوثائق الضئيلة للغاية ، حاولت رفع كل شيء وفقًا للأدلة القديمة) ، ولكن تبين أن المستوى الثاني كان في المستوى ، لكن ليس بدون عيوب. لتبسيط العمل لأولئك الذين يواجهون مهمة مماثلة وقد كتب هذا المقال.
بعد قراءة هذه المقالة ، سوف تتعلم كيفية عمل نسخ احتياطية تدريجية وحفظها في خادم بعيد (مستودع به نُسخ احتياطية) واستعادتها في حالة فقد البيانات أو مشاكل أخرى على الخادم الرئيسي.
تدريب
لتشغيل الدليل ، ستحتاج إلى اثنين من المبادئ الطوعية. الأول هو المستودع (المستودع الذي ستوضع عليه النسخ الاحتياطية) ، والثاني ، في الواقع ، الخادم نفسه مع postgres (في حالتي ، الإصدار 11 من postgres).
من المفترض أنه في الخادم الذي يحتوي على postgres ، يكون لديك الجذر ، مستخدم sudo ، مستخدم postgres ، ويتم تثبيت postgres نفسه (يتم إنشاء مستخدم postgres تلقائيًا عند تثبيت postgresql) ، وهناك خادم الجذر ومستخدم sudo (سيتم استخدام اسم مستخدم pgbackrest في الدليل) .
بحيث تكون لديك مشاكل أقل عند إعادة إنشاء التعليمات - بخط مائل ، أكتب
أين وأين مستخدم وبأي حقوق قمت بتنفيذ الأمر أثناء كتابة المقال والتحقق منه.
تثبيت pgbackrest
المستودع (مستخدم pgbackrest):1. قم بتنزيل الأرشيف باستخدام pgbackrest ونقل محتوياته إلى المجلد / build:
sudo mkdir /build sudo wget -q -O - \ https://github.com/pgbackrest/pgbackrest/archive/release/2.18.tar.gz | \ sudo tar zx -C /build
2. تثبيت التبعيات اللازمة للتجميع:
sudo apt-get update sudo apt-get install build-essential libssl-dev libxml2-dev libperl-dev zlib1g-dev \ libpq-dev
3. نحن نجمع pgbackrest:
cd /build/pgbackrest-release-2.18/src && sudo ./configure sudo make -s -C /build/pgbackrest-release-2.18/src
4. انسخ الملف القابل للتنفيذ إلى / usr / bin directory:
sudo cp /build/pgbackrest-release-2.18/src/pgbackrest /usr/bin sudo chmod 755 /usr/bin/pgbackrest
5. Pgbackrest يتطلب بيرل. تعيين:
sudo apt-get install perl
6. إنشاء أدلة للسجلات ، ومنحهم حقوق محددة:
sudo mkdir -p -m 770 /var/log/pgbackrest sudo chown pgbackrest:pgbackrest /var/log/pgbackrest sudo mkdir -p /etc/pgbackrest sudo mkdir -p /etc/pgbackrest/conf.d sudo touch /etc/pgbackrest/pgbackrest.conf sudo chmod 640 /etc/pgbackrest/pgbackrest.conf sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
7. تحقق:
pgbackrest version
خادم بوستجرس (مستخدم sudo أو الجذر):تشبه عملية تثبيت pgbackrest على خادم به postgres عملية التثبيت على مستودع (نعم ، يجب أن يكون pgbackrest على كلا الخادمين) ،
ولكن في الفقرة السادسة ، الأمر الثاني والأخير: sudo chown pgbackrest:pgbackrest /var/log/pgbackrest sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
استبدال بـ: sudo chown postgres:postgres /var/log/pgbackrest sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
تكوين الاتصال بين الخوادم عبر SSH بدون كلمة مرور
لكي يعمل pgbackrest بشكل صحيح ، تحتاج إلى تكوين التفاعل بين خادم postgres والمستودع باستخدام ملف المفتاح.
المستودع (مستخدم pgbackrest):
إنشاء زوج المفاتيح:
mkdir -m 750 /home/pgbackrest/.ssh ssh-keygen -f /home/pgbackrest/.ssh/id_rsa \ -t rsa -b 4096 -N ""
تحذير! نقوم بتنفيذ الأوامر المذكورة أعلاه دون sudo.
خادم بوستجرس (مستخدم sudo أو الجذر):إنشاء زوج المفاتيح:
sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa \ -t rsa -b 4096 -N ""
المستودع (مستخدم sudo):انسخ المفتاح العمومي لخادم postgres إلى خادم المستودع:
(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && \ echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && \ sudo ssh root@<postgres_server_ip> cat /var/lib/postgresql/.ssh/id_rsa.pub) | \ sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys
في هذه الخطوة ، سوف تطلب كلمة المرور من المستخدم الجذر. تحتاج إلى إدخال كلمة المرور الجذر للمستخدم خادم postgres!
خادم بوستجرس (مستخدم sudo):انسخ المفتاح العام للمستودع إلى الخادم باستخدام postgres:
(echo -n 'no-agent-forwarding,no-X11-forwarding,no-port-forwarding,' && \ echo -n 'command="/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }" ' && \ sudo ssh root@<repository_server_ip> cat /home/pgbackrest/.ssh/id_rsa.pub) | \ sudo -u postgres tee -a /var/lib/postgresql/.ssh/authorized_keys
في هذه الخطوة ، سوف تطلب كلمة المرور من المستخدم الجذر. أدخل كلمة المرور الجذر للمستخدم من مستودع!
نتحقق من:
المستودع (مستخدم الجذر ، لنقاء التجربة): sudo -u pgbackrest ssh postgres@<postgres_server_ip>
خادم Postgres (مستخدم جذر ، لنقاء التجربة): sudo -u postgres ssh pgbackrest@<repository_server_ip>
نتأكد من أن نتمكن من الوصول دون مشاكل.
إعداد خادم postgres
خادم بوستجرس (مستخدم sudo أو الجذر):1. دعنا "نقر" على خادم postgres من ip الخارجي. للقيام بذلك ، قم بتحرير ملف
postgresql.conf (الموجود في المجلد / etc / postgresql / 11 / الرئيسي) ، مع إضافة السطر إليه:
listen_addresses = '*'
إذا كان مثل هذا الخط موجودًا بالفعل ، فإما أن تقوم بإلغاء التثبيت أو قم بتعيين قيمة المعلمة على "*".
في
ملف pg_hba.conf (الموجود أيضًا في المجلد
/ etc / postgresql / 11 / الرئيسي ) ، أضف الأسطر التالية:
hostssl all all 0.0.0.0/0 md5 host all all 0.0.0.0/0 md5
حيث:
hostssl/host - SSL ( ) all - all - , () 0.0.0.0/0 - md5 -
2. سنجعل الإعدادات اللازمة في
postgresql.conf (موجودة في المجلد
/ etc / postgresql / 11 / الرئيسي ) لكي يعمل pgbackrest:
archive_command = 'pgbackrest --stanza=main archive-push %p'
3. قم بإجراء الإعدادات اللازمة في ملف تكوين pgbackrest (/etc/pgbackrest/pgbackrest.conf):
[main] pg1-path=/var/lib/postgresql/11/main [global] log-level-file=detail repo1-host=<repository_server_ip>
4. إعادة تشغيل postgresql:
sudo service postgresql restart
تكوين خادم مستودع التخزين
المستودع (مستخدم pgbackrest):قم بإجراء الإعدادات اللازمة في
ملف تكوين
pgbackrest(
/etc/pgbackrest/pgbackrest.conf ):
[main] pg1-host=<postgres_server_ip> pg1-path=/var/lib/postgresql/11/main [global] repo1-path=/var/lib/pgbackrest repo1-retention-full=2
إنشاء التخزين
المستودع (مستخدم pgbackrest):قم بإنشاء وحدة تخزين جديدة للمجموعة
الرئيسية :
sudo mkdir -m 770 /var/lib/pgbackrest sudo chown -R pgbackrest /var/lib/pgbackrest/ sudo -u pgbackrest pgbackrest --stanza=main stanza-create
تفتيش
خادم بوستجرس (مستخدم sudo أو الجذر):تحقق من خادم postgres:
sudo -u postgres pgbackrest --stanza=main --log-level-console=info check
المستودع (مستخدم pgbackrest):تحقق من خادم المستودع:
sudo -u pgbackrest pgbackrest --stanza=main --log-level-console=info check
نتأكد من أننا في الإخراج نرى السطر "check command command: بنجاح".
هل انت متعب نمر إلى الأكثر إثارة للاهتمام.عمل نسخة احتياطية
المستودع (مستخدم pgbackrest):
1. نقوم بتنفيذ النسخ الاحتياطي:
sudo -u pgbackrest pgbackrest --stanza=main backup
2. نتأكد من إنشاء النسخة الاحتياطية:
ls /var/lib/pgbackrest/backup/main/
سوف Pgbackrest إنشاء النسخة الاحتياطية الكاملة الأولى. إذا كنت ترغب في ذلك ، يمكنك تشغيل أمر النسخ الاحتياطي مرة أخرى والتأكد من قيام النظام بإنشاء نسخة احتياطية تدريجية.
إذا كنت تريد عمل نسخة احتياطية كاملة مرة أخرى ، فحدد علامة إضافية:
sudo -u pgbackrest pgbackrest --stanza=main --type=full backup
إذا كنت تريد إخراج مفصل إلى وحدة التحكم ، ثم حدد أيضًا:
sudo -u pgbackrest pgbackrest --stanza=main --type=full --log-level-console=info backup
استعادة النسخ الاحتياطي
خادم بوستجرس (مستخدم sudo أو الجذر):1. وقف مجموعة العمل:
sudo pg_ctlcluster 11 main stop
2. نحن نتعافى من النسخة الاحتياطية:
sudo -u postgres pgbackrest --stanza=main --delta restore
3. قم بتشغيل الكتلة:
sudo pg_ctlcluster 11 main start
بعد استعادة النسخة الاحتياطية ، نحتاج إلى إجراء نسخة احتياطية ثانية:
المستودع (مستخدم pgbackrest): sudo pgbackrest --stanza=main backup
هذا كل شيء. في الختام ، أود أن أذكركم أنني لا أحاول بأي حال من الأحوال أن أقوم ببناء ديسيبل أقدم ، وفي أقل فرصة ، سأستخدم السحب. حاليًا ، بدأت أنا نفسي بدراسة مواضيع مختلفة مثل النسخ الاحتياطي والتكرار والرصد وما إلى ذلك. وأنا أكتب تقارير صغيرة عن النتائج من أجل تقديم مساهمة صغيرة للمجتمع وترك أسرة صغيرة لنفسي.
في المقالات التالية ، سأحاول التحدث عن ميزات إضافية - استعادة البيانات على مجموعة نظيفة ، وتشفير النسخ الاحتياطية والنشر على S3 ، والنسخ الاحتياطي عبر rsync.