Перенос файлов с Windows на Linux через ssh, на примере баз данных

Dobriyk0t

Client
Регистрация
28.12.2016
Сообщения
90
Благодарностей
45
Баллы
18
Делать будем перенос баз данных с MySQL на Win10(использовал OSP на серверах и хранил БД локально на каждом сервере) на MariaDB на Linux(Raspberry Pi - Raspbian) не с помощью бэкапов. Эта статья будет полезна тем кто собирает свои разрозненные базы данных в одну общую или тем кто просто переносит базы данных с Windows на Linux. И их базы весят не мало.

1. Экспортируем базы данных в SQL файлы
Если базы получаются большие, то лучше делать делать каждую таблицу отдельным файлом. Как в моем случае, база весит 30гб, поэтому я выгружаю каждую таблицу отдельным файлом SQL.

2. Установим OpenSSH на машину с Windows 10
Microsoft внесла ssh как необязательный компонент. Поэтому нужно его установить. Для этого переходим в настройки windows 10, выбираем пункт "Приложения", далее "Приложения и возможности", мотаем в самый низ и выбираем пункт "Системные компоненты", слева выбираем "Дополнительные компоненты", далее кликаем "Добавить компонент" и выбираем "Сервер OpenSSH" и добавляем.

127843


Теперь его нужно включить с помощью команды powershell
Код:
Start-Service sshd
Далее проверим что наш брандмауэр разрешает входящие подключения 22 порта, т.к. этот порт используется по умолчанию для ssh. Я думаю тут особой сложности не будет, поэтому пункт не расписываю.

3. Напишем скрипт, который будет копировать файлы
Копировать файлы будем с помощью скрипта на linux машине.
Создаем файл
Bash:
sudo nano /usr/local/bin/transfer_files.sh
И копируем скрипт:
Bash:
#!/bin/bash

# Создаем папку назначения, если она не существует
echo "Создаем папку назначения"
# Тут указываете папку куда будут копироваться файлы
mkdir -p /mnt/ssd/data

# Проверка подключения к Windows, win10UserPassword - пароль пользователя Win10, win10User - пользователь, win10IP - IP windows машины
echo "Проверяем доступ к Windows."
if sshpass -p "win10UserPassword" ssh -o StrictHostKeyChecking=no win10User@win10IP "exit"; then
    echo "Подключение успешно"
else
    echo "Ошибка подключения к Windows"
    exit 1
fi

# Получаем список SQL файлов на Windows и сохраняем в файл. D:\bd\data\*.sql - это мой путь, укажите свой. Ищет все файлы в папке с расширением SQL.
echo "Получаем список файлов"
sshpass -p "win10UserPassword" ssh -o StrictHostKeyChecking=no win10User@win10IP 'for %i in (D:\bd\data\*.sql) do @echo %i' > /tmp/windows_file_list.txt

# Проверка содержимого файла
echo "Найденные файлы:"
cat /tmp/windows_file_list.txt

# Копирование файлов по одному
echo "Копируем файлы"
while IFS= read -r file; do
    # Убираем символы новой строки и пробелы, заменяем слэши
    clean_file=$(echo "$file" | tr -d '\r\n' | sed 's/\\/\//g')
    echo "Копируем файл: $clean_file"
    # /mnt/ssd/data/ - это мой путь, куда копируются файлы, замените на свой.
    sshpass -p "win10UserPassword" scp -o StrictHostKeyChecking=no win10User@win10IP:"$clean_file" /mnt/ssd/data/ && echo "$clean_file" >> /mnt/ssd/data/transferred_files.txt || echo "Ошибка при копировании $clean_file"
done < /tmp/windows_file_list.txt

echo "Скрипт завершен."
Обращу внимание, что нужно заменить в скрипте:
win10UserPassword - на ваш пароль пользователя в win10,
win10User - на имя вашего пользователя win10,
win10IP -на IP вашей машины win10,
/mnt/ssd/data - на ваш путь куда будут копироваться файлы на машине Linux,
D:\bd\data\*.sql - на ваш путь в машине win10 где хранятся sql файлы.

4. Копируем
Теперь сделаем файл исполняемым:
Bash:
sudo chmod +x /usr/local/bin/transfer_files.sh
Запускаем скрипт:
Bash:
/usr/local/bin/transfer_files.sh
И ждем пока все ваши SQL файлы перенесутся на новый сервер. Далее создаете новую базу данных и импортируете в нее файлы таблиц.

Надеюсь вам будет полезно. Я долго провозился со скриптом вылавливая различные ошибки, например из-за обратных слэшей, которые используются в путях в винды пока их не заменишь на прямые, то фиг что скопируешь. Для копирования других файлов, меняете маску с *.sql на то что вам нужно. Например можно перекидывать бэкапы на сервак, тогда просто закидываете скрипт в cron и настраиваете расписание, процесс описан тут в конце статьи.
 
Последнее редактирование:
  • Спасибо
Реакции: BAV

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)