ການເຮັດ Automated mysql backup ຢ່າງງ່າຍ!
Tags: mysql, backup, automated, database
Published: 2021-05-02 09:49:16

ສະບາຍດີຜູ້ອ່ານທຸກຄົນມື້ນີ້ຈະມາແນະນຳການເຮັດ Automated mysql backup ແບບງ່າຍໆແຕ່ໄດ້ຜົນດີ ແລະ ຊ່ວຍຊີວິດບັນດາ Dveloper ທັງຫຼາຍໄດ້ຍາມເມື່ອ database ເກີດມີບັນຫາຂຶ້ນມາເຮົາກໍ່ສາມາດເອົາ backup ນີ້ໄປ restore ກູ້ຂໍ້ມູນຂຶ້ນມາຢ່າງງ່າຍ ແລະ ທັນການ ວ່າແລ້ວກໍ່ໄປເບິ່ງກັນເລີຍຍຍຍ. (ສຳລັບບົດຄວາມນີ້ແມ່ນທົດສອບຢູ່ Ubuntu 20.04)

# ໃຊ້ງານ mysqlbkup
`mysqlbkup` ເປັນ Lightweight MySQL backup script ທີ່ຄົນໃຈດີເຮັດໃຫ້ໃຊ້ Free ຂໍ້ດີຄື config ເພື່ອໃຊ້ງານແບບງ່າຍໆສາມາດໄປ download ຫຼື clone ມາໃຊ້ໄດ້ເລີຍທີ່ [mysqlbkup](https://github.com/quickshiftin/mysqlbkup)

```command
$> git clone https://github.com/quickshiftin/mysqlbkup
```
### ຕິດຕັ້ງ
ເຂົ້າໄປທີ່ `cd mysqlbkup` ຫຼັງຈາກນັ້ນໃຊ້ຄຳສັ່ງ `sudo ./install` ນອກຈາກນີ້ແລ້ວໃຫ້ຕິດຕັ້ງ `mysql client` ພ້ອມ `apt install mysql-client-core-8.0`.

### ຕັ້ງຄ່າການໃຊ້ງານ
ເຮົາຕ້ອງໄປຕັ້ງຄ່າຢູ່ 2 files 
* `/etc/mysqlbkup.cnf.`
ຕັ້ງຄ່າການເຊື່ອມຕໍ່ກັບ mysql server ຂອງເຮົາ
```
[mysql]
host=127.1.1.1
user=root
password=mypassword

[mysqldump]
host=127.1.1.1
user=root
password=mypassword
force
opt
routines
triggers
max_allowed_packet=250M 
```
* `/etc/mysqlbkup.config`
ຕັ້ງຄ່າບ່ອນເກັບ file backup, ການບີບອັດ file ພິເສດແມ່ນ `MAX_BACKUPS` ເປັນການບອກໃຫ້ `mysqlbkup` backup file ຕໍ່ database ສູງສຸດຈັກ file ເຮົາຄົງບໍ່ຕ້ອງການເກັບ backup ທັງໝົດຂອທຸກໆມື້ ຫຼື ທຸກໆຊົ່ວໂມງໄວ້ທີ່ server ແນ່ນອນເພາະມັນຈະເປືອງພື້ນທີ sever ໂດຍບໍ່ຈຳເປັນ ແລະ ຖ້າໃຊ້ງານໄປນານໆກໍ່ເຮັດໃຫ້ພື້ນທີ່ sever ເຕົມໄດ້ເຮົາພຽງຕ້ອງການ backup ຂໍ້ມູນລ່າສຸດເທົ່ານັ້ນ ສຳລັບຄ່ານີ້ກໍ່ຂຶ້ນກັບຕົນເອງເລີຍວ່າຕ້ອງການ backup ຍ້ອນຫຼັງໄປຈັກມື້.
```
##########
# Configuration file for mysqlbkup
# https://github.com/quickshiftin/mysqlbkup
##########

DEFAULTS_FILE=/etc/mysqlbkup.cnf

BACKUP_DIR=/var/mysqlbkup

MAX_BACKUPS=3

DATE_FORMAT=

# Databases to ignore
# This is a space separated list.
# Each entry supports bash pattern matching by default.
# You may use POSIX regular expressions for a given entry by prefixing it with a tilde.
DB_EXCLUDE_FILTER=

# Compression library
BKUP_BIN=gzip # Change this to xz if you wish, for tighter compression
BKUP_EXT=gz   # Change this to xz if you wish, for tighter compression
```
ຫຼັງຈາກ config ຮຽບຮ້ອຍແລ້ວທົດສອບ run script

```
$> mysqlbkup.sh dry
```
ຖ້າບໍ່ມີຂໍ້ຜິດພາດໃດໆກໍ່ເປັນອັນວ່າການຕັ້ງຄ່າສຳເລັດ ແລະ ພ້ອມໃຊ້ງານແລ້ວ

# Automated ດ້ວຍ `cron job`
 
ໃນການສັ່ງ script ໃຫ້ເຮັດວຽກຕາມວັນ ແລະ ເວລາທີ່ເຮົາຕ້ອງການແມ່ນໃຊ້ `crontab` 
* ຕັ້ງຄ່າ crontab
```
$> crontab -e
```
ເພື່ອງ່າຍຕໍ່ການຕັ້ງຄ່າ cron job ແນະນຳໃຊ້ generator online ທີ່ມີຫຼາກຫຼາຍໃຫ້ເລືອກເຊັ່ນ [crontab guru](https://crontab.guru/), [Crontab Generator
](https://crontab-generator.org/)

ຕົວຢ່າງການຕັ້ງຄ່າ crontab:

ສັ່ງໃຫ້ເຮັດວຽກທຸກໆມື້ໃນເວລາ 00:00 AM 
```
SHELL=/bin/bash
MAILTO=example@gmail.com
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

## mysql backups --------------------------------------
0 0 * * * /usr/local/bin/mysqlbkup.sh 1>> /var/log/mysqlbkup.log 2>>/var/log/mysqlbkup-err.log
```

ເພື່ອທົດສອບການເຮັດວຽກ cron job ສາມາດຕັ້ງຄ່າໃຫ້ເຮັດວຽກທຸກໆນາທີໄປເລີຍກໍ່ໄດ້
```
SHELL=/bin/bash
MAILTO=example@gmail.com
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

## mysql backups --------------------------------------
* * * * * /usr/local/bin/mysqlbkup.sh 1>> /var/log/mysqlbkup.log 2>>/var/log/mysqlbkup-err.log
```

ຫຼັງຈາກນັ້ນກໍ່ restart `cron` service 
```command
$> service cron restart
```
ກວດເບິ່ງ status
```command
$> service cron restart
```

ກວດເບິ່ງ cron job list
```command
$> crontab -l
```
ຖ້າຫາກບໍ່ສະແດງ config ສະແດງວ່າ cron job ຍັງບໍ່ເຮັດວຽກໃຫ້ໄປກວດເບິ່ງການຕັ້ງວ່າວ່າຖືກຕ້ອງແລ້ວຫຼືບໍ່ ອາດຈະໄປກຳນົດສິດການເຂົ້າເຖິງ `chmod -R 600 /var/spool/cron/crontabs`

ເມື່ອຕັ້ງຄ່າ ແລະ run cron job ສຳເລັດແລ້ວກໍ່ໃຫ້ໄປກວດເບິ່ງ log file ຫຼື backup destination ທີ່ໄດ້ກຳນົດໄວ້ໃນ file ຕັ້ງຄ່າ ວ່າມີ file backup ຢູ່ຫຼືບໍ່. ຖ້າບໍ່ມີຫຍັງຜິດພາດກໍ່ຈະເຫັນ file backup ເທົ່ານີ້ກໍ່ໃຊ້ງານ automated mysql backup ໄດ້ແລ້ວ. 

ເປັນວິທີງ່າຍໆແຕ່ກໍ່ໃຊ້ໄດ້ຜົນດີ. ຖ້າຈະເອົາກັນຄັກແນ່ກໍ່ອາດຈະໃຊ້ `cloud backup`, `database sync`, `ຕັ້ງ server backup ເອງ` ກໍ່ແລ້ວແຕ່ຄວາມສຳຄັນຂອງຂໍ້ມູນ ແລະ ໂປຣເຈັກຂອງເຮົາ.

ມາຮອດນີ້ກໍ່ຂໍ້ຈົບບົດຄວາມສັ້ນໆນີ້ໄວ້ເທົ່ານີ້ກ່ອນໄວ້ພົບກັນໃນບົດຄວາມຕໍ່ໄປ.

**Stay Safe ກັນເດີ**