- Регистрация
- 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" и добавляем.
Теперь его нужно включить с помощью команды powershell
Далее проверим что наш брандмауэр разрешает входящие подключения 22 порта, т.к. этот порт используется по умолчанию для ssh. Я думаю тут особой сложности не будет, поэтому пункт не расписываю.
3. Напишем скрипт, который будет копировать файлы
Копировать файлы будем с помощью скрипта на linux машине.
Создаем файл
И копируем скрипт:
Обращу внимание, что нужно заменить в скрипте:
win10UserPassword - на ваш пароль пользователя в win10,
win10User - на имя вашего пользователя win10,
win10IP -на IP вашей машины win10,
/mnt/ssd/data - на ваш путь куда будут копироваться файлы на машине Linux,
D:\bd\data\*.sql - на ваш путь в машине win10 где хранятся sql файлы.
4. Копируем
Теперь сделаем файл исполняемым:
Запускаем скрипт:
И ждем пока все ваши SQL файлы перенесутся на новый сервер. Далее создаете новую базу данных и импортируете в нее файлы таблиц.
Надеюсь вам будет полезно. Я долго провозился со скриптом вылавливая различные ошибки, например из-за обратных слэшей, которые используются в путях в винды пока их не заменишь на прямые, то фиг что скопируешь. Для копирования других файлов, меняете маску с *.sql на то что вам нужно. Например можно перекидывать бэкапы на сервак, тогда просто закидываете скрипт в cron и настраиваете расписание, процесс описан тут в конце статьи.
1. Экспортируем базы данных в SQL файлы
Если базы получаются большие, то лучше делать делать каждую таблицу отдельным файлом. Как в моем случае, база весит 30гб, поэтому я выгружаю каждую таблицу отдельным файлом SQL.
2. Установим OpenSSH на машину с Windows 10
Microsoft внесла ssh как необязательный компонент. Поэтому нужно его установить. Для этого переходим в настройки windows 10, выбираем пункт "Приложения", далее "Приложения и возможности", мотаем в самый низ и выбираем пункт "Системные компоненты", слева выбираем "Дополнительные компоненты", далее кликаем "Добавить компонент" и выбираем "Сервер OpenSSH" и добавляем.
Теперь его нужно включить с помощью команды powershell
Код:
Start-Service sshd
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 на то что вам нужно. Например можно перекидывать бэкапы на сервак, тогда просто закидываете скрипт в cron и настраиваете расписание, процесс описан тут в конце статьи.
Последнее редактирование: