Mysql centos перенос базы
Изредка бывает необходимо импортировать/экспортировать довольно большую базу данных и через 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 — адрес файла бекапа на сервере
Чтобы экспортировать одну таблицу из вашей базы данных, вы должны использовать следующую команду:
Опять же, вам нужно будет заменить имя пользователя, базу данных и имя таблицы на правильную информацию.
Главное меню » Базы данных » База данных MySQL » Как переместить каталог данных MySQL на новое место в CentOS и Ubuntu
(1 оценок, среднее: 5,00 из 5)Это может быть хорошо, если вы работаете в небольшой базе данных, которая не занимает много места. Но на производстве, для увеличения базы данных, вы можете не иметь достаточно места под корневой раздел.
В этом случае, вы можете захотеть перенести базу данных MySQL из корневого раздела в другой раздел.
Чтобы изменить каталог MySQL, вы должны выполнить следующие три шага:
- Переместить файлы базы данных MySQL из /var/lib/mysql на другой раздел
- Изменить файл my.cnf на новый путь каталога
- Обновление параметров безопасности, чтобы отразить изменение каталога: На 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, который находится в новом каталоге.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите 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, все с полными обновлениями, пока работает.
Читайте также: