Вопрос или проблема
Я хочу поработать с файлами, которые составляют несколько баз данных 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 невозможно. Вариант с дампом базы данных и последующим восстановлением является наиболее безопасным и эффективным для достижения вашей цели.
Кроме того, если проблема заключается в нехватке места на диске, возможно, стоит рассмотреть вариант перемещения всех баз данных, что позволит избежать множества манипуляций с каждой из них.
Используйте описанные методы в зависимости от ваших требований и возможностей вашей инфраструктуры.