Миграция БД с одной версии Битрикс на другую
1. Делаем копию основной БД для дальнейшего сравнения и переименовываем её $DB_NAME_production
:
mysqldump --databases $DB_NAME | sed -e 's/`'$DB_NAME'`/`'$DB_NAME'_production`/' | mysql
2. Обновляем Битрикс
3. Сравниваем структуру обновлённой и скопированной ранее ДБ при помощи mysqldbcompare
, вырезая и заменяя некоторые строки (см. скрипт ниже); записываем в файл миграции *.sql
mysqldbcompare
больше не существует?
4. Сравниваем данные в обновлённой и скопированной ранее ДБ при помощи pt-table-sync, пропуская некоторые таблицы из сравнения (см. скрипт ниже); дописываем в файл миграции *.sql
Основной скрипт, производящий сравнение и записывающий файл миграции (вырезаны непринципиальные части, относящиеся к рабочему окружению)
- sync.sh
#!/bin/sh PATCH_SQL=`date +%Y-%m-%d-%H%M%S`".sql" DB_USER="*" DB_PASSWORD="*" mysqldbcompare --quiet --run-all-tests --skip-data-check --difftype=sql --server1=$DB_USER:$DB_PASSWORD@localhost $DB_NAME"_production":$DB_NAME | \ grep -v '^#' | \ grep -v 'CREATE DATABASE `' | \ sed -e 's/`'$DB_NAME'_production`.//' > $PATCH_SQL TABLES=`mysql -u$DB_USER -p$DB_PASSWORD --silent -e "SHOW TABLES FROM $DB_NAME" \ | grep -v b_agent \ | grep -v b_event \ | grep -v b_cache_tag \ | grep -v b_event_log \ | grep -v b_form_result \ | grep -v b_form_result_answer \ | grep -v b_search_content \ | grep -v b_search_content_stem \ | grep -v b_search_content_text \ | grep -v b_search_stem \ | grep -v b_user_stored_auth \ ` for t in $TABLES; do pt-table-sync --print D=$DB_NAME,t=$t D=$DB_NAME"_production" | sed -e 's/`'$DB_NAME'_production`.//' -e 's/ \/\*.*\*\///' >> $PATCH_SQL done
- /etc/percona-toolkit/pt-table-sync.conf
charset = utf8 host = localhost user = * password = * ignore-columns = timestamp_x,tmp_id,show_counter,searchable_content