Задать вопрос
@easycode
не боюсь задавать глупые вопросы ))

Автоматизация переноса сотни WordPress-сайтов с одного VPS на другой?

Переезжаем со старого VPS на новый - более мощный, но с меньшим объемом дискового пространства.
На старом VPS более сотни WordPress-сайтов
Перенести нужно избирательно ( не все ) на новый VPS

Делать это вручную сильно утомительно. Хочется по максимуму автоматизировать данный процесс.

Думаю создать shell-скрипт с помощью которого пройдусь по всем папкам нужных мне сайтов, положу внутрь их бэкапы БД:

1) пройтись по выбранным папкам внутри каталога
не знаю как это делать, подскажите?

2) для каждого сайта определить его БД, так как это Wordpress-сайты то:
надо как-то прочитать DB_USER, DB_PASSWORD, DB_NAME из wp-config.php файла в папке каждого сайта
думаю что решение здесь: https://stackoverflow.com/questions/7586995/read-v...

3) далее сам бэкап:
mysqldump -u USER -pPASSWORD DATABASE | gzip -9 > dump.sql.gz


4) копируем папки на новый VPS:
rsync -rvp old_vps_path_site www-root@XX.XX.XX.XX:/new_vps_path_site


соотв. получу всё что мне нужно на новом VPS, на котором нужно будет придумать shell-скрипт который:

1) пройдет по всем папкам новых сайтов
не знаю как это сделать - подскажите?

2) прочитаю DB_USER, DB_PASSWORD, DB_NAME из wp-config.php файла в папке каждого сайта
вроде как решение тут: https://stackoverflow.com/questions/7586995/read-v...

3) создам БД и пользователя с правами:
mysql -u root
create database $DB_NAME;
grant all privileges on $DB_NAME.* to $DB_USER@'localhost' identified by $DB_PASSWORD;
FLUSH PRIVILEGES;


4) импортирую в базу данных все таблицы с данными:
gunzip < dump.sql.gz | mysql -hlocalhost -u$DB_USER -p$DB_PASSWORD $DB_NAME


5) удалю dump.sql.gz из папки сайта
rm -f dump.sql.gz

может есть что-то похожее из готовых решений?
может я ошибаюсь в подходе или что-то не так?
  • Вопрос задан
  • 192 просмотра
Подписаться 4 Простой Комментировать
Решения вопроса 1
@easycode Автор вопроса
не боюсь задавать глупые вопросы ))
DEST_WWW_PATH="/path/to/www/folder"
CURRENT_PATH=$(pwd)
SITE_FOLDERS=("site.ru" "site2.ru")

for SITE_FOLDER in ${SITE_FOLDERS[@]}; do
  CURRENT_FOLDER="${CURRENT_PATH}/${SITE_FOLDER}"
  DB_NAME=$(/bin/grep -oP "define\(['\"]DB_NAME['\"],\s*['\"]\K[^'\"]+(?=[\'\"]\s*\)\s*;)" "${CURRENT_FOLDER}/wp-config.php")
  DB_USER=$(/bin/grep -oP "define\(['\"]DB_USER['\"],\s*['\"]\K[^'\"]+(?=[\'\"]\s*\)\s*;)" "${CURRENT_FOLDER}/wp-config.php")
  DB_PASSWORD=$(/bin/grep -oP "define\(['\"]DB_PASSWORD['\"],\s*['\"]\K[^'\"]+(?=[\'\"]\s*\)\s*;)" "${CURRENT_FOLDER}/wp-config.php")
  /usr/bin/mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME | /bin/gzip -9 > dump.sql.gz
  /usr/bin/rsync -rvp user@XXX.XXX.XXX.XXX:"${DEST_WWW_PATH}/${SITE_FOLDER}/" $CURRENT_FOLDER
  /bin/rm -f dump.sql.gz
done
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы