mysql - 使用 Bash 脚本进行数据库归档

标签 mysql database bash

我有一个名为 vitalstatistix 的 MySQL 5.5 事务数据库,我希望每月存档。该数据库由一个名为 asterisk_event 的巨大表和较小的查找表组成。

asterisk_event 表有一列名为日期时间

1.我想提取该列的year_month部分:

SELECT DISTINCT EXTRACT(YEAR_MONTH FROM datetime) AS DATEPART  
FROM asterisk_event 
WHERE `datetime` <=  NOW() - INTERVAL 6 MONTH


+----------+
| DATEPART |
+----------+
|   201307 |
|   201308 |
|   201309 |
|   201310 |
|   201311 |
|   201312 |
|   201401 |
|   201402 |
|   201403 |
|   201404 |
|   201405 |
|   201406 |
|   201407 |
|   201408 |
+----------+
20 rows in set (1.31 sec)
  • 并且,对于上面返回的每个 DATEPART,创建一个名为 vitalstatistix_'datepart' 的数据库,例如,vitalstatistix_201307
  • 每个创建的存档数据库都将包含一个月的数据。

    我需要创建一个 bash 脚本和/或 SQL (MySQL) 存储过程或语句来补充它。

    这就是我现在所拥有的:

    #!/bin/bash
    MUSER="root"
    MPASS="password"
    MHOST="localhost"
    MYSQL="$(which mysql)"
    MYSQLDUMP="$(which mysqldump)"
    
    
    DB="vitalstatistix"
    for db in ${DB}
    do
    
    # Step 2: Identify the months that need archiving
     echo "$MYSQL -u$MUSER  $db -Bse 'SELECTING .... FROM asterisk_event'"
    DATEPARTS="$($MYSQL -u$MUSER -p$MPASS $db -Bse 'SELECT DISTINCT EXTRACT(YEAR_MONTH FROM datetime) AS DATEPART  FROM asterisk_event WHERE `datetime` <=  NOW() - INTERVAL 6 MONTH')"
    echo "[START ARCHIVING]"
    echo "Database: "$db
    echo ${DATEPARTS}
    
    
    # Step 3: Create archive databases
    
       for DATEPART in ${DATEPARTS}
        do
         echo $DATEPART
        #ENTER LINES OF CODE HERE
        done
     echo "[END ARCHIVING]"
    done
    

    最佳答案

    类似的事情...

    MYSQL="mysql -uuser -ppassword database -BNe"
    
    $MYSQL "SELECT DISTINCT EXTRACT(YEAR_MONTH FROM datetime) AS DATEPART
         FROM asterisk_event WHERE `datetime` <=  NOW() - INTERVAL 6 MONTH"
       | while read date; do
            $MYSQL "CREATE TABLE vitalstatistix_$date SELECT * FROM asterisk_event 
                      WHERE datetime LIKE '$date%'"
       done
    

    一个更简单的事情是使用 mysql trigger插入时,要将数据插入到第二个表中,并在每个月初将此表重命名为 vitalstatistix_<date>并开始一个新的。

    关于mysql - 使用 Bash 脚本进行数据库归档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28577615/

    相关文章:

    mysql - 合并6个表(具有相同字段)的SQL查询

    sql - 连接具有缺失值的 SQL View

    database - 数据库复制支持的数据结构设计

    c - init 收割孤儿进程后,shell 等待输入

    linux - 我正在尝试发送邮件,该邮件将重定向同一目录中 logfile.txt 中日志文件的内容。但它失败

    linux - lftp 的记录位置

    php - 简单的 php PDO 目录名称无效 : 1046 No database selected

    php - 将 $_GET 方法保存到数据库中并更改它

    mysql - 从表 2 中获取具有表 1 id 的行数

    mysql - 使用 EF6(和 Code First 迁移)针对不同的数据库系统