TechSemut Malaysia

Backup MySQL dengan Mudah

Backup MySQL dengan Mudah

Backup MySQL dengan Mudah
Januari 28
15:36 2017

Kita telah membincangkan bagaimana untuk menjalankan proses backup fail dan backup mysql melalui artikel-artikel sebelum ini:

Kali ini, kita akan gabungkan keduanya bagi memudahkan proses automasi backup ini.

Merujuk kepada Tip Linux #3, kita sudah boleh backup fail-fail Web Server yang terletak di /var/www/html.

Tetapi ini tidak memadai kerana kita belum backup mysql database bagi web server tersebut.

Oleh itu, login ke Web server dan bina direktori dan script ringkas seperti berikut:

1. Dengan privilege ‘root’, bina direktori di mana kita hendak letak script:

sudo mkdir -p /var/datalead/script

2. Bina direktori atau lokasi bagi database yang hendak kita backup:

sudo mkdir -p /var/datalead/backup

3. Bina script berikut:

cd /var/datalead/script vi mysqlbackup.pl

Masukkan kandungan:

#!/usr/bin/perl # Perform a mysqldump on all the databases specified in db.conf file use warnings; use File::Basename; # example config file # You may use a comment to bypass any database that you don't want to backup # # Unwanted_DB (commented - will not be backed up) # twtr # cbgc # set the directory where you will keep the backup files # make sure that the directory exists $backup_folder = '/var/datalead/backup'; my $config_file = dirname($0) . "/db.conf"; # retrieve a list of the databases from the config file my @databases = removeComments(getFileContents($config_file)); # change to the directory of the backup files. chdir($backup_folder) or die("Cannot go to folder '$backup_folder'"); # grab the local time variables my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon++; #Zero padding $mday = '0'.$mday if ($mday<10); $mon = '0'.$mon if ($mon<10); $hour = "0$hour" if $hour < 10; $min = "0$min" if $min < 10; # create the name of the backup folder that will contain all of the backup files my $folder = "$year-$mon-$mday-$hour$min"; mkdir($folder) or die("Cannot create a folder called '$folder'"); # backup each database contained in the @databases array foreach my $database (@databases) { next if ($database eq ''); chomp($database); my $table = ''; if(index($database,' ')+1) { my @parts = split(' ',$database); $database = $parts[0]; $table = $parts[1]; } print "Backing up $database ... "; my $file = $database; $file .= '_' . $table if($table ne ''); $file .= ".sql"; # perform a mysqldump on each database # change the path of mysqldump to match your system's location # make sure that you change the root password to match the correct password `/usr/bin/mysqldump -R --triggers -u root --password="password#susah!NakTeka" $database $table > $folder/$file`; `/bin/tar cvfz $folder-$file.tar.gz $folder/$file`; `rm -rf $folder`; you may comment out this print statement if you don't want to see this information print "Done\n\n"; exit; } # this subroutine simply creates an array of the list of the databases sub getFileContents { my $file = shift; open (FILE,$file) || die("Can't open '$file': $!"); my @lines=; close(FILE); return @lines; } # remove any commented tables from the @lines array sub removeComments { my @lines = @_; @cleaned = grep(!/^\s*#/, @lines); #Remove Comments @cleaned = grep(!/^\s*$/, @cleaned); #Remove Empty lines return @cleaned; }

Script ringkas ini menggunakan ‘perl’, menjalankan arahan ‘mysqldump’ dengan output nama fail mengandungi tarikh dan masa backup dijalankan.

Tukar file permission:

sudo chmod +x mysqlbackup.pl

Bina juga fail konfigurasi dalam direktori yang sama dengan nama “db.conf“.  Kandungan fail ini adalah nama database yang hendak kita backup.

Contoh:

sudo vi db.conf

Kandungan:

wordpress nazri_db mysql

4. Masukkan ke dalam crontab

sudo crontab -e

Masukkan:

0 23 * * * /var/datalead/script/mysqlbackup.pl > /dev/null 2>&1 &

Ok done.  Ini akan backup database yang kita define dalam fail “db.conf” pada jam 11:00 p.m. Database yang telah kita backup akan disimpan dalam direktori /var/datalead/backup.

Ini adalah contoh pada server yang saya pasang (saya hanya define “db_nazri_wp” dalam fail “db.conf”):

root@vps1:/var/datalead/backup# ls -la 

5. Sekarang kita login pula ke backup server.

Merujuk kepada artikel Tip Linux #3, edit kembali fail “backup-server.sh” dengan fail asal:

#!/bin/sh rsync -avz -delete -e "ssh -i /home/salin/.ssh/id_rsa" salin@192.168.0.20:/var/www/html /var/backup/webserver/
cd /home/salin/bin vi backup-server.sh

Tambah pula direktori MySQL yang hendak kita backup juga:

#!/bin/sh rsync -avz -delete -e “ssh -i /home/salin/.ssh/id_rsa” salin@192.168.0.20:/var/www/html /var/backup/webserver/ rsync -avz -delete -e “ssh -i /home/salin/.ssh/id_rsa” salin@192.168.0.20:/var/datalead/backup /var/backup/mysql/

Jangan lupa untuk bina direktori untuk backup database:

sudo mkdir -p /var/backup/mysql sudo chown salin.salin /var/backup/mysql -R

Sekarang selesai sudah proses backup kita.  Kini fail web kita akan melalui proses backup dan disimpan di /var/backup/webserver dan backup MySQL pula akan disimpan di /var/backup/mysql.  Kita boleh ubah di mana jua lokasi yang direktori yang digemari!  Selamat mencuba!

About Author

hasnan

hasnan

Diploma dalam Sains Komputer (IT) dari UTM Ijazah Sarjana Muda Sains Komputer (IT) dari UKM

Related Articles

0 Comments

No Comments Yet!

There are no comments at the moment, do you want to add one?

Write a comment

Write a Comment

Your email address will not be published.
Required fields are marked *

CAPTCHA

*

Facebook Auto Publish Powered By : XYZScripts.com