Чи можна змінити мій каталог даних 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
Потім змініть datadir у своєму /etc/mysql/my.cnf
запуску mysqld
Примітки:
№1: ймовірно, вам доведеться відрегулювати налаштування SELinux (спробуйте вимкнути SELinux у разі неприємностей), можливо, також може виникнути проблема Apparmor (Ubuntu).
№2: див. Посилання на встановлення MySQL DB
Спочатку зупиніть свій 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 /, а потім додайте follwoing, якщо у файл його немає
/yourdirectory/mysql/ r,
/yourdirectory/mysql/** rwk,
Збережіть файл за допомогою команди
:wq
Відредагуйте файл my.cnf
sudo vim /etc/mysql/my.cnf
Замініть, де / var / lib / by / yourdirectory /, а потім збережіть за допомогою команди
:wq
нарешті почати mysql
sudo service mysql start
@ детальніше про raid0, оптимізацію ici
Це рішення працює в Windows 7 за допомогою Workbench. Для цього вам знадобляться права адміністратора. Це створює перехід (як ярлик) до місця, де ви дійсно хочете зберігати свої дані
Відкрийте Workbench та виберіть ІНСТАНЦІЯ - запуск / відключення Зупинення сервера
Встановіть майстер з'єднання з https://bitsum.com/junctionmaster.php
Перейдіть до C: \ ProgramData \ MySQL \ MySQL Server 5.6
Клацніть правою кнопкою миші на Дані та виберіть "Перемістити, а потім папку ПОСИЛАННЯ до ..." Прийміть призначення пункту попередження до "Вашого нового каталогу даних тут без лапок". Клацніть Перемістити та посилання
Тепер перейдіть до "Вашого нового каталогу даних тут без лапок"
Клацніть правою кнопкою миші на Дані Перейдіть на вкладку безпеки. Клацніть Редагувати. Клацніть Додати тип сервісної мережі.
Поверніться до 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 використовує каталог даних для зберігання даних різних створених вами баз даних. Ну і врешті-решт, вони повинні зберігати їх у вигляді файлів з деякою доданою жонглерією у форматі програми та файлів, щоб гарантувати, що обіцянки бази даних, які ви дізналися в класах баз даних, є недоторканими.
Тепер ви хочете переконатися, що є достатньо місця для зберігання великих баз даних, які ви могли б створити в майбутньому, і тому ви подумали: Гей! Я хочу помістити його в інший привід, який має більше місця.
Отже, ви робите наступне.
Крок - 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
файл, має бути саме там.
Відкрийте його в редакторі (можливо, Блокнот ++).
Зробіть 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).
Створіть новий dir та встановіть правильні дозволи.
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
Якщо ви хочете зробити це програмно (без введення тексту вручну за допомогою 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 / lib / mysql
і що вам слід зробити
а потім виконані роботи.
Але якщо ви не встановили це з apt або yum, директорія може не сподобатися, і ви можете знайти файли 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. ОС у моєму VM - RHEL 7.6.
Можна також символізувати з'єднання datadir. Принаймні в 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.
Якщо ви використовуєте SE linux, встановіть його на дозвільний режим, відредагувавши / etc / selinux / config та змінивши SELINUX = примусовий на SELINUX = дозвільний
datadir
власності