{"id":15975718,"url":"https://github.com/pkg6/tp5-databackup","last_synced_at":"2026-01-11T10:47:43.763Z","repository":{"id":39913862,"uuid":"318831874","full_name":"pkg6/tp5-databackup","owner":"pkg6","description":"thinkphp数据库备份","archived":false,"fork":false,"pushed_at":"2024-07-06T15:20:40.000Z","size":230,"stargazers_count":7,"open_issues_count":0,"forks_count":7,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-07-11T21:47:10.924Z","etag":null,"topics":["backup","database","mysql","sql"],"latest_commit_sha":null,"homepage":"https://packagist.org/packages/tp5er/tp5-databackup","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pkg6.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-05T16:14:05.000Z","updated_at":"2024-08-05T02:20:14.795Z","dependencies_parsed_at":"2022-09-21T11:11:52.147Z","dependency_job_id":"40c53ff3-7deb-4ddf-8e2d-002bfd9d193e","html_url":"https://github.com/pkg6/tp5-databackup","commit_stats":{"total_commits":24,"total_committers":5,"mean_commits":4.8,"dds":"0.29166666666666663","last_synced_commit":"b9f3b27b57d7e4d9c40a3200709e8185a59b2a23"},"previous_names":["pkg6/think-backup","pkg6/tp5-databackup"],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkg6%2Ftp5-databackup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkg6%2Ftp5-databackup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkg6%2Ftp5-databackup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pkg6%2Ftp5-databackup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pkg6","download_url":"https://codeload.github.com/pkg6/tp5-databackup/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243806035,"owners_count":20350775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","database","mysql","sql"],"created_at":"2024-10-07T22:04:42.691Z","updated_at":"2026-01-11T10:47:43.757Z","avatar_url":"https://github.com/pkg6.png","language":"PHP","readme":"[![Latest Stable Version](http://poser.pugx.org/tp5er/tp5-databackup/v)](https://packagist.org/packages/tp5er/tp5-databackup) [![Total Downloads](http://poser.pugx.org/tp5er/tp5-databackup/downloads)](https://packagist.org/packages/tp5er/tp5-databackup) [![Latest Unstable Version](http://poser.pugx.org/tp5er/tp5-databackup/v/unstable)](https://packagist.org/packages/tp5er/tp5-databackup) [![License](http://poser.pugx.org/tp5er/tp5-databackup/license)](https://packagist.org/packages/tp5er/tp5-databackup) [![PHP Version Require](http://poser.pugx.org/tp5er/tp5-databackup/require/php)](https://packagist.org/packages/tp5er/tp5-databackup)\n\n\n\n## 重要的事情说三遍！！！重要的事情说三遍！！！重要的事情说三遍！！！\n\n\u003e 1. [pkg6](https://github.com/pkg6)都是作者自己一个人在维护，欢迎提交[pull request](https://github.com/pkg6/think-backup/pulls) 减少本人的精力\n\u003e 2. 作者使用的php版本是php7.4，目测写的方法兼容8以上，如果不兼容，可以提交[pull request](https://github.com/pkg6/think-backup/pulls)，记得写一下注释哦！！！\n\u003e 3. 通过队列或命令行的方式，再也不用担心数据备份不完整\n\n## 使用本类进行数据库备份\n\n\n### 使用composer进行安装\n~~~\ncomposer require tp5er/tp5-databackup\n~~~\n\n### 使用方式1: 继承 `tp5er\\Backup\\controller\\BackupController`\n\n\u003e 重要的事情说三遍！！！重要的事情说三遍！！！重要的事情说三遍！！！\n\u003e\n\u003e 在thinkphp框架中定义一个控制器，然后继承`tp5er\\Backup\\controller\\BackupController`，然后跳转到`BackupController`控制器中查看方法，都是中国人看的懂中国话。\n\n### 使用方式2: 使用路由`route/app.php`\n\n\u003e 通过路由使用案例： \\tp5er\\Backup\\Route::route();\n\u003e\n\u003e 由于页面使用layui渲染的前端页面，你可以参考前端页面自己量身定做，然后使用\\tp5er\\Backup\\Route::api();调用接口也是可以的哦\n\n~~~\n\u003c?php\n// +----------------------------------------------------------------------\n// | ThinkPHP [ WE CAN DO IT JUST THINK ]\n// +----------------------------------------------------------------------\n// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.\n// +----------------------------------------------------------------------\n// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )\n// +----------------------------------------------------------------------\n// | Author: liu21st \u003cliu21st@gmail.com\u003e\n// +----------------------------------------------------------------------\nuse think\\facade\\Route;\n\nRoute::get('think', function () {\n    return 'hello,ThinkPHP6!';\n});\n\nRoute::get('hello/:name', 'index/hello');\n\n\\tp5er\\Backup\\Route::route();\n~~~\n\n### 使用方式3: 通过队列的方法\n\n#### 还原数据\n\n~~~\n$data[\"database\"]=\"mysql\";\n$data[\"opt\"]=\"import\";\n$data[\"filename\"]=\"fastadmin-mysql-20240416184903.sql\";\nbackup_queue($data);\n~~~\n\n#### 备份数据/修复表/优化表\n\n~~~\n$data[\"database\"]=\"mysql\";\n$data[\"opt\"]=\"backup\" //backup,repair,optimize;\n$data[\"table\"]=[\"fa_category\",\"fa_auth_rule\"];\nbackup_queue($data);\n~~~\n\n### 使用方式4: 通过命令行\n\n~~~\n//进入交互模式进行相关操作\nphp think backup:choice\n\n//备份整个数据库表结构和表数据\nphp think backup:database\n\n//还原数据\nphp think backup:import fastadmin-mysql-20240416184903.sql\n\n//列出所有备份文件\nphp think backup:list\n\n//在执行本代码中会使用到缓存这里是清理缓存的命令\nphp think backup:cleanup\n~~~\n\n### 使用方式5: 自定义（1.x升级到2.x）\n\n\u003e 1.x和2.x 方法对比\n\n| 1.x                                                          | 2.x                                                          | 描述         |\n| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------ |\n| [点击跳转](https://github.com/pkg6/tp5-databackup/blob/ac29c488bca8a4a123b105ef2959a6cde1f67649/src/Backup.php#L54) | [点击跳转](https://github.com/pkg6/tp5-databackup/blob/main/config/backup.php) | 配置项       |\n| $db= new \\tp5er\\Backup\\Backup([$config](https://github.com/pkg6/tp5-databackup/blob/ac29c488bca8a4a123b105ef2959a6cde1f67649/src/Backup.php#L54)); | 无需初始化使用facade方式                                     | 初始化       |\n| $db-\u003edataList()                                              | Backup::tables()                                             | 数据类表列表 |\n| $db-\u003efileList()                                              | Backup::files()                                              | 备份文件列表 |\n| $tables=\"数据库表列表\"; $start= $db-\u003esetFile($file)-\u003ebackup($tables[$id], 0); |                                                              | 备份表       |\n| $db-\u003esetFile($file)-\u003eimport($start)                          | Backup::import($file)                                        | 导入表       |\n| delFile($time)                                               | unlink($filename)                                            | 删除备份文件 |\n| downloadFile($time)                                          | backup_download($filename)                                   | 下载备份文件 |\n| $db-\u003erepair($tables)                                         | Backup::repair($tables)                                      | 修复表       |\n| $db-\u003eoptimize($tables)                                       | Backup::optimize($tables)                                    | 优化表       |\n| https://github.com/pkg6/tp5-databackup/tree/1.x/tp5-demo     | 进行了内置 [控制器](https://github.com/pkg6/tp5-databackup/tree/main/src/controller) 和 [视图](https://github.com/pkg6/tp5-databackup/tree/main/src/views/backup) | 案例代码     |\n\n\u003e  备份表\n\u003e\n\u003e 1.x  是控制器中将需备份到表结构写到缓存/cookie中，然后根据索引找到表\n\u003e\n\u003e $tables=\"数据库表列表\"; \n\u003e\n\u003e $start= $db-\u003esetFile($file)-\u003ebackup($tables[$id], 0);\n\u003e\n\u003e 2.x 将需备份到表写到缓存中，无需您来处理，只需要您进行按步骤操作\n\u003e\n\u003e 第一步将备份到表进行缓存，关键方法： Backup::backupStep1($tables)\n\u003e\n\u003e 第二步备份表结构和数据，关键方法：Backup::backupStep2($tableIndex,$page),返回page直到page=0 循环结束表和表数据备份完毕\n\u003e\n\u003e 第三步清理缓存，关键方法Backup::cleanup()\n\n## 事件`参考代码`\n\n~~~\n\u003c?php\n\nnamespace tp5er\\Backup;\n\nuse think\\facade\\Event as tpEvent;\n\n\nclass Event\n{\n    //在备份第一步使用事件\n    const backupStep1 = \"tp5er.backup.step1\";\n    //在备份第二步使用初始事件\n    const backupStep2 = \"tp5er.backup.step2\";\n    //在备份第二步备份数据使用的事件\n    const backupStep2Data = \"tp5er.backup.step2.data\";\n    \n    /**\n     * @return void\n     */\n    public static function event()\n    {\n        tpEvent::listen(Event::backupStep1, function ($data) {\n            /**\n             * @var BackupInterface $backup\n             */\n            list($backup, $filename, $table, $ret) = $data;\n\n            //在备份第一步执行\n            //Your TODO\n        });\n        tpEvent::listen(Event::backupStep2, function ($data) {\n            /**\n             * @var BackupInterface $backup\n             */\n            list($backup, $filename, $table) = $data;\n            //Your TODO\n\n        });\n        tpEvent::listen(Event::backupStep2Data, function ($data) {\n            /**\n             * @var BackupInterface $backup\n             */\n            list($backup, $filename, $sql, $lastPageOrIsBackupData) = $data;\n            //Your TODO\n        });\n    }\n\n}\n~~~\n\n## 基础概念\n\nreader：定义读取SQL的方法，目前只支持Mysql，自定义扩展可以实现  `tp5er\\Backup\\reader\\ReaderInterface`\n\nwriter：定义的写入SQL方法，目前只支持File，自定义扩展可以实现  `tp5er\\Backup\\writer\\WriterInterface`\n\nFactory：定义reader和writer对象初始化\n\nBackupManager：所有的相关操作都在这里\n\n## 版本修改记录\n\n[CHANGELOG.md](https://github.com/pkg6/think-backup/blob/main/CHANGELOG.md)\n\n## 提交代码规范\n\n1. fork一份代码到自己账号下,生成如 `test/tp5-databackup`\n2. 拉去一个分支 `develop` ，看个人习惯，无所谓\n3. 将develop提交[pull request](https://github.com/pkg6/think-backup/pulls) \n4. 等待作者合并\n5. 定期（当接受到第一个合并请求开始计算一周之内）会打tag，tag规范：2.1.x 作为新方法新类的出现，2.x.x作为对以往的方法和类进行变更甚至是破坏性的变更\n\n## 分支说明\n\nmain 分支 ：2.x版本最新代码，tag2.x标签是在该分支进行上\n\n1.x分支 ：1.x版本的最新代码，tag1.x标签是在该分支进行上\n\ndevelop分支：作者的开发分支，主要开发2.x版本的bug\n\n## 作者案例开发流程\n\n~~~\ncomposer create-project topthink/think tp\ncd tp\ncomposer require tp5er/tp5-databackup dev-develop\nrm -rf vendor/tp5er/tp5-databackup\ngit clone -b develop git@github.com:pkg6/tp5-databackup.git vendor/tp5er/tp5-databackup\n~~~\n\n\u003e 进入vendor/tp5er/tp5-databackup进行修改代码，然后进行提交代码，提交[pull request](https://github.com/pkg6/think-backup/pulls) 进行合并到main分支\n\n## 其他手段进行数据备份还原\n\n### mysql常见命令\n\n~~~\n\n//备份整个数据库\nmysqldump -uroot -hhost -ppassword dbname \u003e backdb.sql\n//备份数据库中的某个表\nmysqldump -uroot -hhost -ppassword dbname tbname1, tbname2 \u003e backdb.sql\n//备份多个数据库\nmysqldump -uroot -hhost -ppassword --databases dbname1, dbname2 \u003e backdb.sql\n//备份系统中所有数据库\nmysqldump -uroot -hhost -ppassword --all-databases \u003e backdb.sql\n\n\n//恢复\nmysql -uroot -p'123456' dbname \u003c backdb.sql \n\n\n//远程备份与还原\n备份数据库 192.168.3.10 root 123456 test\nmysqldump -h 192.168.3.10 -u root -p123456 test \u003e test.sql\n还原数据库 192.168.3.11 root 123456 test\nmysql -h 192.168.3.11 -P 3306 -u root -p123456 test \u003c test.sql\n~~~\n\n### 备份shell脚本\n\n~~~\n#!/bin/bash\n\n# 1.备份全部数据库的数据和结构\n# mysqldump -uroot -p123456 -A \u003e /data/mysqlDump/mydb.sql\n# 2.备份全部数据库的结构（加 -d 参数）\n# mysqldump -uroot -p123456 -A -d \u003e /data/mysqlDump/mydb.sql\n# 3.备份全部数据库的数据(加 -t 参数)\n# mysqldump -uroot -p123456 -A -t \u003e /data/mysqlDump/mydb.sql\n# 4.备份单个数据库的数据和结构(数据库名mydb)\n# mysqldump -uroot-p123456 mydb \u003e /data/mysqlDump/mydb.sql\n# 5.备份单个数据库的结构\n# mysqldump -uroot -p123456 mydb -d \u003e /data/mysqlDump/mydb.sql\n# 6.备份单个数据库的数据\n# mysqldump -uroot -p123456 mydb -t \u003e /data/mysqlDump/mydb.sql\n# 7.备份多个表的数据和结构（数据，结构的单独备份方法与上同）\n# mysqldump -uroot -p123456 mydb t1 t2 \u003e /data/mysqlDump/mydb.sql\n# 8.一次备份多个数据库\n# mysqldump -uroot -p123456 --databases db1 db2 \u003e /data/mysqlDump/mydb.sql\n\n# 1.在系统命令行中，输入如下实现还原：\n# mysql -uroot -p123456 \u003c /data/mysqlDump/mydb.sql\n# 2.在登录进入mysql系统中,通过source指令找到对应系统中的文件进行还原：\n# mysql\u003e source /data/mysqlDump/mydb.sql\n\n\n#保存备份个数，备份31天数据\nnumber=31\n#备份保存路径\nbackup_dir=/root/mysqlbackup\n#日期\ndd=`date +%Y-%m-%d-%H-%M-%S`\n#备份工具\ntool=mysqldump\n#用户名\nusername=root\n#密码\npassword=123456\n#将要备份的数据库\ndatabase_name=demo\n\n#如果文件夹不存在则创建\nif [ ! -d $backup_dir ];\nthen     \n    mkdir -p $backup_dir;\nfi\n\n#简单写法 mysqldump -u root -p123456 users \u003e /root/mysqlbackup/users-$filename.sql\n$tool -u $username -p$password $database_name \u003e $backup_dir/$database_name-$dd.sql\n\n#写创建备份日志\necho \"create $backup_dir/$database_name-$dd.dupm\" \u003e\u003e $backup_dir/log.txt\n\n#找出需要删除的备份\ndelfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`\n\n#判断现在的备份数量是否大于$number\ncount=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`\n\nif [ $count -gt $number ]\nthen\n  #删除最早生成的备份，只保留number数量的备份\n  rm $delfile\n  #写删除文件日志\n  echo \"delete $delfile\" \u003e\u003e $backup_dir/log.txt\nfi\n~~~\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkg6%2Ftp5-databackup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpkg6%2Ftp5-databackup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpkg6%2Ftp5-databackup/lists"}