MySQL: остановка только одной БД для её перемещения

Вопрос или проблема

Я хочу поработать с файлами, которые составляют несколько баз данных MySQL (переместить файлы на другой раздел и создать символическую ссылку на оригинальное местоположение) и, если это возможно, я хотел бы остановить только базу данных, которую перемещаю, а не отключать MySQL полностью.

Есть ли способ сделать это в MySQL, или мне нужно будет полностью остановить MySQL, чтобы переместить файлы?

Хотя вы можете заблокировать базу данных, чтобы предотвратить доступ, вы не можете ее “остановить”. Это сам сервис, который запускается и останавливается, что, конечно, затрагивает все базы данных, которые он обрабатывает. Если проблема заключается в дисковом пространстве, я предлагаю переместить все сразу, а не только одну базу данных.

Вы могли бы сделать дамп базы данных, затем импортировать его на новом сервере, а затем удалить базу данных на оригинальном сервере. Существуют обсуждения о том, вернет ли старый сервер дисковое пространство (например, это может зависеть от того, включена ли innodb_file_per_table=ON). Предполагая, что она включена, команда DROP DATABASE удалит файлы данных (источник: https://dev.mysql.com/doc/refman/5.7/en/drop-database.html).

Ответ или решение

Для перемещения файлов конкретной базы данных в MySQL, не останавливая полностью сам сервер, вы можете воспользоваться несколькими методами, однако стоит учитывать, что MySQL не предоставляет функционала, позволяющего остановить только одну базу данных. Рассмотрим возможные подходы к решению вашей задачи.

1. Использование дампа базы данных

Одним из наиболее безопасных методов для перемещения базы данных является создание дампа, а затем его восстановление на новом месте.

  • Создание дампа базы данных: Используйте утилиту mysqldump, чтобы создать резервную копию вашей базы данных.

    mysqldump -u [username] -p [database_name] > database_dump.sql
  • Перемещение дампа: Перенесите полученный database_dump.sql на новый сервер или раздел.

  • Восстановление базы данных: Восстановите базу данных из дампа. Для этого можно использовать команду:

    mysql -u [username] -p [new_database_name] < database_dump.sql
  • Удаление старой базы данных: После успешного восстановления вы можете удалить старую базу данных:

    DROP DATABASE [old_database_name];

    Если у вас включена опция innodb_file_per_table=ON, это позволит удалить связанные данные и освободить место на диске.

2. Остановка сервиса MySQL

К сожалению, если вы хотите просто переместить файлы базы данных, вам придется выполнить полное отключение сервиса MySQL. Это объясняется тем, что все базы данных управляются единым процессом и не могут быть остановлены независимо друг от друга.

  • Остановка MySQL:

    sudo systemctl stop mysql
  • Перемещение файлов: Переместите файлы базы данных (обычно в директории /var/lib/mysql/[database_name]) в новое место.

  • Создание символической ссылки: После перемещения файлов создайте символическую ссылку из старого места в новое:

    ln -s /new/location/[database_name] /var/lib/mysql/[database_name]
  • Запуск MySQL: После завершения перемещения вы можете запустить MySQL обратно:

    sudo systemctl start mysql

3. Заключение

Несмотря на возможность заблокировать доступ к базе данных, физически остановить только одну базу данных без остановки всего сервера MySQL невозможно. Вариант с дампом базы данных и последующим восстановлением является наиболее безопасным и эффективным для достижения вашей цели.

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

Используйте описанные методы в зависимости от ваших требований и возможностей вашей инфраструктуры.

Оцените материал
Добавить комментарий

Капча загружается...