Можно ли изменить каталог данных MySQL по умолчанию на другой путь? Смогу ли я получить доступ к базам данных из старого местоположения?
Можно ли изменить каталог данных MySQL по умолчанию на другой путь? Смогу ли я получить доступ к базам данных из старого местоположения?
Ответы:
Остановите MySQL, используя следующую команду:
sudo /etc/init.d/mysql stop
Скопируйте существующий каталог данных (по умолчанию находится в /var/lib/mysql
) с помощью следующей команды:
sudo cp -R -p /var/lib/mysql /newpath
отредактируйте файл конфигурации MySQL с помощью следующей команды:
sudo gedit /etc/mysql/my.cnf # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
Найдите запись datadir
и измените путь (который должен быть /var/lib/mysql
) к новому каталогу данных.
В терминале введите команду:
sudo gedit /etc/apparmor.d/usr.sbin.mysqld
Ищите строки, начинающиеся с /var/lib/mysql
. Изменитесь /var/lib/mysql
в строках с новым путем.
Сохраните и закройте файл.
Перезапустите профили AppArmor с помощью команды:
sudo /etc/init.d/apparmor reload
Перезапустите MySQL с помощью команды:
sudo /etc/init.d/mysql restart
Теперь войдите в MySQL, и вы получите доступ к тем же базам данных, что и раньше.
alias /var/lib/mysql/ -> /newpath/,
Быстро и легко сделать:
# Create new directory for MySQL data
mkdir /new/dir/for/mysql
# Set ownership of new directory to match existing one
chown --reference=/var/lib/mysql /new/dir/for/mysql
# Set permissions on new directory to match existing one
chmod --reference=/var/lib/mysql /new/dir/for/mysql
# Stop MySQL before copying over files
service mysql stop
# Copy all files in default 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, вы ДОЛЖНЫ добавить новый каталог в этот файл:
/etc/cagefs/cagefs.mp
И затем выполните эту команду:
cagefsctl --remount-all
вам придется скопировать текущие данные в новый каталог и изменить my.cnf
свой MySQL.
[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/
Вы должны скопировать базу данных, когда сервер не работает .
ln -s
статическую символическую рысь, разве это не сделает это?
my.cnf
Сначала вы должны остановить сервер MySQL. например
# /etc/init.d/mysql stop
После этого вы должны скопировать старый каталог данных (например, / var / lib / mysql) вкл. привилегии для вашего нового каталога через
# cp -R -p /var/lib/mysql /new/data/dir
Теперь вы можете изменить /etc/mysql/my.cnf
данные и перезапустить сервер
# /etc/init.d/mysql restart
Если вы, как и я, находитесь на Debian и хотите переместить mysql dir к себе домой или к пути / home / ..., решение:
Однажды, чтобы найти решение для меня в документации mariadb. Надеюсь, это поможет некоторым парням!
Я хотел сохранить базу данных на моей машине, но также иметь данные на внешнем жестком диске и переключаться между ними.
Если вы работаете на 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
и вы снова используете свою локальную базу данных. Надеюсь, это поможет.
Первая остановка mysqld
mysql_install_db --user=mysql \
--basedir=/opt/mysql/mysql \
--datadir=/opt/mysql/mysql/data
Затем измените датадир в вашем /etc/mysql/my.cnf
Start mysqld
Ноты:
# 1: возможно, вам нужно изменить настройки SELinux (попробуйте отключить SELinux в случае проблем), Apparmor (Ubuntu) также может быть проблемой.
# 2: см. MySQL Install DB Reference
Сначала останови свой mysql
sudo service mysql stop
скопируйте данные MySQL в новое место.
sudo cp -rp /var/lib/mysql /yourdirectory/
если вы используете apparmor, отредактируйте следующий файл и сделайте следующее
sudo vim /etc/apparmor.d/usr.sbin.mysqld
Замените, где / var / lib / на / yourdirectory /, затем добавьте следующее, если его нет в файле
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Сохраните файл с помощью команды
:wq
Отредактируйте файл my.cnf
sudo vim /etc/mysql/my.cnf
Замените где / var / lib / на / yourdirectory /, затем сохраните командой
:wq
наконец начать MySQL
sudo service mysql start
@ подробнее о 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
)
И вставьте в него ваши изменения:
[mysqld]
datadir=/vagrant/mq/mysql
В этом случае
Если вы пользователь Windows и оказались здесь, чтобы узнать, что все ответы предназначены для пользователей Linux, не разочаровывайтесь! Я не позволю тебе тратить время так, как я.
Немного дерьма перед решением:
MySQL использует каталог Data для хранения данных различных баз данных, которые вы создаете. Ну, в конце концов, он должен хранить их в виде файлов с некоторыми дополнительными фокусами в приложении и формате файлов, чтобы гарантировать, что обещания базы данных, которые вы изучили в классах баз данных, не повреждены.
Теперь вы хотите убедиться, что достаточно места для хранения больших баз данных, которые вы можете создать в будущем, и вы подумали: «Эй! Я хочу поместить это в другой двигатель, у которого есть больше места.
Итак, вы делаете следующее.
Шаг - 1 : Остановка службы MySQL.
Window Key + R - will open Run
servies.msc - will open services manager
Locate MySQL80 (80 is for 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 to Start again,
"MySQL80" that you stopped, to restart it again.
Шаг 5 : Готово! А теперь возвращайся на работу !!
Мне часто нужно это делать при обновлении машин, переходя от коробки к коробке. В дополнение к перемещению / var / lib / mysql в лучшее место, мне часто приходится восстанавливать старые таблицы БД из старой установки MySQL. Для того чтобы сделать это ...
Нам пришлось переместить MySQL в /home
каталог, потому что он был сопоставлен с другим физическим диском. Чтобы упростить работу, вместо изменения каталога в my.cnf мы сопоставили новый каталог /home/mysql
с местом исходного каталога./var/lib/mysql
. У нас это работает как брелок (проверено на CentOS 7.1).
Создайте новый каталог и установите правильные разрешения.
mkdir -p /home/mysql
chmod 755 /home/mysql
chown mysql:mysql /home/mysql
Остановите MySQL, если работает.
systemctl stop mysql
Переместить данные dir.
mv -f /var/lib/mysql/* /home/mysql
Создайте постоянное монтирование и выполните его.
echo "/home/mysql /var/lib/mysql none bind 0 0" >> /etc/fstab
mount -a
Перезагрузите сервер.
systemctl start mysql
Если вы хотите сделать это программно (без ручного ввода текста с помощью gedit), вот версия для Dockerfile, основанная на ответе user1341296 выше:
FROM spittet/ruby-mysql
MAINTAINER you@gmail.com
RUN cp -R -p /var/lib/mysql /dev/shm && \
rm -rf /var/lib/mysql && \
sed -i -e 's,/var/lib/mysql,/dev/shm/mysql,g' /etc/mysql/my.cnf && \
/etc/init.d/mysql restart
Доступно в Docker hub здесь: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/
Во-первых, вы должны знать, где находится ваш конфигурационный файл? где твой конфигурационный файл?
Если вы установили с помощью apt-get или yum install。
Конфигурационный файл может появиться в
/etc/mysql/my.cnf
файл данных может появиться в
/ Var / Библиотека / MySQL
и что вы должны сделать, это
и тогда работа сделана.
Но если вы не установили его с помощью apt или yum, direcotry может не понравиться, и вы можете найти файлы mysql с
где Mysql
Под 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, и он работал хорошо.
Я следовал ниже шагов для изменения каталога данных, который работал отлично. изменить каталог данных mysql в Linux
Вышеуказанные шаги являются фундаментальными и основными. Я последовал за ними и все еще получил ошибку «mysql не удалось запустить».
Чтобы новая папка сохраняла данные mysql, вам необходимо убедиться, что папка имеет разрешения и владельца mysql: mysql.
Помимо этого, он должен проверить права доступа и принадлежность родительского каталога mysql, если он имеет, скажем, / data / mysql /. Здесь / data / каталог должен быть root: root. Я исправил ошибку «mysql не удалось запустить» после смены владельца родительского каталога / mysql. ОС в моей виртуальной машине - RHEL 7.6.
Также возможно символическую ссылку на 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
Перезапустите MySQL.
Если вы используете SE linux, установите его в разрешающий режим, отредактировав / etc / selinux / config и изменив SELINUX = принудительно на SELINUX = разрешающий
datadir
свойства