Пост

Как перенести базу данных MySQL на другой диск на Raspberry Pi

По мере роста ваших баз данных MySQL на Raspberry Pi вы можете столкнуться с нехваткой места на microSD карте. Перенос данных на внешний диск (HDD или SSD) через USB или внутренний SSD через PCIe (на Raspberry Pi 5) — это отличное решение для увеличения производительности и доступного пространства. Это руководство покажет вам, как безопасно переместить каталог данных MySQL на внешний накопитель с минимальным временем простоя.

Как перенести базу данных MySQL на другой диск на Raspberry Pi

Как перенести базу данных MySQL на другой диск на Raspberry Pi


Описание/Введение: По мере роста ваших баз данных MySQL на Raspberry Pi вы можете столкнуться с нехваткой места на microSD карте. Перенос данных на внешний диск (HDD или SSD) через USB или внутренний SSD через PCIe (на Raspberry Pi 5) — это отличное решение для увеличения производительности и доступного пространства. Это руководство покажет вам, как безопасно переместить каталог данных MySQL на внешний накопитель с минимальным временем простоя.


В этом руководстве мы покажем вам, как перенести каталог данных MySQL на внешний диск на вашем Raspberry Pi.

Это полезно, если у вас заканчивается место на microSD карте или вы хотите повысить производительность, используя более быстрый SSD.

Мы проведем вас через процесс подготовки диска, остановки MySQL, перемещения данных и изменения конфигурации.

Оборудование

  • Raspberry Pi (любая модель)
  • Внешний USB-накопитель (HDD/SSD) или SSD через PCIe (для Pi 5)
  • Блок питания достаточной мощности для питания накопителя

Подготовка нового диска

  1. Первым шагом является подключение и форматирование вашего внешнего диска.

    Подключите ваш внешний диск к Raspberry Pi. Определите имя устройства с помощью команды:

    1
    
    sudo lsblk
    

    Обычно это /dev/sda1 или /dev/sdb1 для USB-накопителей.

  2. Создайте файловую систему на диске (если он новый или требует очистки). ВНИМАНИЕ: Это уничтожит все данные на диске!
    1
    
    sudo mkfs.ext4 /dev/sda1
    
  3. Создайте точку монтирования для нового диска. Мы создадим ее в /mnt, что является стандартным местом для временных монтирований.
    1
    
    sudo mkdir /mnt/mysql_data
    
  4. Смонтируйте диск в созданную директорию:
    1
    
    sudo mount /dev/sda1 /mnt/mysql_data
    

Определение текущего местоположения данных MySQL

  1. Прежде чем перемещать данные, нам нужно узнать, где они currently хранятся.

    Мы можем проверить это, войдя в консоль MySQL и выполнив следующую команду:

    1
    
    sudo mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
    
  2. Вы должны увидеть вывод, похожий на этот:

    1
    2
    3
    4
    5
    
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | datadir       | /var/lib/mysql/ |
    +---------------+-----------------+
    

    Это стандартное расположение данных MySQL в Raspberry Pi OS.

Остановка MySQL и копирование данных

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

    Используем rsync для сохранения прав доступа и владельца файлов:

    1
    
    sudo rsync -av /var/lib/mysql/ /mnt/mysql_data/
    
  3. После завершения копирования мы переименуем старую директорию (на всякий случай) и создадим новую пустую:
    1
    2
    
    sudo mv /var/lib/mysql /var/lib/mysql.backup
    sudo mkdir /var/lib/mysql
    

Настройка автоматического монтирования диска

  1. Чтобы диск монтировался автоматически при каждой загрузке, нам нужно добавить запись в /etc/fstab.

    Сначала узнаем UUID вашего диска, который более надежен, чем имя устройства:

    1
    
    sudo blkid
    
  2. Найдите строку, соответствующую вашему диску (/dev/sda1), и скопируйте значение UUID.

    Откройте файл fstab для редактирования:

    1
    
    sudo nano /etc/fstab
    
  3. Добавьте следующую строку в конец файла, заменив YOUR_UUID на фактический UUID:

    1
    
    UUID=YOUR_UUID /var/lib/mysql ext4 defaults,noatime 0 2
    

    (Примечание: Мы монтируем диск прямо в /var/lib/mysql, куда MySQL ожидает найти данные.)

Настройка прав доступа и запуск MySQL

  1. Теперь нам нужно убедиться, что у пользователя mysql есть правильные права доступа к новой директории.

    Установите правильного владельца для смонтированного диска:

    1
    
    sudo chown -R mysql:mysql /var/lib/mysql
    
  2. Также установите правильные разрешения:
    1
    
    sudo chmod -R 755 /var/lib/mysql
    
  3. Теперь мы можем перемонтировать наш диск в правильное расположение.

    Сначала размонтируем временную точку монтирования:

    1
    
    sudo umount /mnt/mysql_data
    
  4. Теперь смонтируем все файловые системы из fstab, включая нашу новую:
    1
    
    sudo mount -a
    
  5. Проверим, что диск смонтирован правильно:
    1
    
    df -h /var/lib/mysql
    

    Вы должны увидеть, что /var/lib/mysql теперь находится на вашем внешнем диске.

  6. Наконец, мы можем запустить MySQL:
    1
    
    sudo systemctl start mysql
    

Проверка успешности переноса

  1. Давайте проверим, что MySQL работает правильно с новым местоположением данных.

    Проверим статус службы:

    1
    
    sudo systemctl status mysql
    
  2. Войдем в MySQL и проверим местоположение данных:
    1
    
    sudo mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
    
  3. Проверим, что наши базы данных доступны:
    1
    
    sudo mysql -u root -p -e "SHOW DATABASES;"
    
  4. Если все работает правильно, вы можете удалить старую резервную копию через несколько дней:
    1
    
    sudo rm -rf /var/lib/mysql.backup
    

Устранение распространенных проблем

  • Если MySQL не запускается: Проверьте права доступа к директории /var/lib/mysql и убедитесь, что диск смонтирован.
  • Проблемы с производительностью: Убедитесь, что вы используете внешний SSD для лучшей скорости, а не медленный HDD.
  • Недостаточно прав: Убедитесь, что владельцем всех файлов в /var/lib/mysql является пользователь mysql:mysql.

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


Авторский пост защищен лицензией CC BY 4.0 .