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

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

28 ответов

  1. Остановите MySQL, используя следующую команду:

    sudo /etc/init.d/mysql stop
    
  2. Скопируйте существующий каталог данных (по умолчанию находится в /var/lib/mysql) с помощью следующей команды:

    sudo cp -R -p /var/lib/mysql /newpath
    
  3. отредактируйте файл конфигурации MySQL с помощью следующей команды:

    sudo gedit /etc/mysql/my.cnf   # or perhaps /etc/mysql/mysql.conf.d/mysqld.cnf
    
  4. Ищите запись для datadirи измените путь (который должен быть /var/lib/mysql) в новый каталог данных.

  5. В терминале введите команду:

    sudo gedit /etc/apparmor.d/usr.sbin.mysqld
    
  6. Ищите строки, начинающиеся с /var/lib/mysql, + Изменить /var/lib/mysql в линии с новым путем.

  7. Сохраните и закройте файл.

  8. Перезапустите профили AppArmor с помощью команды:

    sudo /etc/init.d/apparmor reload
    
  9. Перезапустите MySQL с помощью команды:

    sudo /etc/init.d/mysql restart
    
  10. Теперь войдите в MySQL, и вы получите доступ к тем же базам данных, что и раньше.

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

# 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/

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

Если вы пользователь 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: Готово! А теперь возвращайся на работу!!

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

  • Остановите 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-reload"
  • Перезапустите mysql с помощью "перезапуска службы mysql"

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

Сначала останови свой 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

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

Если вы работаете на 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

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

Я мог успешно изменить каталог данных MySQL или MariaDB и решить все связанные с этим проблемы в Fedora 30. Я думаю, что следующие шаги будут работать в других дистрибутивах.

Примечание. Пользователи Debian-based такие дистрибутивы, как Ubuntu надо поискать как отключить и отредактировать AppArmor а затем выполните следующие действия.

Отключение SELinux

Прежде всего, позвольте мне упомянуть, что дистрибутивы Linux на основе RedHat (RHEL), такие как Fedora, CentOS и т . Д. использовать SELinux, который применяет политики обязательного контроля доступа. Так что лучше disable его во время следующих шагов, а затем включите его с некоторыми настройками.

Откройте файл конфигурации SELinux

      nano /etc/selinux/config

Найдите строку, содержащую и измените ее значение на, сохраните файл и перезагрузите систему.

Изменение каталога данных MySQL

Остановите службы MySQL

      systemctl stop mysqld.service

Создайте новый каталог для каталога данных MySQl. По некоторым причинам, которые выходят за рамки этого решения, настоятельно рекомендуется не создавать каталог данных в каталоге, но, возможно, некоторые из вас, как я, предпочитают его (это требует дополнительных шагов).

      mkdir /home/eloy/applications/mysql-datadir/

Установить права собственности и права на новый каталог в каталог данных MySQL , установленный по умолчанию ( в/var/lib/mysql):

      chown --reference=/var/lib/mysql   /home/eloy/applications/mysql-datadir/
chmod --reference=/var/lib/mysql   /home/eloy/applications/mysql-datadir/

Скопируйте все файлы из каталога по умолчанию в новый

      cp -rp /var/lib/mysql/*   /home/eloy/applications/mysql-datadir/

Отредактируйте /etc/my.cnf файл, добавьте следующую строку под [mysqld] раздел:

      [mysqld]
datadir=/home/eloy/applications/mysql-datadir/

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


Но если каталог данных создан под, MySQL не запустится, и вы увидите следующие ошибки и предупреждения после journalctl -xe:

      Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Could not increase number of max_open_files to more than 16384 (request: 32190) 
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [Warning] Can't create test file /home/eloy/applications/mysql-datadir/eloy-fedora-laptop.lower-> 
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: [113B blob data] 
Oct 05 10:22:03 eloy-fedora-laptop mysqld[8362]: 2021-10-05 10:22:03 0 [ERROR] Aborting

Решение проблем

Убедитесь, что все родительские каталоги нового datadir вверх имеют x( Выполнить ) разрешения для всех ( пользователя , группы , и другие ). Я предпочитаю не использовать рекурсивный скрипт, поэтому:

      chmod +x /home/eloy/applications/mysql-datadir
chmod +x /home/eloy/applications
chmod +x /home/eloy/
chmod +x /home

Как уже упоминалось, создание datadir под /homeкаталог сложен, потому что по умолчанию MySQL не позволяет этого. Создайте файл в /etc/systemd/system/mariadb.service.d и вставьте следующие строки:

      #open an editor to create a file
nano /etc/systemd/system/mariadb.service.d/centreon.conf 

скопируйте следующие строки в новый centreon.conf файл и сохраните его

      [Service]
ProtectHome=false 
#ProtectSystem=off

Примените изменения, выполнив следующую команду

      systemctl daemon-reload

Теперь вы можете запустить службу MySQL:

      systemctl start mysqld.service

Включение SELinux

Снова отредактируйте /etc/selinux/config файл и измените строку SELINUX=disabled к SELINUX=enforcing. Сохраните файл и перезагрузите вашу систему.

Чтобы запросить текущий статус SELinux, используйте следующие команды, он должен напечатать enforcing как выход.

      getenforce

в SELinux context использует mysqld_db_t и если он установлен неправильно mysqld процесс будет прерван, поэтому вам необходимо его обновить:

      semanage fcontext -a -t mysqld_db_t "/home/eloy/applications/mysql-datadir(/.*)?"

restorecon -Rv /home/eloy/applications/mysql-datadir

Теперь вы можете запускать MySQL. Ваше здоровье ;-)

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

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

Затем измените датадир в вашем /etc/mysql/my.cnf
Запустите mysqld

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

# 2: см. MySQL Install DB Reference

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

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

И вставьте в него ваши изменения:

[mysqld]
datadir=/vagrant/mq/mysql

В этом случае

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

Это решение работает в 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.

Мы должны были переместить 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/

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

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

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

(домашнее пиво) например

# 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.

Будьте осторожны, если каталог находится на другом диске , который не может быть смонтирован при запуске MySQL. Кроме того, если у вас возникли проблемы с MariaDB , имейте в виду, что она отключает apparmor.

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

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

Наконец я сделал следующее:

Чтобы узнать, где находится ваша база данных, введите:

      sudo mysql
select @@datadir;
exit;

Для меня это было в/var/lib/mysql/. Затем я выполнил:

      sudo systemctl stop mysql
mkdir /media/username/drivename/mysql
sudo cp -R /var/lib/mysql/* /media/username/drivename/mysql
sudo rm -R /var/lib/mysql

Затем я изменил файл конфигурации MariaDB, который нашел, следуя этим инструкциям:

      The MariaDB/MySQL tools read configuration files in the following order:
1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
2. "/etc/mysql/conf.d/*.cnf" to set global options.
3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
4. "~/.my.cnf" to set user-specific options.
If the same option is defined multiple times, the last one will apply.

Так я и сделал:

      sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Где я изменилсяdatadir = /media/username/drivename/mysql. Затем я обнаружил несколько ошибок разрешений, не только с новым расположением папки для базы данных, но и с путями иерархии, которые были решены следующим образом:

      sudo chown -R mysql:mysql /media/username/drivename/mysql
sudo chmod -R 755 /media/username/drivename/mysql
sudo chmod 755 /media/username/drivename
sudo chmod 755 /media/username
sudo chmod 755 /media

Однако последнее, что мне нужно было сделать, это вставить задержку в службу MariaDB, чтобы дать время для монтирования папки:

      sudo systemctl edit --full mariadb.service

Поэтому я вставилExecStartPre=/bin/sleep 10перед любым другимExecStartPre.

И наконец, все заработало после перезагрузки. Надеюсь, поможет.

Вы всегда можете создать символические ссылки, чтобы указать появляющийся путь к чему-то физически существующему, и это может решить вашу проблему.

  • Создайте пустую базу данных ( в случае, если ее там нет )
  • Остановить сервер MySQL
  • Переместите папку базы данных в пути данных MySQL в новое место.
  • Создайте символическую ссылку в пути к данным MySQL, которая указывает на новый путь.
  • Запустите сервер MySQL

Символическая ссылка : C:\Program Files\MySQL X\data\mydb <=> X:\MySQL\mydb

По сути, MySQL по-прежнему будет думать, что ваша база данных все еще находится в своем исходном местоположении, в то время как ОС дискретно перенаправляет все операции ввода-вывода файлов в новое место, как если бы это происходило в старом месте.

Примечание . В системах Linux вам может потребоваться решить некоторые проблемы с разрешениями; но с Windows это должно работать из коробки, если только новое местоположение не имеет некоторых унаследованных фактов специального разрешения.

В дополнение к принятому ответу, если вы хотите программно изменить каталог данных в файле конфигурации в сценарии bash или в файле докеров, вы можете использовать sed:

      sed -i 's|# datadir\t= /var/lib/mysql|datadir\t= custom_path|g' /etc/mysql/mysql.conf.d/mysqld.cnf

Это раскомментирует параметр и устанавливает значение на . Важной деталью здесь является то, что символ слева от - вкладка, а справа - пробел. Мне потребовалось время, чтобы это выяснить.

У меня это сработало в Ubuntu 22.04 LTS: сообщение в блоге

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

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

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

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

Если вы установили с помощью apt-get или yum install。

Конфигурационный файл может появиться в

/etc/mysql/my.cnf

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

/ Var / Библиотека / MySQL

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

  1. остановить MySQL
  2. изменить данные MySQL на новый каталог
  3. изменить файл конфигурации
  4. перезагрузите файл конфигурации
  5. перезапустите MySQL

и тогда работа сделана.

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

где Mysql

Я последовал руководству @sMyles, но снова запустить mysqld не удалось. Почему бы нам не сделать программную ссылку для изменения каталога данных?

      sudo cp -rp /var/lib/mysql /home/workspace
sudo mv /home/workspace/mysql /home/workspace/mysql_data
sudo chown --reference=/var/lib/mysql /home/workspace/mysql_data
sudo chmod --reference=/var/lib/mysql /home/workspace/mysql_data
sudo systemctl stop mysqld
sudo mv /var/lib/mysql /var/lib/mysql.orig
sudo ln -s /home/workspace/mysql_data /var/lib/mysql
sudo systemctl start mysqld

Это сработало для меня с MySQL8

Перенос файлов на внешний диск

      sudo rsync -av /var/lib/mysql /datadrive

Изменить конфигурацию MySQL

      sudo nano /etc/mysql/my.cnf

Добавить линии

      [mysqld]
datadir = /datadrive/mysql
log_error = /datadrive/mysql/error.log

Редактировать AppArmor

      sudo nano /etc/apparmor.d/tunables/alias

Добавить линии

      alias /var/lib/mysql/ -> /datadrive/mysql/,

Перезапустите MySQL

      sudo systemctl restart mysql

Проверьте, сработало ли это

      sudo mysql
select @@datadir;

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

Перепробовав множество решений, вот краткое изложение того, что сработало для меня ( Ubuntu 22.04а также mysql server 8.0.29):

  1. Полностью удалить mysql

    • sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
    • sudo rm -r /etc/mysql /var/lib/mysql( осторожно : это удалит все ваши существующие данные; вы можете переименовать этот каталог в другое время)
    • sudo apt autoremove
    • sudo apt autoclean
  2. Переустановите сервер и клиент mysql

    • sudo apt update
    • sudo apt install mysql-server mysql-client
  3. Обратите внимание на расположение mysql datadir по умолчанию

    • sudo grep -R --color datadir /etc/mysql/*(обычно: /var/lib/mysql )

[Перейдите к шагу 7, если вы уже смонтировали новое местоположение каталога данных, здесь /db]

  1. Создайте новый каталог (здесь я буду использовать /db ; db для базы данных) для монтирования раздела, в котором вы хотите найти mysql datadir (в моей конфигурации /dev/sdb1 )

    • sudo mkdir /db
  2. Отредактируйте /etc/fstab

    • sudo nano /etc/fstab
    • добавьте эту строку в конец файла:

    /dev/sdb1 /db ext4 по умолчанию 0 0

    • сохранить и выйти ( Ctrl + x и y )
  3. Перезагрузить

    • sudo reboot
    • после перезагрузки убедитесь, что /dev/sdb1 правильно смонтирован на /db : df -h /db
  4. Переместить местоположение каталога данных

    • Сделайте mysql владельцем нового местоположения datadir: sudo chown mysql:mysql /db
    • остановить сервер mysql : sudo systemctl stop mysql
    • скопируйте все содержимое каталога данных по умолчанию /var/lib/mysql (см. шаг 3) в новый каталог данных /db : sudo rsync -avzh /var/lib/mysql/ /db

Все содержимое каталога /var/lib/mysql теперь должно быть скопировано в новый каталог /db .

      performance_schema/table_lock_waits_109.sdi
performance_schema/threads_110.sdi
performance_schema/tls_channel_stat_190.sdi
performance_schema/user_defined_fun_188.sdi
performance_schema/user_variables_b_176.sdi
performance_schema/users_144.sdi
performance_schema/variables_by_thr_183.sdi
performance_schema/variables_info_186.sdi
sys/
sys/sys_config.ibd

sent 4.44M bytes  received 2.70K bytes  1.78M bytes/sec
total size is 182.35M  speedup is 41.09

Каталог /db теперь подготовлен для использования в качестве нового каталога данных mysql .

  1. Настройте AppArmor , чтобы разрешить /db быть каталогом данных mysql , отредактировав файл псевдонима AppArmor /etc/apparmor.d/tunables/alias следующим образом .

    • sudo nano /etc/apparmor.d/tunables/alias
    • добавить эту строку в конец файла

    псевдоним /var/lib/mysql -> /db,

    • сохранить и выйти ( Ctrl + x и y )
    • перезапустить AppArmor : sudo systemctl restart apparmor
  2. Измените каталог данных с /var/lib/mysql на /db

    • sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    • раскомментировать строку #datadir = /var/lib/mysqlи измените его на datadir = /db
    • сохранить и выйти ( Ctrl + x и y )
  3. Перезапустите и подключитесь к mysql

    • sudo systemctl start mysql
    • sudo mysql -u root -p
    • Теперь вы должны войти в mysql
    • sql> select @@datadir;должен вернуться
      +-----------+
| @@datadir |
+-----------+
| /db/      |
+-----------+
1 row in set (0,00 sec)

Вот и все!

Спасибо Шахриару Шовону: Как изменить каталог данных MySQL/MariaDB в Ubuntu

Другие вопросы по тегам