Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

Изменено пользователем Haktar

Рекомендованные сообщения

Опубликовано:
  • Автор

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

Опубликовано:

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

Опубликовано:
  • Автор
10 часов назад, Lesovsky сказал:

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

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

Опубликовано:

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

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

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

Опубликовано:
  • Автор

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

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

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

Опубликовано:

В общем собрал такое решение, у самого тоже 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

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

Изменено пользователем Lesovsky
UPD

Опубликовано:
  • Автор
10 часов назад, Lesovsky сказал:

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

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

Опубликовано:
  • Автор
19 часов назад, Lesovsky сказал:

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

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

Опубликовано:
9 часов назад, Haktar сказал:

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

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

Опубликовано:
  • Автор
3 часа назад, Lesovsky сказал:

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

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

Опубликовано:
  • Автор
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?

 

Опубликовано:
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

Опубликовано:
  • Автор
19 минут назад, Lesovsky сказал:

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

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

 

 

Опубликовано:
  • Автор

Всё сделал.

 

Внёс изменения в файл 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
Опубликовано:

Попробуйте выполнить в консоли сначала:

mysqldump --add-drop-table -root test > test_`date +%Y-%m-%d`.sql

Затем:

mysql -root testor_rezerv < test_`date +%Y-%m-%d`.sql

Ну или в задаче, и выполнить её.

Есть некоторые подозрения, но сначала проверьте.

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.