资讯专栏INFORMATION COLUMN

Yii2 开发MYSQL数据备份功能

Warren / 843人阅读

摘要:应用场景数据对于网站来说是非常重要的一般后台都有数据备份功能。使用的第三方拓展可以快速开发。是基于的一款第三方扩展,安装配置一下可以正常访问,也可以很方便自定义。在开发过程中,因为备份后在导入出现一些问题。所以做了一些修改。

应用场景

</>复制代码

  1. 数据对于网站来说 是非常重要的 一般 cms 后台 都有 数据备份功能。使用Yii 的第三方拓展 可以快速开发。

spanjeta/yii2-backup

</>复制代码

  1. spanjeta/yii2-backup 是基于Yii2 的一款 第三方扩展,安装配置一下可以正常访问,也可以很方便自定义。在开发过程中,因为备份后在 phpMyAdmin 导入出现一些问题。所以做了一些修改。

安装spanjeta/yii2-backup 1、写入扩展包

</>复制代码

  1. 在项目找到composer.json 打开加入

</>复制代码

  1. "require": {
  2. "spanjeta/yii2-backup": "*"
  3. },
2、安装扩展

</>复制代码

  1. 打开cmd 命令 找到项目目录下 执行 (注意:必须先安装 composer ,否则失败)

</>复制代码

  1. composer update
配置spanjeta/yii2-backup

</>复制代码

  1. 找到 ackendconfigmain.php 打开加入以下代码

</>复制代码

  1. return[
  2. "modules" => [
  3. "backup" => [
  4. "class" => "spanjetamodulesackupModule",
  5. ],
  6. ],
  7. ]
访问测试数据备份功能

</>复制代码

  1. 确保你的项目有创建目录的权限,访问 index.php?r=backup 到此扩展安装完毕

修改spanjeta/yii2-backup

</>复制代码

  1. 默认安装 在vendor 目录下,找到 spanjetayii2-backupcontrollers 打开 DefaultController.php 文件,修改以下代码

1、找到 getData() 直接覆盖即可

</>复制代码

  1. public function getData($tableName) {
  2. $sql = "SELECT * FROM " . $tableName;
  3. $cmd = Yii::$app->db->createCommand ( $sql );
  4. $dataReader = $cmd->query();
  5. $data_string="";
  6. foreach ( $dataReader as $data ) {
  7. foreach ($data as $key => $value) {
  8. if(empty($value)){
  9. unset($data[$key]);
  10. }else{
  11. $datas[$key]=mysql_real_escape_string($value);
  12. }
  13. }
  14. $itemNames = array_keys ( $datas );
  15. $itemNames = array_map ( "addslashes", $itemNames );
  16. $items = join ( "`,`", $itemNames );
  17. $itemValues = array_values ( $datas );
  18. $valueString = join ( "","", $itemValues );
  19. $valueString = "("" . $valueString . ""),";
  20. $values = "
  21. " . $valueString;
  22. if ($values != "") {
  23. $data_string .= "INSERT INTO `$tableName` (`$items`) VALUES" . rtrim ( $values, "," ) . ";" . PHP_EOL;
  24. }
  25. }
  26. if (empty($data_string)){
  27. return null;
  28. }
  29. if ($this->fp) {
  30. $this->writeComment ( "TABLE DATA " . $tableName );
  31. $final = $data_string . PHP_EOL . PHP_EOL . PHP_EOL;
  32. fwrite ( $this->fp, $final );
  33. } else {
  34. $this->tables [$tableName] ["data"] = $data_string;
  35. return $data_string;
  36. }
  37. }
2、搜索以下代码,并注释掉

</>复制代码

  1. fwrite ( $this->fp, "SET AUTOCOMMIT=0;" . PHP_EOL );
3、找到 actionCreate() 直接覆盖即可

</>复制代码

  1. public function actionCreate() {
  2. $tables = $this->getTables ();
  3. if (! $this->StartBackup ()) {
  4. Yii::$app->user->setFlash ( "success", "Error" );
  5. return $this->render ( "index" );
  6. }
  7. foreach ( $tables as $tableName ) {
  8. $this->getColumns ( $tableName );
  9. $this->getData ( $tableName );
  10. }
  11. $this->EndBackup ();
  12. $this->redirect ( array (
  13. "index"
  14. ) );
  15. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30380.html

相关文章

  • Yii2实现跨mysql数据库关联查询排序功能

    摘要:于是就会报出这样一个错误要在两个数据库同一台服务器上进行关联数据查询,纯语句如下转化成语句时默认不会在表明前添加数据库名,于是在执行语句时就会默认此表在数据库下。默认是这样的只需要在表明前添加数据库名为了提高代码稳定性,可以这样写 背景:在一个mysql服务器上(注意:两个数据库必须在同一个mysql服务器上)有两个数据库: memory (存储常规数据表) 中有一个 use...

    lx1036 评论0 收藏0
  • 基于Yii2的应用开发引擎RageFrame

    摘要:多入口模式,多入口分为后台前端,微信,其他或接口对接,不同的业务不同的设备进入不同的入口。对接微信公众号,使用了一款优秀的微信非官方,系统内已集成了该,调用方式会在文档说明,也可直接看其文档进入深入开发。 RageFrame 为二次开发而生,让开发变得更简单。 前言 RageFrame项目创建于2016年4月16日,基于Yii2框架开发的应用开发引擎,目前正在成长中,目的是为了集成更多...

    enda 评论0 收藏0
  • Yii2 数据库复制和读写分离

    摘要:前言许多数据库支持数据库复制来获得更好的数据库可用性,以及更快的服务器响应时间,减少数据库的压力。通过数据库复制功能,数据从所谓的主服务器被复制到从服务器。 前言 许多数据库支持数据库复制来获得更好的数据库可用性,以及更快的服务器响应时间,减少数据库的压力。通过数据库复制功能,数据从所谓的主服务器被复制到从服务器。主服务器做增删改,而从服务器做查询。 读写分离前提条件:linux数据库...

    William_Sang 评论0 收藏0

发表评论

0条评论

Warren

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<