MYSQL Проблема: стирает все таблицы и прежде чем это имеет значение

0

У меня странная проблема с MySLQ. ранее файл дампа имел следующий structure->

   CASE A
____________
DROP TALBE A
IMPORT TABLE A
DROP TABLE B
IMPORTA TABLE B
DROP TABLE C
IMPORT TABLE C

......

В настоящее время ->

   CASE B
____________
DELETE TABLE A
DELETE TABLE B
DELETE TABLE C
IMPORT TABLE A
IMPORT TABLE B
IMPORT TABLE C

........

Единственное различие между сценарием импорта между случаем один и два заключается в следующем: CASE A:

DB_PORT=xxx
DB_HOST=xxx
DB_NAME=xxx
PROJECT=xxx
DB_SOURCE=xxx
BACKUP_FILE="$xxx/xxx/${xxx}_${xxx}_${xxx}.sql.gz.gpg"
LOG_FILE=$xxx/xxx/$xxx/xxx



mysqldump -S /xxx/xxx/xxx/xxx.sock -u$DB_USER -p$DB_PASSWORD $DB_NAME | gzip |  gpg -e -r 'xxx <xxxxxx> $BACKUP_FILE
export -f xxx
find $xxx/xxx/ -name "${xxx}_${xxx}_*" -type f -exec /bin/bash -c 'xxx "{}"' \;

DATE='date +%Y%m%d_%H%M'

CASE B:

    #!/bin/bash




    HOME="/xxx/xxx"
    DATE='date +%Y%m%d_%H%M'
    DATE_LOGS='date +%Y-%m'
    PROJECT=xxx
    DB_SOURCE=xxx
    DB_FILE="$xxx/xxx/${xxx}_${xxx}_${xxx}.sql"
    DB_FILE_COMPRESS="$xxx/xxx/${xxx}_${xxx}_${xxx}.sql.gz"
    DB_FILE_ENCRYPT="$xxxx/xxx/${xxx}_${xxx}_${xxx}.sql.gz.gpg"
    LOG_FILE=$xxx/xxx/$xxx/xxx
    PASSWORD=xxx
    USER=xxx
    DATABASE=xxx
    EXCLUDED_TABLES=(
    A 
    B 
    C
    D
    F
    )


    IGNORED_TABLES_STRING=''
    for TABLE in "${EXCLUDED_TABLES[@]}"
    do :
       IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
    done


mysqldump -S /xxx/xxx/xxxx/xxxx.sock --user=${USER} --password=${PASSWORD} --single-transaction --no-data ${DATABASE} > ${DB_FILE}

    echo "Dump content"
    mysqldump -S /xxx/xxx/xxxx/xxxx.sock  --user=${USER} --password=${PASSWORD} ${DATABASE} --no-create-info ${IGNORED_TABLES_STRING} >> ${DB_FILE}
    gzip ${DB_FILE}
    gpg -e -r 'xxx ' ${DB_FILE_COMPRESS}

    rm ${DB_FILE_COMPRESS}

    export -f xxx
    find $HOME/bdbackups/ -name "${PROJECT}_${DB_SOURCE}_*" -type f -exec /bin/bash -c 'xxx "{}"' \;

    DATE='date +%Y%m%d_%H%M'

на самом деле единственное отличие состоит в том, что CASE B игнорирует 5 таблиц, в то время как CASE A НЕ.

Большое спасибо за то, что вы прочитали меня, и если у кого есть какие-то идеи, я буду вам очень благодарен.

Теги:
database

1 ответ

0

В случае B вы добавили количество таблиц, которые исключены (--ignore-table), поэтому, если вы хотите, чтобы их удаляли, просто удалите эти строки кода (с IGNORED_TABLES_STRING). Вот почему mysqldump добавил команду DELETE (она просто удаляет все строки)

  • 0
    Да, но мне нужен присутствующий параметр (--ignore-table), который уменьшает емкость базы данных
  • 0
    Итак, вы хотите сэкономить место на диске? --ignore-table - это то, что нужно, но mysqldump не будет создавать дамп этих таблиц, что означает возможную потерю данных, поэтому вам лучше попробовать инкрементные резервные копии - dev.mysql.com/doc/refman/8.0/en/backup-methods. html , раздел Создание инкрементных резервных копий путем включения двоичного журнала
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню