【问题标题】:cron job for backup the database in linux/php用于在 linux/php 中备份数据库的 cron 作业
【发布时间】:2012-12-25 02:00:57
【问题描述】:

我是 linux cron 工作的新手,我正在使用 mysql DB,我的数据库名称为 finaldb,我想每隔一小时使用一次这个数据库,

我有一个名为 dailbackup 的文件夹,在这个文件夹中我有按日期划分的文件夹,在这个每个文件夹中我都有备份 mysql db 文件

name like final_db_9.sql(这个备份在早上 9 点拍摄),final_db_13.sql(这个备份在中午 1 点拍摄,像这样,

这个过程目前是手动做的,是否可以自动化,有什么想法,建议,

【问题讨论】:

    标签: php linux cron


    【解决方案1】:

    创建一个包含以下内容的 PHP 脚本:

    $dbFile = 'final_db'.date('H').'.sql.gz';
    $dbHost = 'localhost'; // Database Host
    $dbUser = 'username'; // Database Username
    $dbPass = 'password'; // Database Password
    exec( 'mysqldump --host="'.$dbHost.'" --user="'.$dbUser.'" --password="'.$dbPass.'" --add-drop-table "finaldb" | gzip > "'.$dbFile.'"' );
    

    【讨论】:

    • 将其包装在 php 脚本中可能会产生一些内存不足错误,具体取决于 php 配置,如果您从 http 请求调用它,还会出现一些超时问题。
    • 可能 - 有一百万个变量会影响此解决方案的功效(与许多解决方案一样)。如果脚本确实卡住了,ignore_user_abort(1);set_time_limit(0); 的组合可以解决它。
    • @Lucanos:为什么不用另一个用 ruby​​ 编写的脚本运行这个脚本,然后用另一个用 python 编写的脚本来调用它?
    • @Lucanos:我想知道为什么你只用一种额外的(无意义的)编程语言而不是 3 来包装 shell 单线。越多越好。
    • @zerkms:这是我个人使用的较长备份脚本的摘录,它不仅备份数据库,还备份文件,还做了一些其他时髦的事情。断章取义,它可能没有多大意义,但是,正如 OP 所同意的那样,它完成了这项工作。如果您想提出自己的解决方案,请随时为此问题添加另一个答案。
    【解决方案2】:

    在某处创建一个脚本来进行滚动备份,如下所示(未经测试,但应该可以):

    #!/bin/bash
    
    BKPDIR=dailbackup  # You must use absolute path here
    DB=finaldb
    USERNAME=myusername
    PASSWORD=mypassword
    
    BKPFILE=${BKPDIR}/`date +%Y-%m-%d`/final_db_`date +%H`.sql
    
    # Create backup
    mysqldump --user=${USERNAME} --password=${PASSWORD} ${DB} | gzip -c > ${BKPFILE}
    
    # Remove older backups (> 7 days),
    # unless you want to run out of drive space
    find ${BKPDIR} -mtime +7 -print0 | xargs -0 rm -rf
    

    然后将此脚本设置为每小时 cronjob 运行:

    crontab -e
    
    0 * * * * /absolute-path-to-where-you-saved-the-script
    

    【讨论】:

      【解决方案3】:
      crontab -e
      

      这样说:

      the_date='date +%Y%m%d'
      the_hour='date +%H'
      0 * * * * mysqldump OPTIONS > /dailbackup/`$the_date`/final_db_`$the_hour`.sql
      

      上面的cron允许你每小时备份一次数据库,并使用%H作为sql文件名

      【讨论】:

        【解决方案4】:

        未经测试的一个班轮:

        mysqldump -u*user* -p*password* -P*dbport* -h localhost finaldb > /.../dailbackup/final_db_$(date +%Y-%m-%d_%H_%M).sql
        

        只需将其添加到您的 cron 作业或将其包装在脚本中即可完成

        【讨论】:

        • 然后您可以将其通过管道传输到 tar 或 zip 打包程序
        【解决方案5】:

        是的,当然,只要你的 mysql 服务器启动并在监听,你就可以这样做:)。您需要制作一个 shell 或 perl 脚本,并使用以下命令(在 Fedora 中)编辑 crond:

        crontab -e

        您的 cron 作业的组件是 ::

        1)脚本的路径(可执行文件)

        2) 分钟(00-59)

        3) 小时 (00 - 23)

        4) 月 (01-12)

        5) 天 (01-31)

        6) 星期几(00 -06,00 为星期日)

        示例 :: 你想每天在 1200 运行 test_pl 脚本

        crontab 中的条目将是 ::

        00 12 * * * /home/jok/test_pl

        【讨论】:

          猜你喜欢
          • 2021-07-27
          • 2012-10-13
          • 1970-01-01
          • 2020-11-14
          • 2014-02-24
          • 2012-01-05
          • 2016-01-22
          • 2018-11-18
          • 2018-09-13
          相关资源
          最近更新 更多