Выше не удалось решить проблему для меня на Ubuntu 12.04 (Precise). Я обнаружил, что нужно отредактировать файл /etc/apparmor.d/tunables/alias, включив в него строку "alias / var / lib / mysql / -> / newpath /," с этим на месте, мне не нужно было никаких изменения в любом из других файлов AppArmor. Он работал сразу после перезапуска AppArmor с помощью «/etc/init.d/apparmor restart» и MySQL с «restart mysql».
в издании Мак (что необходимо) не забывайте запятую в конце строкиalias /var/lib/mysql/ -> /newpath/,
Майкл
4
Не могу не подчеркнуть, насколько важен приведенный выше комментарий Мишеля: ДОБАВЬТЕ ТРЕЙЛИНГ КОММУ и сохраните несколько нейронов. Извините за шапки.
alx
2
Не работает для меня Я получил работу для mysql.service не удалось. Смотрите 'systemctl status mysql.service' и 'journalctl -xn' для подробностей при попытке перезапустить mysqld, и ошибка в том, что диск переполнен. У него 500 ГБ свободного места ...
Фрэнк Х.
17
Быстро и легко сделать:
#Create new directory for MySQL data
mkdir /new/dir/for/mysql
#Set ownership of new directory tomatch existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql#Set permissions on new directory tomatch existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql# Stop MySQL before copying over files
service mysql stop
# Copy all files indefault directory,to new one, retaining perms (-p)
cp -rp /var/lib/mysql/* /new/dir/for/mysql/
Отредактируйте /etc/my.cnfфайл и [mysqld]добавьте следующую строку:
datadir=/new/dir/for/mysql/
Если вы используете CageFS (с или без CloudLinux) и хотите изменить каталог MySQL, вы ДОЛЖНЫ добавить новый каталог в этот файл:
Большое спасибо, и, если вы хотите полностью написать сценарий, как я, вы можете использовать это: sed -i 's | datadir = / var / lib / mysql | datadir = / data / var / lib / mysql | g' / etc / my.cnf
беримболо
Это не сработало для меня. Я попробовал это и много других альтернатив. Я прихожу к тому же выводу, что и user3338098, когда он говорит, что это единственный способ, который работает: serverfault.com/questions/503887/…
Volksman
@Volksman все, что говорит эта ссылка, он должен был удалить и переустановить ... скорее всего, у вас обоих есть какие-то другие проблемы, специфичные для сервера, так как MySQL и MariaDB поддерживают конфигурацию datadir, и я недавно сделал это (6 месяцев назад) на другом сервер без проблем
sMyles
@sMyles да, его удалили и установили, но после монтирования / var / lib / mysql в другом месте, то есть, в отличие от того, к которому был ранее / var был подключен мегасегмент. Если есть какая-то конкретная проблема с нашими системами, было бы здорово понять, что это так. Это была новая стандартная установка ОС Centos 7 с RAID 10 с 8-кратным жестким диском, но обычно такие детали дискового массива прозрачны для программного обеспечения.
Volksman
15
вам придется скопировать текущие данные в новый каталог и изменить my.cnfсвой MySQL.
Ну, это то, что я не могу сделать. Я хочу изменить каталог, но я хочу создать новые базы данных в новом каталоге. И хотите получить доступ как к старому каталогу, так и к новым базам данных каталога.
MySQL DBA
1
@ MySQL DBA: если вы используете ln -sстатическую символическую рысь, разве это не сделает это?
RageZ
Ну, я немного запутался с использованием этой команды. Как я объяснил ранее, я хочу создать новые базы данных в новом каталоге. Это возможно с символической ссылкой.
MySQL DBA
1
Вы можете создать новый каталог, использовать символическую ссылку, чтобы файл появился в новом каталоге и изменить свойmy.cnf
Файл /etc/systemd/system/mysqld.service здесь отсутствует. Есть идеи, где мне искать?
Рон Пигготт
1
Для тех , кто использует MariaDB службы файл находится в /lib/systemd/system/mariadb@.service
Рон Пиготт
5
Я хотел сохранить базу данных на моей машине, но также иметь данные на внешнем жестком диске и переключаться между ними.
Если вы работаете на Mac и установили MySQL с помощью Homebrew, это должно сработать для вас. В противном случае вам просто нужно будет заменить соответствующие места для MySQL datadirна вашем компьютере.
#cd to my data dir location
cd /usr/local/var/#copy contents of local data directory to the new location
cp -r mysql//Volumes/myhd/mydatadir/#temporarily move the old datadir
mv mysql mysql.local
#symlink to the new location
ln -s /Volumes/myhd/mydatadir mysql
Затем, когда вы хотите переключиться обратно, просто выполните:
mv mysql mysql.remote
mv mysql.local mysql
и вы снова используете свою локальную базу данных. Надеюсь, это поможет.
это не совсем отвечает на поставленный вопрос - однако это было именно то, что я искал - и это аккуратный способ обработки граничного случая / ошибки, что my.cnf плохо обрабатывает пробелы: bugs.mysql.com /bug.php?id=26033 . Я свяжу этот обходной путь с этим сообщением об ошибке.
Затем измените датадир в вашем /etc/mysql/my.cnf
Start mysqld
Ноты:
# 1: возможно, вам нужно изменить настройки SELinux (попробуйте отключить SELinux в случае проблем), Apparmor (Ubuntu) также может быть проблемой.
возможно, это не работает для другого дистрибутива, но если вы используете Ubuntu, это прекрасно работает для меня, и я меняю путь для каждого нового установленного сервера Ubuntu, чтобы включить raid0.
naddame
2
Я знаю, что люди это голосуют, но я хочу сказать вам, что это спасло мой день. Спасибо!
Даниэль Лоурейро
3
Это решение работает в Windows 7 с использованием Workbench. Для этого вам потребуются права администратора. Это создает соединение (как ярлык), где вы действительно хотите хранить свои данные
Перейдите к C: \ ProgramData \ MySQL \ MySQL Server 5.6.
Щелкните правой кнопкой мыши на Data и выберите «MOVE, а затем LINK folder to ...». Примите пункт назначения «Point» для «Ваш новый каталог данных здесь без кавычек». Нажмите MOVE AND LINK
Теперь перейдите в «Ваш новый каталог данных здесь без кавычек»
Щелкните правой кнопкой мыши на Data. Перейдите на вкладку безопасности. Нажмите Edit. Нажмите Add Type NETWORK SERVICE, затем Check Names. Нажмите OK. Установите флажок Allow Full Control, а затем нажмите OK.
Вернитесь в Workbench и запустите сервер
Этот метод работал для меня, используя MySQL Workbench 6.2 на Windows 7 Enterprise.
Если вы пользователь Windows и оказались здесь, чтобы узнать, что все ответы предназначены для пользователей Linux, не разочаровывайтесь! Я не позволю тебе тратить время так, как я.
Немного дерьма перед решением:
MySQL использует каталог Data для хранения данных различных баз данных, которые вы создаете. Ну, в конце концов, он должен хранить их в виде файлов с некоторыми дополнительными фокусами в приложении и формате файлов, чтобы гарантировать, что обещания базы данных, которые вы изучили в классах баз данных, не повреждены.
Теперь вы хотите убедиться, что достаточно места для хранения больших баз данных, которые вы можете создать в будущем, и вы подумали: «Эй! Я хочу поместить это в другой двигатель, у которого есть больше места.
Итак, вы делаете следующее.
Шаг - 1 : Остановка службы MySQL.
Window Key+ R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80isfor version 8.0, look for the one you've).
Stop it.(Right click, Stop)
Шаг 2 : выяснение текущего каталога данных
Goto C:\ProgramData\MySQL\MySQL Server 8.0
По умолчанию здесь должна быть папка с именем Data , это та, которая используется MySQL в настройках по умолчанию (при условии, что они не нашли другого лучшего местоположения), но давайте проверим это.
найти my.ini файл, должно быть прямо там.
Откройте его в редакторе (возможно, Notepad ++).
Сделайте CTRL + F, чтобы узнать datadirв файле.
Все, что здесь упомянуто, является фактическим местоположением, используемым в настоящее время MySQL для каталога данных. Это то, что вы хотите изменить.
Шаг - 3 : Замена его новым каталогом данных.
Допустим, вы хотите, чтобы ваш новый каталог данных был W: __ MySQL_Data. Давайте изменим
datadirзначение в my.iniфайле на это значение. Оставьте предыдущее значение закомментированным, чтобы вам не пришлось его запоминать.
# Path to the database root
# datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data
datadir=W:/__MySQL_Data
Теперь используйте xcopyдля копирования по умолчанию datadirв W:\. Запустите командную строку (Window + R, cmd, Enter)
>> xcopy "\C:\ProgramData\MySQL\MySQL Server 8.0""W:\"/E /H /K /O /X
И переименуйте скопированную папку в новую datadir значение, которое вы изменили. Вот:W:/__MySQL_Data
Почему бы просто не скопировать? Ну, потому что это не COOL !, это поможет вам не потерять разрешения для скопированной папки, так что при перезапуске MySQL80это не выдаст глупую ошибку: «Служба MySQL80 на локальном компьютере запускалась, а затем останавливалась. Некоторые службы автоматически отключаются, если они не используются другими службами или программами ". - Предоставлено Microsoft
Шаг 4 : перезапуск службы
Well, go back to the Services Manager toStart again,"MySQL80" that you stopped,to restart it again.
Спасибо, что было полезно, но предупреждение: my.ini недоступен для записи обычному пользователю, если вы не измените его разрешения. Да, и ProgramData - это скрытая папка, поэтому вы должны изменить настройки папки Explorer, чтобы увидеть ее.
JonP
1
Мне часто нужно это делать при обновлении машин, переходя от коробки к коробке. В дополнение к перемещению / var / lib / mysql в лучшее место, мне часто приходится восстанавливать старые таблицы БД из старой установки MySQL. Для того чтобы сделать это ...
Стоп mysql. Следуйте инструкциям выше, это необходимо.
Скопируйте каталоги базы данных - по одному для каждой базы данных вашей старой установки - в новое расположение DATADIR. Но пропустите каталоги "mysql" и "performance_schema".
Правильные разрешения среди скопированных каталогов базы данных. Владение должно быть mysql: mysql, каталогов должно быть 700, а файлов должно быть 660.
Перезапустите MySQL. В зависимости от вашей установки, старые версии файлов БД должны быть обновлены.
извините за отрицательное голосование, это решение может быть правильным, не пробовал его.
user3338098
1
Нам пришлось переместить MySQL в /homeкаталог, потому что он был сопоставлен с другим физическим диском. Чтобы упростить работу, вместо изменения каталога в my.cnf мы сопоставили новый каталог /home/mysqlс местом исходного каталога./var/lib/mysql . У нас это работает как брелок (проверено на CentOS 7.1).
Создайте новый каталог и установите правильные разрешения.
Под SuSE 13.1 это прекрасно работает, чтобы переместить каталог данных mysql в другое место, например, в / home / example_user /, и дать ему более информативное имя:
В / var / lib /:
# mv -T mysql /home/example_user/mysql_datadir
# ln -s /home/example_user/mysql_datadir ./mysql
Я перезапустил mysql:
# systemctl restart mysql.service
но подозреваю, что даже в этом не было необходимости.
Для одной из сред я изменил каталог данных mysql на новое место, но во время перезапуска сервера mysql это заняло время. Поэтому я проверил порт и обнаружил, что другой процесс прослушивает порт mysql. Поэтому я убил процесс и перезапустил сервер MySQL, и он работал хорошо.
Добро пожаловать в стек переполнения! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Тим Дикманн
0
Вышеуказанные шаги являются фундаментальными и основными. Я последовал за ними и все еще получил ошибку «mysql не удалось запустить».
Чтобы новая папка сохраняла данные mysql, вам необходимо убедиться, что папка имеет разрешения и владельца mysql: mysql.
Помимо этого, он должен проверить права доступа и принадлежность родительского каталога mysql, если он имеет, скажем, / data / mysql /. Здесь / data / каталог должен быть root: root. Я исправил ошибку «mysql не удалось запустить» после смены владельца родительского каталога / mysql. ОС в моей виртуальной машине - RHEL 7.6.
Я попробовал selinux в RHEL7.6, изменив SELINUX = принудительно на SELINUX = permissive, у меня не получилось.
user3325137Вильям
0
Также возможно символическую ссылку на dadadir. По крайней мере, в среде macOS, dev.
(доморощенный) например
# make sure you're not overwriting anything important,backup existing data
mv /usr/local/var/mysql [your preferred data directory]
ln -s [your preferred data directory]/usr/local/var/mysql
Если вы используете SE linux, установите его в разрешающий режим, отредактировав / etc / selinux / config и изменив SELINUX = принудительно на SELINUX = разрешающий
Ответы:
Остановите MySQL, используя следующую команду:
Скопируйте существующий каталог данных (по умолчанию находится в
/var/lib/mysql
) с помощью следующей команды:отредактируйте файл конфигурации MySQL с помощью следующей команды:
Найдите запись
datadir
и измените путь (который должен быть/var/lib/mysql
) к новому каталогу данных.В терминале введите команду:
Ищите строки, начинающиеся с
/var/lib/mysql
. Изменитесь/var/lib/mysql
в строках с новым путем.Сохраните и закройте файл.
Перезапустите профили AppArmor с помощью команды:
Перезапустите MySQL с помощью команды:
Теперь войдите в MySQL, и вы получите доступ к тем же базам данных, что и раньше.
источник
alias /var/lib/mysql/ -> /newpath/,
Быстро и легко сделать:
Отредактируйте
/etc/my.cnf
файл и[mysqld]
добавьте следующую строку:Если вы используете CageFS (с или без CloudLinux) и хотите изменить каталог MySQL, вы ДОЛЖНЫ добавить новый каталог в этот файл:
И затем выполните эту команду:
источник
вам придется скопировать текущие данные в новый каталог и изменить
my.cnf
свой MySQL.Вы должны скопировать базу данных, когда сервер не работает .
источник
ln -s
статическую символическую рысь, разве это не сделает это?my.cnf
Сначала вы должны остановить сервер MySQL. например
После этого вы должны скопировать старый каталог данных (например, / var / lib / mysql) вкл. привилегии для вашего нового каталога через
Теперь вы можете изменить
/etc/mysql/my.cnf
данные и перезапустить серверисточник
Если вы, как и я, находитесь на Debian и хотите переместить mysql dir к себе домой или к пути / home / ..., решение:
Однажды, чтобы найти решение для меня в документации mariadb. Надеюсь, это поможет некоторым парням!
источник
Я хотел сохранить базу данных на моей машине, но также иметь данные на внешнем жестком диске и переключаться между ними.
Если вы работаете на Mac и установили MySQL с помощью Homebrew, это должно сработать для вас. В противном случае вам просто нужно будет заменить соответствующие места для MySQL
datadir
на вашем компьютере.Затем, когда вы хотите переключиться обратно, просто выполните:
и вы снова используете свою локальную базу данных. Надеюсь, это поможет.
источник
Первая остановка mysqld
Затем измените датадир в вашем
/etc/mysql/my.cnf
Start mysqld
Ноты:
# 1: возможно, вам нужно изменить настройки SELinux (попробуйте отключить SELinux в случае проблем), Apparmor (Ubuntu) также может быть проблемой.
# 2: см. MySQL Install DB Reference
источник
Сначала останови свой mysql
скопируйте данные MySQL в новое место.
если вы используете apparmor, отредактируйте следующий файл и сделайте следующее
Замените, где / var / lib / на / yourdirectory /, затем добавьте следующее, если его нет в файле
Сохраните файл с помощью команды
Отредактируйте файл my.cnf
Замените где / var / lib / на / yourdirectory /, затем сохраните командой
наконец начать MySQL
@ подробнее о raid0, оптимизации ici
источник
Это решение работает в Windows 7 с использованием Workbench. Для этого вам потребуются права администратора. Это создает соединение (как ярлык), где вы действительно хотите хранить свои данные
Откройте Workbench и выберите INSTANCE - Запуск / останов Останов сервера
Установите Junction Master с https://bitsum.com/junctionmaster.php
Перейдите к C: \ ProgramData \ MySQL \ MySQL Server 5.6.
Щелкните правой кнопкой мыши на Data и выберите «MOVE, а затем LINK folder to ...». Примите пункт назначения «Point» для «Ваш новый каталог данных здесь без кавычек». Нажмите MOVE AND LINK
Теперь перейдите в «Ваш новый каталог данных здесь без кавычек»
Щелкните правой кнопкой мыши на Data. Перейдите на вкладку безопасности. Нажмите Edit. Нажмите Add Type NETWORK SERVICE, затем Check Names. Нажмите OK. Установите флажок Allow Full Control, а затем нажмите OK.
Вернитесь в Workbench и запустите сервер
Этот метод работал для меня, используя MySQL Workbench 6.2 на Windows 7 Enterprise.
источник
Все, как сказал @ user1341296, плюс ...
Лучше не менять.
/etc/mysql/my.cnf
Вместо этого вы хотите создать новый файл/etc/mysql/conf.d/ext.cnf
(любое имя, но расширение должно бытьcnf
)И вставьте в него ваши изменения:
В этом случае
источник
Если вы пользователь Windows и оказались здесь, чтобы узнать, что все ответы предназначены для пользователей Linux, не разочаровывайтесь! Я не позволю тебе тратить время так, как я.
Немного дерьма перед решением:
MySQL использует каталог Data для хранения данных различных баз данных, которые вы создаете. Ну, в конце концов, он должен хранить их в виде файлов с некоторыми дополнительными фокусами в приложении и формате файлов, чтобы гарантировать, что обещания базы данных, которые вы изучили в классах баз данных, не повреждены.
Теперь вы хотите убедиться, что достаточно места для хранения больших баз данных, которые вы можете создать в будущем, и вы подумали: «Эй! Я хочу поместить это в другой двигатель, у которого есть больше места.
Итак, вы делаете следующее.
Шаг - 1 : Остановка службы MySQL.
Шаг 2 : выяснение текущего каталога данных
По умолчанию здесь должна быть папка с именем
Data
, это та, которая используется MySQL в настройках по умолчанию (при условии, что они не нашли другого лучшего местоположения), но давайте проверим это.найти
my.ini
файл, должно быть прямо там.Откройте его в редакторе (возможно, Notepad ++).
Сделайте CTRL + F, чтобы узнать
datadir
в файле.Все, что здесь упомянуто, является фактическим местоположением, используемым в настоящее время MySQL для каталога данных. Это то, что вы хотите изменить.
Шаг - 3 : Замена его новым каталогом данных.
Допустим, вы хотите, чтобы ваш новый каталог данных был W: __ MySQL_Data. Давайте изменим
datadir
значение вmy.ini
файле на это значение. Оставьте предыдущее значение закомментированным, чтобы вам не пришлось его запоминать.Теперь используйте
xcopy
для копирования по умолчаниюdatadir
вW:\
. Запустите командную строку (Window + R, cmd, Enter)И переименуйте скопированную папку в новую
datadir
значение, которое вы изменили. Вот:W:/__MySQL_Data
Почему бы просто не скопировать? Ну, потому что это не COOL !, это поможет вам не потерять разрешения для скопированной папки, так что при перезапуске
MySQL80
это не выдаст глупую ошибку: «Служба MySQL80 на локальном компьютере запускалась, а затем останавливалась. Некоторые службы автоматически отключаются, если они не используются другими службами или программами ". - Предоставлено MicrosoftШаг 4 : перезапуск службы
Шаг 5 : Готово! А теперь возвращайся на работу !!
источник
Мне часто нужно это делать при обновлении машин, переходя от коробки к коробке. В дополнение к перемещению / var / lib / mysql в лучшее место, мне часто приходится восстанавливать старые таблицы БД из старой установки MySQL. Для того чтобы сделать это ...
источник
Нам пришлось переместить MySQL в
/home
каталог, потому что он был сопоставлен с другим физическим диском. Чтобы упростить работу, вместо изменения каталога в my.cnf мы сопоставили новый каталог/home/mysql
с местом исходного каталога./var/lib/mysql
. У нас это работает как брелок (проверено на CentOS 7.1).Создайте новый каталог и установите правильные разрешения.
Остановите MySQL, если работает.
Переместить данные dir.
Создайте постоянное монтирование и выполните его.
Перезагрузите сервер.
источник
Если вы хотите сделать это программно (без ручного ввода текста с помощью gedit), вот версия для Dockerfile, основанная на ответе user1341296 выше:
Доступно в Docker hub здесь: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
источник
Во-первых, вы должны знать, где находится ваш конфигурационный файл? где твой конфигурационный файл?
Если вы установили с помощью apt-get или yum install。
Конфигурационный файл может появиться в
файл данных может появиться в
и что вы должны сделать, это
и тогда работа сделана.
Но если вы не установили его с помощью apt или yum, direcotry может не понравиться, и вы можете найти файлы mysql с
источник
Под SuSE 13.1 это прекрасно работает, чтобы переместить каталог данных mysql в другое место, например, в / home / example_user /, и дать ему более информативное имя:
В / var / lib /:
Я перезапустил mysql:
но подозреваю, что даже в этом не было необходимости.
источник
Для одной из сред я изменил каталог данных mysql на новое место, но во время перезапуска сервера mysql это заняло время. Поэтому я проверил порт и обнаружил, что другой процесс прослушивает порт mysql. Поэтому я убил процесс и перезапустил сервер MySQL, и он работал хорошо.
Я следовал ниже шагов для изменения каталога данных, который работал отлично. изменить каталог данных mysql в Linux
источник
Вышеуказанные шаги являются фундаментальными и основными. Я последовал за ними и все еще получил ошибку «mysql не удалось запустить».
Чтобы новая папка сохраняла данные mysql, вам необходимо убедиться, что папка имеет разрешения и владельца mysql: mysql.
Помимо этого, он должен проверить права доступа и принадлежность родительского каталога mysql, если он имеет, скажем, / data / mysql /. Здесь / data / каталог должен быть root: root. Я исправил ошибку «mysql не удалось запустить» после смены владельца родительского каталога / mysql. ОС в моей виртуальной машине - RHEL 7.6.
источник
Также возможно символическую ссылку на dadadir. По крайней мере, в среде macOS, dev.
(доморощенный) например
Перезапустите MySQL.
источник
Если вы используете SE linux, установите его в разрешающий режим, отредактировав / etc / selinux / config и изменив SELINUX = принудительно на SELINUX = разрешающий
источник
datadir
свойства