Jump to content
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) - нужно что бы к примеру раз в сутки, данные одной базы бекапились в другую базу.

Edited by Haktar

Featured Replies

  • Author

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

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

  • Author
10 часов назад, Lesovsky сказал:

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

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

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

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

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

  • Author

Понял. Тогда более лайт-версия, через 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

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

Edited by Lesovsky
UPD

  • Author
10 часов назад, Lesovsky сказал:

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

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

  • Author
19 часов назад, Lesovsky сказал:

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

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

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

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

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

  • Author
3 часа назад, Lesovsky сказал:

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

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

  • 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?

 

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

  • Author
19 минут назад, Lesovsky сказал:

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

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

 

 

  • 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

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

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

Затем:

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

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

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

Create an account or sign in to comment

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

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.