Бэкап базы данных в Box.net

Mar 01, 2012 12:02

Я уже писал как делать бэкап БД в Dropbox. В Dropbox меня смущали две вещи: (1) небольшой объем бесплатного хранилища - 12 Гб (со всем ухищрениями и рефералами); (2) отсутствие нормального класса для работы с API.

Поэтому я подыскивал более подходящее облачное хранилище для бэкапов. Знакомьтесь - Box. Сейчас по акции можно получить 50 Гб пожизненно. Достаточно залогиниться в сервис мобильного устройства. Я логинился со своего Samsung Galaxy Tab 10.1 - 50 Гб дали почти сразу.

Другим преимуществом является готовый PHP-класс для работы с API сервиса (есть и другие библиотеки), который позволяет не только загружать файлы, но и создавать папки.

Для начала работы нужно будет создать приложение и авторизовать его под аккаунтом нашего юзера. Как это сделать подробно описано в документации. В результате у вас должны быть Application Key и Auth Token. C ними и будем работать.

Для удобства я решил раскладывать бэкапы по папкам год/месяц.

Код выглядит так:

$currYear = date('Y'); $currMonth = date('m'); $folderId = 0; $BoxNet = new Box_Rest_Client(CONFIG_BOXNET_APP_KEY); $BoxNet->auth_token = CONFIG_BOXNET_APP_TOKEN; // Ищем папку с годом $arListing = $BoxNet->get('get_account_tree', array( 'folder_id' => CONFIG_BOXNET_BACKUP_FOLDER_ID, 'params' => array('nozip', 'nofiles', 'simple') )); if ($arListing['status'] == 'listing_ok') { if (is_array($arListing['tree']['folder']['folders'])) { foreach($arListing['tree']['folder']['folders'] as $arFolder) { if ($arFolder['@attributes']['name'] == $currYear) { $folderId = $arFolder['@attributes']['id']; } } } // Не нашли папку - создаем if ($folderId == 0) { $arNewFolder = $BoxNet->get('create_folder', array( 'parent_id' => CONFIG_BOXNET_BACKUP_FOLDER_ID, 'name' => $currYear, 'share' => 0 )); // Создаем папку с месяцем $arNewFolder = $BoxNet->get('create_folder', array( 'parent_id' => $arNewFolder['folder']['folder_id'], 'name' => $currMonth, 'share' => 0 )); $folderId = $arNewFolder['folder']['folder_id']; } else { // Ищем папку с месяцем $arListing = $BoxNet->get('get_account_tree', array( 'folder_id' => $folderId, 'params' => array('nozip', 'nofiles', 'simple') )); $folderFound = false; if ($arListing['status'] == 'listing_ok') { if (is_array($arListing['tree']['folder']['folders'])) { foreach($arListing['tree']['folder']['folders'] as $arFolder) { if ($arFolder['@attributes']['name'] == $currMonth) { $folderId = $arFolder['@attributes']['id']; $folderFound = true; } } } // Не нашли папку - создаем if (!$folderFound) { // Создаем папку с месяцем $arNewFolder = $BoxNet->get('create_folder', array( 'parent_id' => $folderId, 'name' => $currMonth, 'share' => 0 )); $folderId = $arNewFolder['folder']['folder_id']; } } } } if ($folderId > 0) { $dumpFile = $_SERVER['DOCUMENT_ROOT'] . CONFIG_TEMP_PATH . '/avtobeginner-' . date("d-m-Y") . '.sql'; $dumpQuery = 'mysqldump -u' . CONFIG_DB_USER . ' -p' . CONFIG_DB_PASSWORD . ' -h' . CONFIG_DB_HOST . ' ' . CONFIG_DB_NAME . ' > ' . $dumpFile . '; gzip -f ' . $dumpFile; exec($dumpQuery); $dumpFile .= '.gz'; if (file_exists($dumpFile)) { $BoxNetFile = new Box_Client_File($dumpFile, 'avtobeginner-' . date("d-m-Y") . '.sql.gz'); $BoxNetFile->attr('folder_id', $folderId); $BoxNet->upload($BoxNetFile, array(), true); } else { // Ошибка } } ?> В константе CONFIG_BOXNET_BACKUP_FOLDER_ID хранится ID корневой папки (у меня она называется Backup). ID можно узнать с помощью функции get_account_tree или присвоить 0 (корневая папка).

cloud storage, php, box, бекап

Previous post Next post
Up