Skip to content

Instantly share code, notes, and snippets.

@LeonanCarvalho
Last active December 11, 2015 13:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LeonanCarvalho/f7dfe1d1802e6312a211 to your computer and use it in GitHub Desktop.
Save LeonanCarvalho/f7dfe1d1802e6312a211 to your computer and use it in GitHub Desktop.
PHP Script That provide a easy way to safe backup your databases
<?php
/* =========================================================
* Script to Generate MySQL dumps With PHP
* =========================================================
* Copyright 2015 Leonan Carvalho @leonancarvalho
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================= */
$DB_USER = "root";
$DB_PASSWD = "senhadeRoot";
$DB_BACKUP_DIR = "/home/user/bkp_mysql";
$HD_EXTERNO_DIR = "/media/hd-dell/backup/mysql";
/// Se passar os nomes dos bancos como parâmetro irá gerar apenas do banco selecionado
/**
* Ex. php -f mysql_linux_backup.php db1 dbZ dbA
* */
if(count($argv) > 1){
$DB_LIST = [];
$i = 1;
while ($i < $argc){
$DB_LIST[] = $argv[$i];
$i++;
}
}else{
$DB_LIST = ["db1","db2","dbx"]; //Lista Padrão de backup
}
if($DB_LIST && count($DB_LIST) == 0){
echo "[", date("Y-m-d H:i:s"), "] ","Nenhum banco de dados foi informado para realização do backup.", PHP_EOL;
die();
}
//print_r($DB_LIST);
//exit;
echo "[", date("Y-m-d H:i:s"), "] ","Gerando Backup em $DB_BACKUP_DIR", PHP_EOL;
$dumpcomand = "mysqldump -u $DB_USER -p$DB_PASSWD ";
$datebkp = date("Y-m-d_H-i-s");
foreach($DB_LIST as $DB_NAME){
echo "[", date("Y-m-d H:i:s"), "] ","Backup para $DB_NAME Iniciado", PHP_EOL;
$folder = $DB_BACKUP_DIR . DIRECTORY_SEPARATOR . $DB_NAME . DIRECTORY_SEPARATOR. $datebkp;
if(!is_dir($folder)){
echo "[", date("Y-m-d H:i:s"), "] ","Pasta $folder criada", PHP_EOL;
mkdir($folder,0777,true);
}
echo "[", date("Y-m-d H:i:s"), "] ","Gerando backup da estrutura", PHP_EOL;
// Create Database e Estrutura
exec($dumpcomand. " --skip-triggers --no-data " . $DB_NAME . " > " . $folder . "/structure.sql");
echo "[", date("Y-m-d H:i:s"), "] ","Gerando backup dos dados", PHP_EOL;
// Dados
exec($dumpcomand. " --no-create-info --skip-triggers --hex-blob --disable-keys " . $DB_NAME . " > " . $folder . "/data.sql");
echo "[", date("Y-m-d H:i:s"), "] ","Gerando backup das Rotinas, Triggers, Events e Functions", PHP_EOL;
// Eventos, Cunctions , Triggers e Procedures
exec($dumpcomand. " --routines --events --no-create-info --no-data --no-create-db --skip-opt --triggers " . $DB_NAME . " > " . $folder . "/events-triggers-functions.sql");
//Compactando tudo :
$zipFolder = $DB_BACKUP_DIR . DIRECTORY_SEPARATOR . $DB_NAME ;
$zipName = $datebkp. "_". $DB_NAME.".tar.bz2";
$zipPath = $zipFolder.DIRECTORY_SEPARATOR.$zipName;
echo "[", date("Y-m-d H:i:s"), "] ","Compactando arquivo em $zipPath", PHP_EOL;
exec("tar -zcvf ".$zipPath. " " . $folder);
if($HD_EXTERNO_DIR){
$DestinationDir = $HD_EXTERNO_DIR . DIRECTORY_SEPARATOR . $DB_NAME;
echo "[", date("Y-m-d H:i:s"), "] ","Copiando arquivo $zipName para HD externo em ",$DestinationDir,DIRECTORY_SEPARATOR, $zipName, PHP_EOL;
if(!is_dir($DestinationDir)){
echo "[", date("Y-m-d H:i:s"), "] ","Pasta $DestinationDir criada", PHP_EOL;
mkdir($DestinationDir,0777,true);
}
exec("cp $zipPath " . $DestinationDir . DIRECTORY_SEPARATOR . $zipName);
//Apagar os sql, salvar espaço:
echo "[", date("Y-m-d H:i:s"), "] ","Removendo arquivos SQL para poupar espaço físico no HD", PHP_EOL;
exec("rm -f -r $folder");
}
echo "[", date("Y-m-d H:i:s"), "] ","Fim do Script de Backup", PHP_EOL;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment