Jump to content
Дизайн и модификация Invision Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Trotor

Автоматический бекап базы в другую базу

Recommended Posts

Подскажите пожалуйста составить задачу для планировщика cron (в ISPmanager) - нужно что бы к примеру раз в сутки, данные одной базы бекапились в другую базу.

Edited by Haktar

Share this post


Link to post

Ребята, не поможете с запросом?

Share this post


Link to post

Подскажите о целесообразности восстановления в другую базу данных? Вы хотите так проверять, что из бекапа восстанавливается корректно? У вас уже настроено Резервное копирование?

Share this post


Link to post
10 часов назад, Lesovsky сказал:

Подскажите о целесообразности восстановления в другую базу данных? Вы хотите так проверять, что из бекапа восстанавливается корректно? У вас уже настроено Резервное копирование?

Иногда нужно востановить часть базы данных - какое либо поле или какую либо таблицу. То есть скажем нужно к примеру востановить одно поле - для этого нужно востановить всю базу данных, а это потеря сообщений и данных за весь день. А имея каждый день свежую и живую базу-клон, можно с ней работать локально.

Share this post


Link to post

У вас есть дополнительный сервер? Эти операции очень дорогие в плане ресурсов сервера.

Вообще как вижу тут нужно ставить утилиту Rsync,  или иные утилиты для резервного копирования\восстановления и настроить её выполнение через Планировщик заданий.

Может конечно есть какие-то иные более изящные способы, по-хорошему спросить ещё на форуме ISPManager.

  • Upvote 1

Share this post


Link to post

Понял. Тогда более лайт-версия, через phpMyadmin. В нём можно скопировать одну базу данных, в другую:

2020-01-09_215322.jpg.29fd76f3f0245bb27991173ec1e56e2f.jpg

Можно ли такое проводить не вручную, а автоматически?

Share this post


Link to post

В общем собрал такое решение, у самого тоже ISPManager 5 Lite.

Задача cron для автоматического бекапа и восстановления базы данных MySQL:

  1. Добавить в .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

     

  2. Перезапустить сервер баз данных
  3. Создать задачу в планировщик заданий с командой:
    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

     

  4. Должно получиться следующее (задача будет выполняться каждый день в 03.00): image.png

Конечно можно ещё добавить команду, чтобы удалялся бекап за вчера, чтобы исключить переполнение.

Edited by Lesovsky
UPD
  • Upvote 1

Share this post


Link to post
10 часов назад, Lesovsky сказал:

В общем погуглил и собрал такое решение, у самого тоже ISPManager 5 Lite.

Спасибо большое. Сейчас буду пробовать у себя. Отпишусь о результатах.

Share this post


Link to post
19 часов назад, Lesovsky сказал:

mysqldump -P3311 -hlocalhost -udb_user db_name > db_name_`date +%Y-%m-%d_%H_%M`.sql

Подождите, а это точно то что мне нужно - нужно копировать базу данных А в базу данных Б

Share this post


Link to post
9 часов назад, Haktar сказал:

Подождите, а это точно то что мне нужно - нужно копировать базу данных А в базу данных Б

Подправил пост выше, тестировал, работает.

  • Upvote 1

Share this post


Link to post
3 часа назад, Lesovsky сказал:

Подправил пост выше, тестировал, работает.

Спасибо. Завтра буду тестить и отпишусь в теме.

Share this post


Link to post
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?

 

Share this post


Link to post
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

  • Upvote 1

Share this post


Link to post
19 минут назад, Lesovsky сказал:

db_user - пользователь базы данных

Ну я тормоз, видимо к вечеру голова уже не так работает 🙂

 

 

Share this post


Link to post

Всё сделал.

 

Внёс изменения в файл 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

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...