Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
如何使用Larave制定一个MySQL数据库备份计划任务_创想鸟

如何使用Larave制定一个MySQL数据库备份计划任务

本篇文章给大家带来的内容是关于如何使用Larave制定一个MySQL数据库备份计划任务 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

你可以在终端里通过运行一行命令导出整个数据库。这种方案不仅简单直接而且有效。不过有更加自动化的解决方案。让我们来看看究竟是什么!

852224080-5b722d9228b37_articlex.png

背景

几天前,我登录到错误的数据库中然后干掉了 18 000 行线上数据记录。更糟糕的是,我们没有对这个数据库进行备份。然后,我决定编写一个能够自动完成数据库导出并保存到 SQL 文件的脚本。

另外,如果你需要一款功能强大的数据备份系统,你可以看看 这个 扩展。这样我们就无需关注更多的数据库备份细节而仅需将焦点放到数据库导出和导出计划上。

导出命令

使用这个单行 snippet,你可以快速的将数据库导出到 SQL 文件。很多应用使用下面这个命令从数据库导出数据。

mysqldump -u[user] -p[pass] [db] > [file_path]

正如你所看到的那样,我们需要传入用户名、密码和需要导出的 DB,然后将输出重定向到指定的文件。食用简单方便,功效显著。

现在让我们将这个命令通过使用 artisan 命令进行封装,使其更易于运行和可加入计划任务。

Artiasn 控制台接口热身

通过使用 artisan 控制台(console)集成 shell 命令的一个重要出发点是,能够一次编写到处运行。我们要做的是配置并使用这些配置。这意味着,一旦有参数被修改,我们不需要通过命令本身进行调整。接下来,我们可以来创建这个控制台命令。

通过运行 php artisan make:comman 命令来创建一个自定义命令。这里我们的命令命名为 BackupDatabase。当创建完你的命令后,Laravel 会自动的将命令注册到系统中。你需要做的,仅仅是去定义命令的签名(signature)。

让我们来预览一下这个命令文件;稍后会详细解释它是如何运行的:

process = new Process(sprintf(            'mysqldump -u%s -p%s %s > %s',            config('database.connections.mysql.username'),            config('database.connections.mysql.password'),            config('database.connections.mysql.database'),            storage_path('backups/backup.sql')        ));    }    public function handle()    {        try {            $this->process->mustRun();            $this->info('The backup has been proceed successfully.');        } catch (ProcessFailedException $exception) {            $this->error('The backup process has been failed.');        }    }}

你也看到了,我们的命令签名为 db:backup。由于 Laravel 已经有了 db 命令空间,这样命令更加清晰命令。

在构造函数中,我们实例化一个新的 SymfonyComponentProcessProcess 实例。原因是这里我们需要使用 Symfony 的 Process 组件 – 而不是简单的调用 shell_exec 函数。这个组件提供了很多好赞的特性。比如,如果进程失败,我们可以抛出异常,然后有效处理异常。

如果你是用的是 process 的 run() 方法,你需要手动的去检测运行错误然后抛出异常。而通过 mustRun() 方法,它会自动的给我们抛出异常。你可以从 文档 中获取更多信息。

我们将 shell 命令和所需的参数传入到 sprintf() 函数中,它会将占位符替换成实际的参数。在处理完 process 实例后,我们可以进行下一步 handle)( 方法的处理。

在 handle 方法里,我们有个一 try-catch 代码块。首先,我们调用 mustRun() 方法,如果没有错误,我们向控制台中输出绿色的信息;否则,抛出 ProcessFailedException 异常,并在 catch 代码块中捕获,并向控制台中输出 error 信息。

接下来呢?如果我们在控制台执行 php artisan db:backup 命令,我们就会到此处数据库然后将其保存到 storage/backups/backup.sql 文件。运行良好,不过,我们还有一些工作要做,就是编写计划任务。

编写备份任务的计划任务

首先,在 Laravel 中能够轻松创建计划任务。它内置提供了既简单又支持链式操作的定义任务的 API 接口。在继续本文阅读之前,强烈建议阅读 它的文档 中译。

然后,进入到 Console/Kernel.php 文件看看 schedule() 函数。我们可以定义任务和任务执行周期。比如,我们希望在 每周一的 23:00 运行计划,它的编码如下:

protected function schedule(Schedule $schedule){    $schedule->command('db:backup')->mondays()->at('23:00');}

是不是很简单?更棒的是,你可以在这里定义任意多个命令。调度器(scheduler)会在指定的时间分别处理这些任务。

若要运行这个调度器,我们需要执行 php artisan schedule:run 命令,然后它会触发所有需要运行的命令。这很棒,我们仅需一行命令就可以在指定的时间触发对应的任意命令。

但现在的问题时,如何管理调度器自身。这个有点像鸡生蛋蛋生鸡的问题,但是相信我,没有这么复杂。

使用 Forge 设置调度器

如果你还需要掌握 CORN 执行原理相关基础支持, Mohamed Said 有一个系列文章 深入讲解了 CRON 相关知识。其中关键点在于,我们无需为每个计划任务创建 CRON 定时器。我们仅需向前面介绍的那样定义任务执行手气,然后运行任务调取器就好了。

不过,我们需要设置运行 php artisan schedule:run 命令的时间。如果你使用了 Laravel Forge,那么可以很轻易的创建定时任务。只需进入到 Scheduler 选项卡,然后你就能创建任何你想要的计划任务。

608312892-5b722d923387e_articlex.png

如你所见,默认的已将添加了 schedule:run 命令,你需要做的就是,定义任务周期(frequency)以及替换默认命令到你服务器的命令。

如果准备好了,调度器将每次在适当的时候运行,并触发所有要执行的命令。

总结

很高兴; 我们可以提供轻量级的解决方案,而不依赖于一个更大的包。在这里,我们也可以利用 Laravel 的优势来满足需求。

我们可以使用 Process 组件轻松导出数据库,并将其封装在 artisan 命令中。然后,我们可以快速地为我们的命令设置一个执行周期,而 Laravel 的调度程序将负责剩下的工作。我们可以躺着就把活该干了。

相关推荐:

Laravel框架下的配置管理系统的设计过程(附代码)

laravel框架模型model的创建与使用方法

以上就是如何使用Larave制定一个MySQL数据库备份计划任务的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/112918.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
naver高效搜索入口_naver韩国搜索引擎中文版免注册
上一篇 2025年11月24日 00:17:06
VSCode如何实现代码自动补全?IntelliSense插件增强智能提示功能
下一篇 2025年11月24日 00:19:08

相关推荐

  • 火狐浏览器官方最新版 Firefox电脑版安装入口

    火狐浏览器官方最新版Firefox电脑版安装入口在https://www.mozilla.org/zh-CN/firefox/new/,该页面提供具备强大隐私保护、高效渲染和跨设备同步功能的最新版本下载。 火狐浏览器官方最新版 Firefox电脑版安装入口在哪里?这是不少网友都关注的,接下来由PHP…

    2026年9月23日
    100
  • mysql安装后怎么变量 mysql系统变量配置与修改

    mysql安装后怎么变量 mysql系统变量配置与修改mysql安装后怎么变量 mysql系统变量配置与修改mysql安装后怎么变量 mysql系统变量配置与修改mysql安装后怎么变量 mysql系统变量配置与修改

    要查看和修改mysql系统变量,可通过sql命令或配置文件操作。一、查看变量用show variables或查询information_schema.global_variables;二、常见需调整变量包括max_connections、innodb_buffer_pool_size、wait_ti…

    2026年9月23日 用户投稿
    600
  • 优化 Laravel Nova 动作响应消息的持久性与用户体验

    本文探讨了在 Laravel Nova 中处理长时任务后,默认动作响应消息(Toast)短暂显示的问题。针对这一挑战,我们将介绍如何利用 Laravel Nova 4 提供的 NovaNotification 功能,实现持久化的、带有交互操作的通知,从而显著提升用户体验,确保重要信息不会因消息瞬时消…

    2026年9月23日
    100
  • 如何使用Optuna优化AI大模型训练?自动化调参的详细教程

    如何使用Optuna优化AI大模型训练?自动化调参的详细教程如何使用Optuna优化AI大模型训练?自动化调参的详细教程如何使用Optuna优化AI大模型训练?自动化调参的详细教程如何使用Optuna优化AI大模型训练?自动化调参的详细教程

    Optuna通过智能搜索与剪枝机制,显著提升AI大模型超参数优化效率。它以目标函数封装训练流程,利用TPE等算法智能采样,结合ASHA等剪枝策略,在分布式环境下高效搜索最优配置,同时提供可复现性与可视化分析,降低调参成本。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Dee…

    2026年9月23日 用户投稿
    000
  • Vue.js 项目中实现练习进度保存的策略与实践

    本文将探讨在vue.js项目中实现用户练习进度保存的最佳实践。针对需要跨会话保留用户进度的场景,我们将重点介绍如何利用浏览器localstorage进行数据持久化,包括数据的序列化与反序列化、在关键生命周期钩子中加载与保存数据,以及相关的注意事项,确保用户能够从上次中断的地方继续练习。 在开发基于V…

    2026年9月23日
    100
  • 如何在mysql中备份二进制日志

    答案:MySQL二进制日志备份可通过mysqlbinlog工具导出、直接复制日志文件、定时归档及结合mysqldump全量备份实现,需配合FLUSH LOGS和SHOW BINARY LOGS确保一致性,并制定保留策略以支持数据恢复。 在 MySQL 中,二进制日志(Binary Log)记录了所有…

    2026年9月23日
    100
  • 苹果官网真品认证通道 iPhone序列号查验正品入口

    苹果官网真品认证通道为https://checkcoverage.apple.com/cn/zh/,用户可通过输入iPhone序列号查验设备激活状态、保修期限及技术支持覆盖情况,确保正品并降低二手交易风险。 苹果官网真品认证通道 iPhone序列号查验正品入口在哪里?这是不少网友都关注的,接下来由P…

    2026年9月23日
    200
  • 如何使用Java制作简易的博客系统

    首先搭建Spring Boot后端,设计BlogPost实体类并用JPA实现数据持久化,通过BlogController处理页面请求,使用Thymeleaf模板引擎渲染index和create页面,配置H2内存数据库并启用控制台,最终实现文章的发布与展示功能。 用Java制作一个简易的博客系统,核心…

    2026年9月23日
    200
  • PHP面向对象高级特性_PHP高级OOP设计模式

    PHP高级OOP特性如命名空间、Traits、魔术方法等结合设计模式可提升代码质量。1. 命名空间避免类冲突,Traits实现横向复用,后期静态绑定支持运行时解析,魔术方法增强对象控制,抽象类与接口定义契约,Final防止继承修改。2. 单例确保唯一实例,工厂封装创建逻辑,依赖注入降低耦合,观察者实…

    2026年9月23日
    100
  • mysql如何输入二进制数据 mysql代码处理blob类型教程

    mysql如何输入二进制数据 mysql代码处理blob类型教程mysql如何输入二进制数据 mysql代码处理blob类型教程mysql如何输入二进制数据 mysql代码处理blob类型教程mysql如何输入二进制数据 mysql代码处理blob类型教程

    mysql中存储二进制数据可通过选择合适的blob类型并使用sql命令实现。1. 选择tinyblob、blob、mediumblob或longblob之一,依据存储容量需求;2. 使用insert语句结合unhex()函数插入十六进制表示的二进制数据;3. 通过编程语言如php简化转换过程,使用b…

    2026年9月23日 用户投稿
    400
  • Laravel Nova 4 动作响应持久化:告别短暂Toast,拥抱长效通知

    本文探讨了Laravel Nova动作响应消息(Toast)持续时间过短的问题,特别是在处理耗时操作时。针对这一局限性,我们提供了利用Laravel Nova 4内置通知(NovaNotification)功能的解决方案,以实现更持久、可交互且用户友好的消息提示,确保用户即使在离开页面后也能及时获取…

    2026年9月23日
    000
  • mysql如何输入特殊字符 mysql写sql语句的转义方法

    mysql如何输入特殊字符 mysql写sql语句的转义方法mysql如何输入特殊字符 mysql写sql语句的转义方法mysql如何输入特殊字符 mysql写sql语句的转义方法mysql如何输入特殊字符 mysql写sql语句的转义方法

    在mysql中处理特殊字符的核心方法是使用预处理语句,1.手动转义可通过反斜杠实现,如单引号转为’、双引号转为”等,但易出错且不安全;2.更推荐使用预处理语句(prepared statements)或参数绑定,它能自动处理特殊字符并防止sql注入;3.预处理语句的优势包括安全性高,彻底杜绝sql注…

    2026年9月23日 用户投稿
    400
  • Java中ConnectException连接异常的解决方法

    答案:Java中ConnectException通常因服务未启动、网络不通或配置错误导致,需检查服务状态、IP端口配置及防火墙设置,并合理设置连接超时与重试机制。 Java中出现ConnectException通常表示应用程序尝试连接到远程服务器时失败,最常见的原因是目标主机拒绝连接或网络不通。这个…

    2026年9月23日
    200
  • AO3镜像站替代访问链接_AO3镜像站官方镜像站点

    AO3镜像站替代访问链接为https://nightalk.xyz,用户可通过主站或镜像站点登录账户,支持中文界面切换与多端同步阅读。 AO3镜像站替代访问链接在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来AO3镜像站官方镜像站点,感兴趣的网友一起随小编来瞧瞧吧! https://arc…

    2026年9月23日
    100
  • PHP高效读取大型GZ文件:揭示Gzip的顺序访问限制与实践方法

    本教程深入探讨了php中处理大型gz压缩文件的核心挑战:其固有的顺序访问特性。我们将解释为何无法对gz文件进行随机跳转读取,以及这意味着您必须从头开始按序解压数据。文章将提供一种实用的分块读取策略,并附带php示例代码,帮助开发者高效、安全地处理超大gz文件,同时讨论潜在的跨块数据处理问题及内存管理…

    2026年9月23日
    200
  • mysql怎么执行子查询 mysql输入嵌套sql语句方法

    mysql怎么执行子查询 mysql输入嵌套sql语句方法mysql怎么执行子查询 mysql输入嵌套sql语句方法mysql怎么执行子查询 mysql输入嵌套sql语句方法mysql怎么执行子查询 mysql输入嵌套sql语句方法

    mysql子查询常见类型包括标量子查询、行子查询和表子查询,分别返回一行一列、一行多列和多行多列数据;应用场景涵盖where作为过滤条件、from作为派生表、select作为标量列以及dml操作的数据提供。此外,根据与外部查询的关联性分为非关联子查询和关联子查询,前者独立执行一次,后者依赖外部查询每…

    2026年9月23日 用户投稿
    100
  • 深入理解 PHP PDO:正确获取最后插入ID的连接管理策略

    本文旨在解决 PHP PDO 中 lastInsertId() 方法返回 0 的常见问题。核心原因在于每次数据库操作时重复创建新的 PDO 连接,导致 lastInsertId() 无法在正确的会话中获取到自动递增ID。解决方案是优化数据库连接类,通过实现连接的单例模式,确保在整个请求生命周期内复用…

    2026年9月23日
    200
  • mysql如何分析索引使用 mysql创建索引后的执行计划解读

    mysql如何分析索引使用 mysql创建索引后的执行计划解读mysql如何分析索引使用 mysql创建索引后的执行计划解读mysql如何分析索引使用 mysql创建索引后的执行计划解读mysql如何分析索引使用 mysql创建索引后的执行计划解读

    要分析mysql索引使用和执行计划,核心是通过explain命令查看查询路径,并结合handler_read%状态变量评估索引效率。1. 使用explain命令分析执行计划,关注type、key、extra等列,判断是否高效利用索引;2. 通过show global status like &#82…

    2026年9月22日 用户投稿
    100
  • PHP命令怎么获取执行结果_PHP命令执行结果捕获与返回值处理技巧

    使用exec()可捕获命令输出和返回状态,shell_exec()仅获取输出,proc_open()支持精细控制;需用escapeshellarg()等函数确保安全,并优先使用内置函数替代系统命令。 在PHP中执行系统命令并获取其输出结果和返回状态,是很多运维脚本、自动化工具或与外部程序交互场景下的…

    2026年9月22日
    300
  • 解决TCPDF保存文件权限问题的完整指南

    本文旨在解决使用tcpdf在%ignore_a_1%中生成pdf并保存到服务器(’f’模式)时遇到的“permission denied”错误,尤其是在macos环境下。核心问题通常源于不正确的服务器文件路径或目标文件夹缺乏写入权限。教程将详细阐述如何构建正确的绝对文件路径,…

    2026年9月22日
    200

发表回复

登录后才能评论
关注微信