Wiki Bitrix

Миграция БД с одной версии Битрикс на другую

1. Делаем копию основной БД для дальнейшего сравнения и переименовываем её $DB_NAME_production:

mysqldump --databases $DB_NAME | sed -e 's/`'$DB_NAME'`/`'$DB_NAME'_production`/' | mysql

2. Обновляем Битрикс

3. Сравниваем структуру обновлённой и скопированной ранее ДБ при помощи mysqldbcompare, вырезая и заменяя некоторые строки (см. скрипт ниже); записываем в файл миграции *.sql

FIXME 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

Взято отсюда