浅谈linux编写定时导出数据库的PHP脚本

1. 首先写一个导出数据库的PHP脚本(导出数据库,这里主要用到的是exec函数)。


    date_default_timezone_set('PRC');
    // 数据库的账号
    $cfg_dbuser = "root";
    // 数据库的密码
    $cfg_dbpwd  = "root";
    // 要导出的数据库
    $cfg_dbname = "videos"; 
    // 设置保存文件名 
    $filename = date("Y-m-d_H-i-s")."-".$cfg_dbname.".sql"; 
    // 获取当前页面文件路径,SQL文件就导出到此文件夹内 
    $tmpFile  = (dirname(__FILE__))."/".$filename; 
    // 用mysqldump命令导出数据库 
    exec("mysqldump -u$cfg_dbuser -p$cfg_dbpwd --default-character-set=utf8 $cfg_dbname > ".$tmpFile); 
    // 打开文件 
    $file = fopen($tmpFile, "r");
    echo fread($file,filesize($tmpFile)); 
    fclose($file); 
    exit;

2. 接着直接把该PHP脚本文件放到Linux服务器上(我这里是放到centos7上)的项目上,我的配置是lnmp模式,如果所示。

浅谈linux编写定时导出数据库的PHP脚本_第1张图片

3. 然后在服务器或虚拟机测试运行下这个脚本,看一下有没有问题(重要一步)如图所示为执行成功的页面,导出的数据库文件路径可以自己定义。

浅谈linux编写定时导出数据库的PHP脚本_第2张图片

注意:命令是:/usr/local/php/bin/php db_backup.php,前面的/usr/local/php/bin/php是你安装php的可执行文件的目录(不一定每一个的都一样),后面的db_backup.php是你的脚本文件的名称。

4. 下一步就是把这个PHP脚本加到定时任务上

crontab -e  (查看linux上有哪些定时任务)

如图所示:
浅谈linux编写定时导出数据库的PHP脚本_第3张图片

注意:
50 12 * * * /usr/local/php/bin/php /home/wwwroot/default/db_backup.php
讲解:
50 12 * * *                 -- 这部分是定时任务的设置时间(测试可以以一分钟来测试是否有执行)
/usr/local/php/bin/php      -- 这部分是安装php的可执行文件的路径
/home/wwwroot/default/db_backup.php   --这部分是PHP脚本的绝对路径

过了一分钟后,查看是否有导出数据库的文件
浅谈linux编写定时导出数据库的PHP脚本_第4张图片

发现已经导出成功了,到这里就完成了。(这里有注意一点,写的脚本必须是unix下的格式,不然可能会报错)报错方式如下:unexpected end of file或syntax error near unexpected token `fi’等

具体解决方式如下:

vim db_backup.php (编辑脚本文件)

浅谈linux编写定时导出数据库的PHP脚本_第5张图片

:set ff  (查看文件的格式,如果是unix就把没问题,如果是dos的就要改成unix)
:set ff=unix  (把文件格式改成unix)

浅谈linux编写定时导出数据库的PHP脚本_第6张图片

5. 补充linux的部分命令:

  1. 安装crontab命令:
yum install crontabs
  1. 查看crontab服务状态:
service crond status
  1. 手动启动crontab服务:
service crond start
  1. 加入开机自动启动:
chkconfig –level 35 crond on
  1. crontab命令:
-e  编辑该用户的计时器设置。
-l  列出该用户的计时器设置。
-r  删除该用户的计时器设置。
-u   <用户名称>  指定要设定计时器的用户名称。
  1. crontab 格式:
基本格式 :
分钟   小时   日   月   星期   命令
第1列表示分钟159 每分钟用*或者 */1表示
第2列表示小时1230表示0点)
第3列表示日期1314列 表示月份1125列标识号星期060表示星期天)
第6列要运行的命令

记住几个特殊符号的含义:*”代表取值范围内的数字,/”代表”每”,-”代表从某个数字到某个数字,,”分开几个离散的数字

 Use the hash sign to prefix a comment
 +—————- minute (059)
 | +————- hour (023)
 | | +———- day of month (131)
 | | | +——- month (112)
 | | | | +- day of week (07) (Sunday=0 or 7)
 | | | | |
 * * * * * command to be executed

以上完成的操作如有不正确的地方还望诸位多多指教

你可能感兴趣的:(Php)