Mysql centos перенос базы

Обновлено: 04.07.2024

Изредка бывает необходимо импортировать/экспортировать довольно большую базу данных и через phpmyadmin делать это нет желания, выскакивают ошибки вроде:

Для этого логинимся в консоли ssh и выполняем следующую последовательность действий:

username заменяем на имя пользователя, который имеет доступ к данной бд или root, если аутентификация работает через него, но не использует unix_socet

Вариант второй (если не используется unix_socet):

или (равнозначные команды)

После авторизации (в случае root или тп типа авторизации) можно посмотреть ваши текущие базы данных:

Вывод будет примерно следующим:

После чего можно выбрать нужную базу данных командой:

Вывод в таком случае будет следующим:

После чего вы можете просмотреть существующие в данной базе таблицы командой:

Вывод будет следующим:

Так же вы можете посмотреть все записи в конкретной таблице следующей командой:

Вывод будет аналогичным:

Чтобы посмотреть спецификацию таблицы, используйте следующую команду:

Вывод будет аналогичным:

Импорт базы данных

Вариант 1

Если вы хотите импортировать дамп базы из файла на сервере, то можете выполнить следующую команду:

username — логин для доступа к базе

/home/files/dumps/backup_database_name.sql — адрес файла бекапа на сервере

Вариант 2

Если вы уже авторизовались в mysql/mariadb, то можете выбрать базу данных командой:

После чего следующей командой импортировать базу:

/home/files/dumps/backup_database_name.sql — адрес файла бекапа на сервере

Импорт отдельной таблицы:

Чтобы импортировать одну таблицу в существующую базу данных, вы должны использовать следующую команду:

Экспорт базы данных

Для экспорта можно использовать простую команду:

username — логин для доступа к базе

/home/files/dumps/backup_database_name.sql — адрес файла бекапа на сервере

Чтобы экспортировать одну таблицу из вашей базы данных, вы должны использовать следующую команду:

Опять же, вам нужно будет заменить имя пользователя, базу данных и имя таблицы на правильную информацию.

Favorite

Добавить в избранное

Главное меню » Базы данных » База данных MySQL » Как переместить каталог данных MySQL на новое место в CentOS и Ubuntu

(1 оценок, среднее: 5,00 из 5)

Как переместить каталог данных MySQL на новое место в CentOS и Ubuntu

П о умолчанию база данных MySQL будет создана в каталоге /var/lib/mysql.

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

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

Чтобы изменить каталог MySQL, вы должны выполнить следующие три шага:

  1. Переместить файлы базы данных MySQL из /var/lib/mysql на другой раздел
  2. Изменить файл my.cnf на новый путь каталога
  3. Обновление параметров безопасности, чтобы отразить изменение каталога: На CentOS или RedHat, изменить настройки SELinux. В Ubuntu или Debian, изменить настройки AppArmor.

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

Сделайте резервную копию текущей MySQL

Перед тем, как сделать что-нибудь, остановите базу данных MySQL и сделайте полную резервную копию базы данных.

По умолчанию в MySQL база данных будет в каталоге /var/lib/mysql. Скопируйте этот каталог MySQL в другое место в качестве резервного копирования.

Или, если вы предпочитаете, вы можете использовать mysqldump чтобы сделать резервную копию БД MySQL.

Перемещение MySQL каталога данных в другой раздел

В этом примере, мой корневой раздел /dev/sda1, который не имеет много места для каталога /var/lib/mysql по умолчанию. Но, у меня есть раздел /data на диске /dev/sdb1, который имеет много места.

Таким образом, я перемещу базу данных MySQL из раздела /в раздел /data.

Создайте следующий каталог и переместите данные из каталога /var/lib в /data/var/lib, как показано ниже.

Несколько моментов, для рассмотрения следующих вопросов:

  • Вы также можете переместить каталог MySQL в каталог /data/var/lib, а также создать символическую ссылку из /var/lib, указывающей на /data/var/lib. Но, в данном конкретном случае, я предпочитаю, простой перенос каталога без символической ссылки, чтобы избежать путаницы.
  • Если возможно, попробуйте использовать команду move, чтобы переместить каталог (вместо копии). При выполнении копии, контекст SELinux будут потерян, и вы должны вручную установить ее позже (как описано ниже). Но, когда вы перемещаете, соответствующий SELinux контекст для MySQL хранятся, и вам не придется беспокоиться об изменении его.

Измените файл my.cnf и запустите MySQL

В файле /etc/my.cnf, вам необходимо изменить параметр datadir и параметр socket, указать на новый каталог, как показано ниже.

И, наконец, перезапустите базу данных MySQL.

Если у вас параметр tmpdir уже определен в файле my.cnf, измените каталог для него тоже:

Контекст SELinux для MySQL

Как вы видите здесь, mysqld_db_t является SELinux тип контекста.

После перемещения каталога в новое место, вы должны увидеть точную SELinux в качестве предварительного шага.

Примечание: Если вы сделали копию каталога (вместо переноса), вы заметите, что он изменился. В этом случае, изменение контекста SELinux, как описано ниже.

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

Установка SELinux для MySQL на CentOS / RedHat (Вариант 1)

С помощью команды chcon, вы можете изменить тип контекста SELinux в новом каталоге, как показано ниже.

В приведенной выше команде:

  • chcon это команда для изменения контекста SELinux
  • Опция -R будет рекурсивно изменить контекст для данного каталога и в вспомогательном каталоге.
  • Опция -t используется для указания типа контекста SELinux, который должен быть установлен. В этом примере, мы устанавливаем его тип mysqld_db_t.
  • /data является каталог, на котором будет выполняться эта команда.

Примечание: Начало изменения контекста из каталога верхнего уровня /data (а не из каталога MySQL), который будет включать в себя каталог MySQL и все подкаталоги и файлы.

Установка SELinux для MySQL на CentOS / RedHat (Вариант 2)

С помощью команды restorecon, вы можете восстановить контекст SELinux к нужному типу. Но, в этом случае, вы должны сообщить SELinux, что является правильным контекстом путем добавления типа mysqld_db_t к карте контекста SELinux.

Чтобы добавить тип SELinux в контексте карты, используйте команду semanage. Установите пакет policycoreutils-python, который содержит команду semanage.

Затем выполните следующую команду, чтобы установить SELinux контекст карты на новый каталог.

В приведенной выше команде, мы добавляем mysqld_db_t к контекстной карте для каталога /data и всех подкаталогов и файлов в нем.

И, наконец, используйте команду restorecon, которая восстановит соответствующий контекст SELinux в новый каталог /data.

Убедитесь в том, что новый каталог /data переместился и подпапки mysql имеют корректный контекст SELinux.

Примечание: Вы можете также использовать опцию -e вместе fcontext. Это сделает метку контекста для /data и его подкаталогов в качестве контекста /var/lib/mysql.

AppArmor для установки MySQL на Ubuntu / Debian

После перемещения каталога данных MySQL на новое место, если вы не выполните следующие действия, на Ubuntu, вы получите эту ошибку при запуске базы данных:

Изменение файла usr.sbin.mysqld, как показано ниже, и добавьте следующие две строки. Не забудьте запятую в конце строки, которая требуется.

Затем выполните следующую команду для повторной обработки нового конфигурационного файла AppArmor для MySQL, и перезапустите AppArmor.

Примечание: В качестве альтернативы, вы можете также добавить псевдоним в файле псевдонима AppArmor, как показано ниже. Опять же, не забудьте запятую в конце этого псевдонима.

Параметр сокета клиента MySQL

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

Если это произойдет, передайте параметр -socket клиенту MySQL, и укажите его в файле mysql.sock, который находится в новом каталоге.

Как переместить каталог данных MySQL на новое место в CentOS и Ubuntu

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

Дампы MySQL и MariaDB очень просты в работе. Это руководство научит вас экспортировать и импортировать базы данных с помощью дампа MySQL или MariaDB.

Требования

  • Сервер Linux.
  • Предварительно установленная система управления базами данных MySQL или MariaDB.
  • База данных и пользователь СУБД.

Экспорт данных

Консольная утилита mysqldump позволяет экспортировать данные в текстовый файл SQL, который можно легко переместить. Для этого вам понадобится имя БД, а также учётные данные пользователя, у которого есть как минимум право на чтение БД.

Чтобы экспортировать БД, используйте такую команду:

mysqldump -u username -p database_name > data-dump.sql

  • username – имя пользователя БД;
  • database_name – имя БД, которую нужно экспортировать;
  • data-dump.sql – файл в текущем каталоге, в который будут экспортированы данные.

Вывод этой команды не отображается на экране. Чтобы убедиться в том, что данные были импортированы успешно, проверьте содержимое дампа:

head -n 5 data-dump.sql

Файл дампа MySQL должен начинаться примерно так:

-- MySQL dump 10.13 Distrib 5.7.16, for Linux (x86_64)
--
-- Host: localhost Database: database_name
-- ------------------------------------------------------
-- Server version 5.7.16-0ubuntu0.16.04.1

Если во время экспорта данных произошла ошибка, утилита mysqldump сообщит вам о ней.

Импорт данных

Чтобы импортировать дамп, нужно создать новую БД MySQL или MariaDB, в которую будут перемещены данные из дампа.

Войдите как root или другой пользователь с расширенными привилегиями.

Эта команда откроет командную оболочку MySQL. Создайте новую БД, например, new_database.

CREATE DATABASE new_database;

На экране появится вывод, подтверждающий, что БД была создана:

Query OK, 1 row affected (0.00 sec)

Закройте оболочку MySQL (CTRL+D). С помощью обычной командной строки импортируйте дамп:

mysql -u username -p new_database < data-dump.sql

  • username – имя пользователя, у которого есть доступ к БД.
  • newdatabase – имя новой БД.
  • data-dump.sql – имя дампа, который нужно импортировать.

В случае успешного выполнения команды вывод не отображается на экране. Если во время выполнения возникла какая-либо ошибка, mysql выведет их в терминал. Чтобы убедиться, что данные импортированы успешно, войдите в оболочку MySQL и проверьте БД. Для этого можно использовать:

USE new_database;
SHOW TABLES;

Заключение

Теперь вы умеете перемещать данные MySQL и MariaDB с помощью дампа. Утилита mysqldump имеет множество дополнительных параметров, при помощи которых можно настраивать дампы; подробнее об этом – в официальной документации mysqldump.

НО при подключении к базе ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Вопрос что делаю не так п.с если указать путь к сокету то заходит mysql -u root -pMyPassword --socket=/новый путь/mysql/mysql.sock

Вопрос что делаю не так п.с если указать путь к сокету то заходит mysql -u root -pMyPassword --socket=/новый путь/mysql/mysql.sock

В инструкции собственно это и написано.

kostik87 ★★★★★ ( 24.06.18 12:35:55 )
Последнее исправление: kostik87 24.06.18 12:36:12 (всего исправлений: 1)

решил это так Просто отредактируйте /etc/my.cnf Добавить следующие строки в my.cnf добавляю [client]

НО все равно я так и попробую база на новом месте а сокет на старом

Что значит новое место и старое? Место должно быть одно.

Т.е. изначально у тебя была одна файловая система, один раздел, на котором были системные файлы Linux и файлы базы mysql, в том числе и сокет, допустим это /dev/sda3.

Затем ты подключил диск, допустим /dev/sdb и на нём создал раздел, допустим /dev/sdb1 и на нём файловую систему.

Остановил сервис mysql.

Далее ты смонтировал /dev/sdb1, допустим в /tmp/sdb1, далее скопировал все файлы из /var/lib/mysql в /tmp/sdb1:

Теперь просто отмонируешь файловую систему из /tmp/sdb1 и монтируешь в /var/lib/mysql.

Всё, файлы базы находятся на другом диске, другой файловой системе, но логически эта файловая система смонтирована в /var/lib/mysql и файлы доступны по прежнему пути, файлы сокекта, даже если они лежат в /var/lib/mysql, а не в /var/run/mysql так же доступны по старому пути, никаких дополнительных настроек делат не нужно!

Теперь просто нужно добавить в /etc/fstab строку с параметрами монтирования /dev/sdb1 в /var/lib/mysql.

Раздел /dev/sdb1 указан в примере, у тебя может быть другой.

Что ты сделал я не знаю. Но перенос части файловой системы linux на отдельный раздел (файловую систему) не должен вызывать проблем, если новая файловая система смонтирована в то место, где находились перемещённые файлы.

Теперь рассказывай что делал ты.

Ну либо переделай как описал я. Ествественно не удаляй базу, оставь копию.

я не рассказываю и не спрашиваю как смонтировать раздел к примеру база лежала /var/lib/mysql/* стала лежать в /другая папка/mysql/* НО старый путь я убил (вот была ошибка) в my.cnf меняем путь к базе а сокет оставляем на старом месте и все

НО старый путь я убил (вот была ошибка) в my.cnf меняем путь к базе а сокет оставляем на старом месте и все

Не только в этом ошибка. Ошибка в том, что написал, что делал вот по такой-то инструкции, а по факту, ты сделал совсем не по инструкции, а так, как захотелось твоей левой пятке, пути другие, удалил пути, а потом пришёл на форум и говоришь, что делал по инструкции, в которой всё собственно всё правильно, а у тебя ничего не работает.

Так что либо в следующий раз пиши как ты и что делаешь, а не говори что делал так, а на самом деле нет.

А лучше переделай всё на стандартный путь /var/lib/mysql, тебе нужно лишь смонтировать файловую новую систему в /var/lib/mysql и вернуть прежние настройки.

Просто суть в том, что если ты будешь обновлять систему, ставить обновления пакета mysql или mariadb, то при установке обновления твои изменённые настройки сбросятся на те, что указаны в пакете, т.е. /var/lib/mysql, да и другие пакеты, которые будут работать в связке с mysql тоже будут искать /var/lib/mysql и соответственно файл сокета по стандартному пути.

Так что ещё раз советую переделай всё обратно на /var/lib/mysql.

Ну и когда будешь создавать вопрос на форуме описывай что и как ты делал.

Ну вообще-то достаточно симлинка. Перенесли в другую директорию и сделали симлинк на нее. Очень простая процедура.


Только осторожно, эту ручку по-дефолту отключили

Ну и в более старых версиях любят выключать.

Лениво искать, интересно в машке также?

Проверил на тестовой машке на копейке7, все с полными обновлениями, пока работает.

НО при подключении к базе ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Вопрос что делаю не так п.с если указать путь к сокету то заходит mysql -u root -pMyPassword --socket=/новый путь/mysql/mysql.sock

Вопрос что делаю не так п.с если указать путь к сокету то заходит mysql -u root -pMyPassword --socket=/новый путь/mysql/mysql.sock

В инструкции собственно это и написано.

kostik87 ★★★★★ ( 24.06.18 12:35:55 )
Последнее исправление: kostik87 24.06.18 12:36:12 (всего исправлений: 1)

решил это так Просто отредактируйте /etc/my.cnf Добавить следующие строки в my.cnf добавляю [client]

НО все равно я так и попробую база на новом месте а сокет на старом

Что значит новое место и старое? Место должно быть одно.

Т.е. изначально у тебя была одна файловая система, один раздел, на котором были системные файлы Linux и файлы базы mysql, в том числе и сокет, допустим это /dev/sda3.

Затем ты подключил диск, допустим /dev/sdb и на нём создал раздел, допустим /dev/sdb1 и на нём файловую систему.

Остановил сервис mysql.

Далее ты смонтировал /dev/sdb1, допустим в /tmp/sdb1, далее скопировал все файлы из /var/lib/mysql в /tmp/sdb1:

Теперь просто отмонируешь файловую систему из /tmp/sdb1 и монтируешь в /var/lib/mysql.

Всё, файлы базы находятся на другом диске, другой файловой системе, но логически эта файловая система смонтирована в /var/lib/mysql и файлы доступны по прежнему пути, файлы сокекта, даже если они лежат в /var/lib/mysql, а не в /var/run/mysql так же доступны по старому пути, никаких дополнительных настроек делат не нужно!

Теперь просто нужно добавить в /etc/fstab строку с параметрами монтирования /dev/sdb1 в /var/lib/mysql.

Раздел /dev/sdb1 указан в примере, у тебя может быть другой.

Что ты сделал я не знаю. Но перенос части файловой системы linux на отдельный раздел (файловую систему) не должен вызывать проблем, если новая файловая система смонтирована в то место, где находились перемещённые файлы.

Теперь рассказывай что делал ты.

Ну либо переделай как описал я. Ествественно не удаляй базу, оставь копию.

я не рассказываю и не спрашиваю как смонтировать раздел к примеру база лежала /var/lib/mysql/* стала лежать в /другая папка/mysql/* НО старый путь я убил (вот была ошибка) в my.cnf меняем путь к базе а сокет оставляем на старом месте и все

НО старый путь я убил (вот была ошибка) в my.cnf меняем путь к базе а сокет оставляем на старом месте и все

Не только в этом ошибка. Ошибка в том, что написал, что делал вот по такой-то инструкции, а по факту, ты сделал совсем не по инструкции, а так, как захотелось твоей левой пятке, пути другие, удалил пути, а потом пришёл на форум и говоришь, что делал по инструкции, в которой всё собственно всё правильно, а у тебя ничего не работает.

Так что либо в следующий раз пиши как ты и что делаешь, а не говори что делал так, а на самом деле нет.

А лучше переделай всё на стандартный путь /var/lib/mysql, тебе нужно лишь смонтировать файловую новую систему в /var/lib/mysql и вернуть прежние настройки.

Просто суть в том, что если ты будешь обновлять систему, ставить обновления пакета mysql или mariadb, то при установке обновления твои изменённые настройки сбросятся на те, что указаны в пакете, т.е. /var/lib/mysql, да и другие пакеты, которые будут работать в связке с mysql тоже будут искать /var/lib/mysql и соответственно файл сокета по стандартному пути.

Так что ещё раз советую переделай всё обратно на /var/lib/mysql.

Ну и когда будешь создавать вопрос на форуме описывай что и как ты делал.

Ну вообще-то достаточно симлинка. Перенесли в другую директорию и сделали симлинк на нее. Очень простая процедура.


Только осторожно, эту ручку по-дефолту отключили

Ну и в более старых версиях любят выключать.

Лениво искать, интересно в машке также?

Проверил на тестовой машке на копейке7, все с полными обновлениями, пока работает.

Читайте также: