December 21, 20196 yr Подскажите пожалуйста составить задачу для планировщика cron (в ISPmanager) - нужно что бы к примеру раз в сутки, данные одной базы бекапились в другую базу. Edited December 21, 20196 yr by Haktar
January 9, 20206 yr Подскажите о целесообразности восстановления в другую базу данных? Вы хотите так проверять, что из бекапа восстанавливается корректно? У вас уже настроено Резервное копирование?
January 9, 20206 yr Author 10 часов назад, Lesovsky сказал: Подскажите о целесообразности восстановления в другую базу данных? Вы хотите так проверять, что из бекапа восстанавливается корректно? У вас уже настроено Резервное копирование? Иногда нужно востановить часть базы данных - какое либо поле или какую либо таблицу. То есть скажем нужно к примеру востановить одно поле - для этого нужно востановить всю базу данных, а это потеря сообщений и данных за весь день. А имея каждый день свежую и живую базу-клон, можно с ней работать локально.
January 9, 20206 yr У вас есть дополнительный сервер? Эти операции очень дорогие в плане ресурсов сервера. Вообще как вижу тут нужно ставить утилиту Rsync, или иные утилиты для резервного копирования\восстановления и настроить её выполнение через Планировщик заданий. Может конечно есть какие-то иные более изящные способы, по-хорошему спросить ещё на форуме ISPManager.
January 9, 20206 yr Author Понял. Тогда более лайт-версия, через phpMyadmin. В нём можно скопировать одну базу данных, в другую: Можно ли такое проводить не вручную, а автоматически?
January 10, 20206 yr В общем собрал такое решение, у самого тоже ISPManager 5 Lite. Задача cron для автоматического бекапа и восстановления базы данных MySQL: Добавить в .my.cnf сервера базы данных [mysql] user=db_user password=db_password [mysqldump] user=db_user password=db_password Или в случае как у меня ISPManager 5 с серверами баз данных в Docker /etc/my.cnf.d/mysql-clients.cnf # # These groups are read by MariaDB command-line tools # Use it for options that affect only one utility # [mysql] user=db_user password=db_password [mysql_upgrade] [mysqladmin] [mysqlbinlog] [mysqlcheck] [mysqldump] user=db_user password=db_password [mysqlimport] [mysqlshow] [mysqlslap] Права доступа установить на файл - 400 Перезапустить сервер баз данных Создать задачу в планировщик заданий с командой: mysqldump --add-drop-table -P3311 -h127.0.0.1 -udb_user db_name > db_name_`date +%Y-%m-%d`.sql && mysql -P3311 -h127.0.0.1 -udb_user db_name_NEW < db_name_`date +%Y-%m-%d`.sql Не много пояснений: Сначала выполняется задача mysqldump сказав && после выполнения бекапа, делаем импорт. --add-drop-table - Добавляет оператор DROP TABLE перед каждым оператором CREATE TABLE Без параметров -P и -h можно обойтись, если сервер БД один, или локальный, а так: -P3311 - порт сервера бд -h - сервер Вот например команда, если нужно сегодня, восстанавливать из вчерашнего бекапа: mysqldump --add-drop-table -P3311 -h127.0.0.1 -udb_user db_name > db_name_`date +%Y-%m-%d`.sql && mysql -P3311 -h127.0.0.1 -udb_user db_name_NEW < db_name_`date --date="yesterday" +"%Y-%m-%d"`.sql Должно получиться следующее (задача будет выполняться каждый день в 03.00): Конечно можно ещё добавить команду, чтобы удалялся бекап за вчера, чтобы исключить переполнение. Edited January 11, 20206 yr by Lesovsky UPD
January 10, 20206 yr Author 10 часов назад, Lesovsky сказал: В общем погуглил и собрал такое решение, у самого тоже ISPManager 5 Lite. Спасибо большое. Сейчас буду пробовать у себя. Отпишусь о результатах.
January 11, 20206 yr Author 19 часов назад, Lesovsky сказал: mysqldump -P3311 -hlocalhost -udb_user db_name > db_name_`date +%Y-%m-%d_%H_%M`.sql Подождите, а это точно то что мне нужно - нужно копировать базу данных А в базу данных Б
January 11, 20206 yr 9 часов назад, Haktar сказал: Подождите, а это точно то что мне нужно - нужно копировать базу данных А в базу данных Б Подправил пост выше, тестировал, работает.
January 11, 20206 yr Author 3 часа назад, Lesovsky сказал: Подправил пост выше, тестировал, работает. Спасибо. Завтра буду тестить и отпишусь в теме.
January 12, 20206 yr Author 10.01.2020 в 10:32, Lesovsky сказал: Без параметров -P и -h можно обойтись, если сервер БД один, или локальный, а так: Да сервер у меня один. 10.01.2020 в 10:32, Lesovsky сказал: mysqldump --add-drop-table -P3311 -h127.0.0.1 -udb_user db_name > db_name_`date +%Y-%m-%d`.sql && mysql -P3311 -h127.0.0.1 -udb_user db_name_NEW < db_name_`date +%Y-%m-%d`.sql Вот тут я малость запутался. Скажем у меня есть база данных под названием test Нужно что бы из этой базы копировались таблицы в базу testor_rezerv mysqldump --add-drop-table -udb_user test > test_`date +%Y-%m-%d`.sql && mysql -udb_user testor_rezerv < test_`date +%Y-%m-%d`.sql Вот так? А что такое -udb_user?
January 12, 20206 yr 15 минут назад, Haktar сказал: mysqldump --add-drop-table -udb_user test > test_`date +%Y-%m-%d`.sql && mysql -udb_user testor_rezerv < test_`date +%Y-%m-%d`.sql Вот так? Да, только пользователя(ей) для баз нужно проставить. 15 минут назад, Haktar сказал: А что такое -udb_user? db_user - пользователь базы данных Ну или проще, тоже самое что вы вставляли в файл my.cnf, вроде очевидно. Кстати, бекапы хранятся в директории /root
January 12, 20206 yr Author 19 минут назад, Lesovsky сказал: db_user - пользователь базы данных Ну я тормоз, видимо к вечеру голова уже не так работает 🙂
January 12, 20206 yr Author Всё сделал. Внёс изменения в файл my.cnf Перезапустил базы данных. Создал новую задачу с таким текстом: mysqldump --add-drop-table -root test > test_`date +%Y-%m-%d`.sql && mysql -root testor_rezerv < test_`date +%Y-%m-%d`.sql Запустил для проверки. В новой вкладки вот такое появилось: <doc> <error>code=3 Not exists</error> </doc> Естественно базв не скопировалась. А да - у меня ISPManager версии 4.4
January 13, 20206 yr Попробуйте выполнить в консоли сначала: mysqldump --add-drop-table -root test > test_`date +%Y-%m-%d`.sql Затем: mysql -root testor_rezerv < test_`date +%Y-%m-%d`.sql Ну или в задаче, и выполнить её. Есть некоторые подозрения, но сначала проверьте.
Подскажите пожалуйста составить задачу для планировщика cron (в ISPmanager) - нужно что бы к примеру раз в сутки, данные одной базы бекапились в другую базу.
Edited by Haktar