Как изменить каталог данных MySQL? - программирование

Как изменить каталог данных MySQL?

Можно ли изменить каталог данных MySQL по умолчанию на другой путь? Смогу ли я получить доступ к базам данных из старого местоположения?

4b9b3361

Ответ 1

  • Остановите 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 и вы можете получить доступ к тем же базам данных, что и раньше.

Ответ 2

вам нужно будет скопировать текущие данные в новый каталог и изменить ваш my.cnf ваш MySQL.

[mysqld]
datadir=/your/new/dir/
tmpdir=/your/new/temp/

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

Ответ 3

Сначала вы должны остановить сервер 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

Ответ 4

Быстро и легко:

# 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

Ответ 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

и вы снова используете свою локальную базу данных. Надеюсь, что это поможет.

Ответ 6

Первая остановка mysqld

mysql_install_db --user=mysql \
                 --basedir=/opt/mysql/mysql \
                 --datadir=/opt/mysql/mysql/data

Затем измените datadir в своем /etc/mysql/my.cnf
Запустить mysqld

Примечания:
 # 1: возможно, вам нужно настроить настройки SELinux (попробуйте отключить SELinux в случае возникновения проблем), также может возникнуть проблема с Apparmor (Ubuntu).

# 2: см. Справочник по установке MySQL MySQL

Ответ 7

Сначала остановите свой mysql

sudo service mysql stop

скопировать данные mysql в новое местоположение.

sudo cp -rp /var/lib/mysql /yourdirectory/

если вы используете apparmor, отредактируйте следующий файл и выполните следующие действия

sudo vim /etc/apparmor.d/usr.sbin.mysqld

Замените где/var/lib/by/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

Ответ 8

Если вы, как и я, находитесь на Debian и хотите переместить mysql dir к себе домой или к пути /home/..., решение:

  • Остановите mysql с помощью "sudo service mysql stop"
  • измените переменную "datadir" на новый путь в "/etc/mysql/mariadb.conf.d/50-server.cnf"
  • Сделайте резервную копию /var/lib/mysql: "cp -R -p/var/lib/mysql/path_to_my_backup"
  • удалите этот каталог: "sudo rm -R/var/lib/mysql"
  • Переместить данные в новый каталог: "cp -R -p/path_to_my_backup/path_new_dir
  • Изменить доступ с помощью "sudo chown -R mysql: mysql/path_new_dir"
  • Измените переменную "ProtectHome" на "false" в "/etc/systemd/system/mysqld.service"
  • Перезагрузите systemd с помощью "sudo systemctl daemon -R eload"
  • Перезапустите mysql с помощью "перезапуска службы mysql"

Однажды, чтобы найти решение для меня в документации mariadb. Надеюсь, это поможет некоторым парням!

Ответ 9

Это решение работает в Windows 7 с помощью Workbench. Для этого вам понадобятся права администратора. Он создает соединение (например, ярлык), где бы вы не захотели хранить свои данные.

Откройте Workbench и выберите INSTANCE - Startup/Shutdown Остановить сервер

Установить мастер соединения из https://bitsum.com/junctionmaster.php

Перейдите к C:\ProgramData\MySQL\MySQL Server 5.6

Щелкните правой кнопкой мыши на Data и выберите "MOVE, а затем LINK folder to..." Принять предупреждение Пункт назначения "Ваш новый каталог данных здесь без кавычек" Нажмите MOVE AND LINK

Теперь перейдите в "Ваш новый каталог данных без кавычек"

Щелкните правой кнопкой мыши на Data Перейдите на вкладку безопасности. Нажмите "Изменить" Нажмите Добавить Введите NETWORK SERVICE, затем проверьте имена Нажмите ОК. Установите флажок Разрешить полный доступ, а затем ОК

Вернитесь в Workbench и запустите сервер

Этот метод работал у меня с использованием MySQL Workbench 6.2 на Windows 7 Enterprise.

Ответ 10

Все как @user1341296 сказал, плюс...

Лучше не менять /etc/mysql/my.cnf Вместо этого вы хотите создать новый файл /etc/mysql/conf.d/ext.cnf (любое имя, но расширение должно быть cnf)

И добавьте в него свое изменение:

[mysqld]
datadir=/vagrant/mq/mysql

Таким образом,

  • Вам не нужно изменять существующий файл (проще для сценариев автоматизации)
  • Нет проблем с обновлением версии MySQL (и она настраивается!).

Ответ 11

Мне часто приходится делать это при обновлении машин, переходя от коробки к коробке. В дополнение к перемещению /var/lib/mysql в лучшее место, мне часто приходится восстанавливать старые таблицы БД из старой установки MySQL. Для этого...

  • Остановить mysql. Следуйте инструкциям выше, это необходимо.
  • Скопировать каталоги базы данных - будет одна для каждой из вашей старой базы данных установки - в новое местоположение DATADIR. Но опускайте каталоги "mysql" и "performance_schema".
  • Правильные разрешения между скопированными каталогами баз данных. Собственность должна быть mysql: mysql, каталоги должны быть 700, а файлы должны быть 660.
  • Перезапустить mysql. В зависимости от вашей установки файлы старой версии DB должны быть обновлены.

Ответ 12

Нам пришлось переместить 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

Переместите реестр данных.

mv -f /var/lib/mysql/* /home/mysql

Создайте постоянное монтирование и выполните его.

echo "/home/mysql /var/lib/mysql none    bind   0 0" >> /etc/fstab
mount -a

Перезагрузите сервер.

systemctl start mysql

Ответ 13

Если вы хотите сделать это программно (без ручной текстовой записи с gedit), здесь версия для файла Docker на основе user1341296 ответьте выше:

FROM spittet/ruby-mysql
MAINTAINER [email protected]

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 здесь: https://hub.docker.com/r/richardjecooke/ruby-mysql-in-memory/

Ответ 14

Если вы пользователь Windows и приземлились здесь, чтобы узнать, что все ответы для пользователей Linux, не разочаровывайтесь! Я не позволю тебе тратить время так, как я.

Немного болтовни до решения:

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

Теперь вы хотите убедиться, что достаточно места для хранения больших баз данных, которые вы могли бы создать в будущем, и поэтому вы подумали: "Эй! Я хочу поместить его в другой диск, у которого больше места.

Итак, вы делаете следующее.

Шаг - 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: Готово! Теперь вернемся к работе!

Ответ 15

Сначала вы должны знать, где находится ваш файл конфигурации? где находится ваш файл конфигурации?

ЕСЛИ вы установили с установкой apt-get или yum.

файл конфигурации может отображаться в

/etc/mysql/my.cnf

файл данных может появиться в

/вар/Lib/MySQL

и что вы должны сделать, это

  • остановить mysql
  • измените данные mysql на новый dirctory
  • изменить конфигурационный файл
  • перезагрузить конфигурационный файл
  • перезапустить mysql

а затем выполненные задания.

Но если вы не установили его с помощью apt или yum, директиву может не понравиться это , и вы можете найти файлы mysql с помощью

whereis mysql

Ответ 16

В 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

но подозревайте, что даже это не было необходимо.

Ответ 17

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

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

Ответ 18

Вышеуказанные шаги являются фундаментальными и основными. Я последовал за ними и все еще получил ошибку "mysql не удалось запустить".

Чтобы новая папка сохраняла данные MySQL, вам необходимо убедиться, что папка имеет права доступа и права владения mysql: mysql.

Помимо этого, он должен проверить права доступа и принадлежность родительского каталога mysql, если он имеет, скажем, /data/mysql/. Здесь/data/каталог должен быть root: root. Я исправил ошибку "mysql не удалось запустить" после смены владельца родительского каталога /mysql. ОС в моей виртуальной машине - RHEL 7.6.

Ответ 19

Если вы используете SE linux, установите его в разрешающий режим, отредактировав /etc/selinux/config и изменение SELINUX = принудительное выполнение SELINUX = разрешающий