MYSQL问题: it erases all the tables and before it matters

标签 mysql database bash

我在使用 MySLQ 时遇到了一个奇怪的问题。 以前转储文件具有以下结构->

   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

......

情况一和情况二之间导入脚本的唯一区别是: 案例一:

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`

案例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 则不会。

非常感谢您阅读我的文章,如果有人有任何想法,我将非常感谢您。

最佳答案

在情况 B 中,您添加了许多被排除的表(--ignore-table),因此如果您希望删除它们 - 只需删除这些代码行(使用 IGNORED_TABLES_STRING)即可。这就是为什么 mysqldump 添加了 DELETE 命令(它只是删除所有行)

关于MYSQL问题: it erases all the tables and before it matters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52439657/

相关文章:

Bash - 基于以毫秒为单位的时间戳搜索

json - 在查询其子节点之一时使用 jq 返回父节点

php - 验证或不验证 where 子句中的列

MySql SELECT 语句与 where LIKE 不返回结果

PHP "database could not connect"MAMP

sql-server - 什么是处理大量写入的好 SQL Server 2008 解决方案,以便它们不会减慢数据库用户的读取速度?

php - 使用 PHP 删除日期

php - 即使记录不存在于另一个表中,也显示 JOIN 查询中的 MySQL 行

MySQL 无法使用我创建的用户

bash - 检查管道 grep 的输出