ค้นหาเว็บไซต์

วิธีสำรอง/กู้คืน MySQL/MariaDB และ PostgreSQL โดยใช้เครื่องมือ 'Automysqlbackup' และ 'Autopostgresqlbackup'


หากคุณเป็นผู้ดูแลระบบฐานข้อมูล (DBA) หรือมีหน้าที่รับผิดชอบในการดูแลรักษา สำรอง และกู้คืนฐานข้อมูล คุณจะรู้ว่าคุณไม่สามารถสูญเสียข้อมูลได้ เหตุผลง่ายๆ ก็คือ การสูญเสียข้อมูลไม่เพียงแต่หมายถึงการสูญเสียข้อมูลสำคัญเท่านั้น แต่ยังอาจสร้างความเสียหายทางการเงินให้กับธุรกิจของคุณด้วย

ด้วยเหตุนี้คุณจึงต้องแน่ใจเสมอว่า:

1. ฐานข้อมูลของคุณได้รับการสำรองเป็นระยะๆ
2. ข้อมูลสำรองเหล่านั้นจะถูกจัดเก็บไว้ในที่ปลอดภัย และ
3. คุณทำการฝึกซ้อมฟื้นฟูอย่างสม่ำเสมอ

ไม่ควรมองข้ามกิจกรรมสุดท้ายนี้ เนื่องจากคุณคงไม่อยากประสบปัญหาใหญ่โดยไม่ได้ฝึกฝนสิ่งที่ต้องทำในสถานการณ์ดังกล่าว

ในบทช่วยสอนนี้ เราจะแนะนำให้คุณรู้จักกับยูทิลิตี้ดีๆ สองรายการในการสำรองฐานข้อมูล MySQL/MariaDB และ PostgreSQL ตามลำดับ: automysqlbackup และ autopostgresqlbackup

เนื่องจากอย่างหลังอิงจากอย่างแรก เราจะเน้นคำอธิบายของเราไปที่ automysqlbackup และเน้นความแตกต่างด้วย autopgsqlbackup หากมีเลย

ขอแนะนำอย่างยิ่งให้จัดเก็บข้อมูลสำรองไว้ในการแชร์เครือข่ายที่ติดตั้งในไดเร็กทอรีสำรอง เพื่อว่าในกรณีที่เกิดข้อขัดข้องทั่วทั้งระบบ คุณจะยังคงได้รับความคุ้มครอง

อ่านคำแนะนำที่เป็นประโยชน์ต่อไปนี้เกี่ยวกับ MySQL:

การติดตั้งฐานข้อมูล MySQL/MariaDB/PostgreSQL

1. คู่มือนี้ถือว่าคุณต้องมีอินสแตนซ์ MySQL/MariaDB/PostgreSQL ทำงานอยู่ หากไม่มี โปรดติดตั้ง แพ็คเกจต่อไปนี้:

การแจกแจงแบบอิง Fedora:

yum update && yum install mariadb mariadb-server mariadb-libs postgresql postgresql-server postgresql-libs

เดเบียนและอนุพันธ์:

aptitude update && aptitude install mariadb-client mariadb-server mariadb-common postgresql-client postgresql postgresql-common

2. คุณมีฐานข้อมูลการทดสอบ MySQL/MariaDB/PostgreSQL ที่คุณสามารถใช้ได้ (ขอแนะนำให้ < strong style="color:red">ไม่ ใช้ automysqlbackup หรือ autopostgresqlbackup ในสภาพแวดล้อมการใช้งานจริงจนกว่าคุณจะคุ้นเคยกับเครื่องมือเหล่านี้)

มิฉะนั้น ให้สร้างฐานข้อมูลตัวอย่างสองฐานข้อมูลและเติมข้อมูลลงในฐานข้อมูลก่อนดำเนินการต่อ ในบทความนี้ ฉันจะใช้ฐานข้อมูลและตารางต่อไปนี้:

CREATE DATABASE mariadb_db;
CREATE TABLE tecmint_tbl (UserID INT AUTO_INCREMENT PRIMARY KEY, 
UserName VARCHAR(50), 
IsActive BOOL);

CREATE DATABASE postgresql_db;
CREATE TABLE tecmint_tbl (
UserID SERIAL PRIMARY KEY,
UserName VARCHAR(50),
IsActive BOOLEAN);

การติดตั้ง automysqlbackup และ autopgsqlbackup ใน CentOS 7 และ Debian 8

3. ใน Debian 8 เครื่องมือทั้งสองมีอยู่ในที่เก็บ ดังนั้นการติดตั้งจึงทำได้ง่ายเพียงแค่เรียกใช้:

aptitude install automysqlbackup autopostgresqlbackup

ในขณะที่ใน CentOS 7 คุณจะต้องดาวน์โหลดสคริปต์การติดตั้งและเรียกใช้งาน ในส่วนด้านล่างนี้ เราจะเน้นไปที่การติดตั้ง กำหนดค่า และทดสอบเครื่องมือเหล่านี้บน CentOS 7 โดยเฉพาะ เนื่องจากสำหรับ Debian 8 ซึ่งเกือบจะใช้งานได้จริง เราจะ ชี้แจงที่จำเป็นในภายหลังในบทความนี้

การติดตั้งและกำหนดค่า automysqlbackup ใน CentOS 7

4. ให้เราเริ่มต้นด้วยการสร้างไดเร็กทอรีการทำงานภายใน /opt เพื่อดาวน์โหลดสคริปต์การติดตั้งและเรียกใช้:

mkdir /opt/automysqlbackup
cd /opt/automysqlbackup
wget http://ufpr.dl.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v3.0_rc6.tar.gz
tar zxf automysqlbackup-v3.0_rc6.tar.gz
./install.sh

5. ไฟล์การกำหนดค่าสำหรับ automysqlbackup อยู่ภายใน /etc/automysqlbackup ภายใต้ชื่อ myserver.conf มาดูคำสั่งการกำหนดค่าที่เกี่ยวข้องกันมากที่สุด:

Username to access the MySQL server
CONFIG_mysql_dump_username='root'
Password
CONFIG_mysql_dump_password='YourPasswordHere'
Host name (or IP address) of MySQL server
CONFIG_mysql_dump_host='localhost'
Backup directory
CONFIG_backup_dir='/var/backup/db/automysqlbackup'
List of databases for Daily/Weekly Backup e.g. ( 'DB1' 'DB2' 'DB3' ... )
set to (), i.e. empty, if you want to backup all databases
CONFIG_db_names=(AddYourDatabase Names Here)
List of databases for Monthly Backups.
set to (), i.e. empty, if you want to backup all databases
CONFIG_db_month_names=(AddYourDatabase Names Here)
Which day do you want monthly backups? (01 to 31)
If the chosen day is greater than the last day of the month, it will be done
on the last day of the month.
Set to 0 to disable monthly backups.
CONFIG_do_monthly="01"
Which day do you want weekly backups? (1 to 7 where 1 is Monday)
Set to 0 to disable weekly backups.
CONFIG_do_weekly="5"
Set rotation of daily backups. VALUE*24hours
If you want to keep only today's backups, you could choose 1, i.e. everything older than 24hours will be removed.
CONFIG_rotation_daily=6
Set rotation for weekly backups. VALUE*24hours. A value of 35 means 5 weeks.
CONFIG_rotation_weekly=35
Set rotation for monthly backups. VALUE*24hours. A value of 150 means 5 months.
CONFIG_rotation_monthly=150
Include CREATE DATABASE statement in backup?
CONFIG_mysql_dump_create_database='no'
Separate backup directory and file for each DB? (yes or no)
CONFIG_mysql_dump_use_separate_dirs='yes'
Choose Compression type. (gzip or bzip2)
CONFIG_mysql_dump_compression='gzip'
What would you like to be mailed to you?
- log   : send only log file
- files : send log file and sql files as attachments (see docs)
- stdout : will simply output the log to the screen if run manually.
- quiet : Only send logs if an error occurs to the MAILADDR.
CONFIG_mailcontent='quiet'
Email Address to send mail to? ([email )
CONFIG_mail_address='root'
Do you wish to encrypt your backups using openssl?
#CONFIG_encrypt='no'
Choose a password to encrypt the backups.
#CONFIG_encrypt_password='password0123'
Command to run before backups (uncomment to use)
#CONFIG_prebackup="/etc/mysql-backup-pre"
Command run after backups (uncomment to use)
#CONFIG_postbackup="/etc/mysql-backup-post"

เมื่อคุณกำหนดค่า automysqlbackup ตามความต้องการแล้ว ขอแนะนำให้คุณตรวจสอบไฟล์ README ที่พบใน /etc/automysqlbackup/README

การสำรองฐานข้อมูล MySQL

6. เมื่อคุณพร้อมแล้ว ให้รันโปรแกรมได้เลย โดยส่งไฟล์การกำหนดค่าเป็นอาร์กิวเมนต์:

automysqlbackup /etc/automysqlbackup/myserver.conf

การตรวจสอบไดเร็กทอรี รายวัน อย่างรวดเร็วจะแสดงให้เห็นว่า automysqlbackup ทำงานสำเร็จแล้ว:

pwd
ls -lR daily

แน่นอนคุณสามารถเพิ่มรายการ crontab เพื่อรัน automysqlbackup ในช่วงเวลาของวันที่เหมาะสมกับความต้องการของคุณมากที่สุด (01:30 ทุกวันในตัวอย่างด้านล่าง):

30 01 * * * /usr/local/bin/automysqlbackup /etc/automysqlbackup/myserver.conf

การกู้คืนข้อมูลสำรอง MySQL

7. ตอนนี้เรามาทิ้งฐานข้อมูล mariadb_db โดยตั้งใจ:

มาสร้างมันอีกครั้งและกู้คืนข้อมูลสำรอง ในพรอมต์ MariaDB ให้พิมพ์:

CREATE DATABASE mariadb_db;
exit

จากนั้นค้นหา:

cd /var/backup/db/automysqlbackup/daily/mariadb_db
ls

และกู้คืนข้อมูลสำรอง:

mysql -u root -p mariadb_db < daily_mariadb_db_2015-09-01_23h19m_Tuesday.sql
mysql -u root -p
MariaDB [(none)]> USE mariadb_db; 
MariaDB [(none)]> SELECT * FROM tecmint_tb1;

การติดตั้งและกำหนดค่า autopostgresqlbackup ใน CentOS 7

8. เพื่อให้ autopostgresql ทำงานได้อย่างไม่มีที่ติใน CentOS 7 เราจะต้องติดตั้งการขึ้นต่อกันบางอย่างก่อน:

yum install mutt sendmail

จากนั้นให้ทำซ้ำขั้นตอนเหมือนเมื่อก่อน:

mkdir /opt/autopostgresqlbackup
cd /opt/autopostgresqlbackup
wget http://ufpr.dl.sourceforge.net/project/autopgsqlbackup/AutoPostgreSQLBackup/AutoPostgreSQLBackup-1.0/autopostgresqlbackup.sh.1.0
mv autopostgresqlbackup.sh.1.0 /opt/autopostgresqlbackup/autopostgresqlbackup.sh

มาทำให้สคริปต์ทำงานได้และ เริ่มต้น/เปิดใช้งาน บริการ:

chmod 755 autopostgresqlbackup.sh
systemctl start postgresql
systemctl enable postgresql

สุดท้าย เราจะแก้ไขค่าของการตั้งค่าไดเร็กทอรีสำรองเป็น:

BACKUPDIR="/var/backup/db/autopostgresqlbackup"

หลังจากผ่านไฟล์การกำหนดค่าของ automysqlbackup แล้ว การกำหนดค่าเครื่องมือนี้ทำได้ง่ายมาก (งานส่วนนั้นขึ้นอยู่กับคุณ)

9. ใน CentOS 7 ตรงกันข้ามกับ Debian 8 autopostgresqlbackup ทำงานได้ดีที่สุดเนื่องจาก postgres ผู้ใช้ระบบ ดังนั้นเพื่อที่จะทำเช่นนั้น คุณควรสลับไปใช้บัญชีนั้นหรือเพิ่มงาน cron ลงในไฟล์ crontab:

crontab -u postgres -e
30 01 * * * /opt/autopostgresqlbackup/autopostgresqlbackup.sh

จำเป็นต้องสร้างไดเร็กทอรีสำรอง และต้องตั้งค่าการอนุญาตและความเป็นเจ้าของกลุ่มซ้ำเป็น 0770 และ postgres (อีกครั้ง ซึ่งไม่จำเป็นใน < แข็งแกร่ง>เดเบียน):

mkdir /var/backup/db/autopostgresqlbackup
chmod -R 0770 /var/backup/db/autopostgresqlbackup
chgrp -R postgres /var/backup/db/autopostgresqlbackup

ผลลัพธ์:

cd /var/backup/db/autopostgresqlbackup
pwd
ls -lR daily

10. ตอนนี้คุณสามารถกู้คืนไฟล์ได้เมื่อจำเป็น (อย่าลืมทำสิ่งนี้ในฐานะผู้ใช้ postgres หลังจากสร้างฐานข้อมูลว่างขึ้นมาใหม่):

gunzip -c postgresql_db_2015-09-02.Wednesday.sql.gz | psql postgresql_db

ข้อควรพิจารณาใน Debian 8

ดังที่เราได้กล่าวไปแล้ว ไม่เพียงแต่การติดตั้งเครื่องมือเหล่านี้ใน Debian จะตรงไปตรงมามากกว่า แต่ยังรวมถึงการกำหนดค่าที่เกี่ยวข้องด้วย คุณจะพบไฟล์การกำหนดค่าใน:

  1. Automysqlbackup: /etc/default/automysqlbackup
  2. Autopostgresqlbackup: /etc/default/autopostgresqlbackup

สรุป

ในบทความนี้ เราได้อธิบายวิธีการติดตั้งและใช้ automysqlbackup และ autopostgresqlbackup (การเรียนรู้วิธีใช้อันแรกจะช่วยให้คุณเชี่ยวชาญอันที่สองได้เช่นกัน) การสำรองฐานข้อมูลที่ยอดเยี่ยมสองแห่ง เครื่องมือที่สามารถทำให้งานของคุณในฐานะ DBA หรือผู้ดูแลระบบ/วิศวกรง่ายขึ้นมาก

โปรดทราบว่าคุณสามารถขยายหัวข้อนี้ได้โดยการตั้งค่าการแจ้งเตือนทางอีเมล หรือส่งไฟล์สำรองเป็นไฟล์แนบทางอีเมล ไม่จำเป็นอย่างเคร่งครัด แต่อาจมีประโยชน์ในบางครั้ง

สุดท้ายนี้ โปรดทราบว่าสิทธิ์ของไฟล์การกำหนดค่าควรตั้งค่าเป็นขั้นต่ำ (0600 ในกรณีส่วนใหญ่) เราหวังว่าจะได้ยินสิ่งที่คุณคิดเกี่ยวกับบทความนี้ โปรดส่งข้อความถึงเราโดยใช้แบบฟอร์มด้านล่าง