Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/pkg6/tp5-databackup

thinkphp数据库备份
https://github.com/pkg6/tp5-databackup

backup database mysql sql

Last synced: 22 days ago
JSON representation

thinkphp数据库备份

Awesome Lists containing this project

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)

## 重要的事情说三遍!!!重要的事情说三遍!!!重要的事情说三遍!!!

> 1. [pkg6](https://github.com/pkg6)都是作者自己一个人在维护,欢迎提交[pull request](https://github.com/pkg6/think-backup/pulls) 减少本人的精力
> 2. 作者使用的php版本是php7.4,目测写的方法兼容8以上,如果不兼容,可以提交[pull request](https://github.com/pkg6/think-backup/pulls),记得写一下注释哦!!!
> 3. 通过队列或命令行的方式,再也不用担心数据备份不完整

## 使用本类进行数据库备份

### 使用composer进行安装
~~~
composer require tp5er/tp5-databackup
~~~

### 使用方式1: 继承 `tp5er\Backup\controller\BackupController`

> 重要的事情说三遍!!!重要的事情说三遍!!!重要的事情说三遍!!!
>
> 在thinkphp框架中定义一个控制器,然后继承`tp5er\Backup\controller\BackupController`,然后跳转到`BackupController`控制器中查看方法,都是中国人看的懂中国话。

### 使用方式2: 使用路由`route/app.php`

> 通过路由使用案例: \tp5er\Backup\Route::route();
>
> 由于页面使用layui渲染的前端页面,你可以参考前端页面自己量身定做,然后使用\tp5er\Backup\Route::api();调用接口也是可以的哦

~~~

// +----------------------------------------------------------------------
use think\facade\Route;

Route::get('think', function () {
return 'hello,ThinkPHP6!';
});

Route::get('hello/:name', 'index/hello');

\tp5er\Backup\Route::route();
~~~

### 使用方式3: 通过队列的方法

#### 还原数据

~~~
$data["database"]="mysql";
$data["opt"]="import";
$data["filename"]="fastadmin-mysql-20240416184903.sql";
backup_queue($data);
~~~

#### 备份数据/修复表/优化表

~~~
$data["database"]="mysql";
$data["opt"]="backup" //backup,repair,optimize;
$data["table"]=["fa_category","fa_auth_rule"];
backup_queue($data);
~~~

### 使用方式4: 通过命令行

~~~
//进入交互模式进行相关操作
php think backup:choice

//备份整个数据库表结构和表数据
php think backup:database

//还原数据
php think backup:import fastadmin-mysql-20240416184903.sql

//列出所有备份文件
php think backup:list

//在执行本代码中会使用到缓存这里是清理缓存的命令
php think backup:cleanup
~~~

### 使用方式5: 自定义(1.x升级到2.x)

> 1.x和2.x 方法对比

| 1.x | 2.x | 描述 |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------ |
| [点击跳转](https://github.com/pkg6/tp5-databackup/blob/ac29c488bca8a4a123b105ef2959a6cde1f67649/src/Backup.php#L54) | [点击跳转](https://github.com/pkg6/tp5-databackup/blob/main/config/backup.php) | 配置项 |
| $db= new \tp5er\Backup\Backup([$config](https://github.com/pkg6/tp5-databackup/blob/ac29c488bca8a4a123b105ef2959a6cde1f67649/src/Backup.php#L54)); | 无需初始化使用facade方式 | 初始化 |
| $db->dataList() | Backup::tables() | 数据类表列表 |
| $db->fileList() | Backup::files() | 备份文件列表 |
| $tables="数据库表列表"; $start= $db->setFile($file)->backup($tables[$id], 0); | | 备份表 |
| $db->setFile($file)->import($start) | Backup::import($file) | 导入表 |
| delFile($time) | unlink($filename) | 删除备份文件 |
| downloadFile($time) | backup_download($filename) | 下载备份文件 |
| $db->repair($tables) | Backup::repair($tables) | 修复表 |
| $db->optimize($tables) | Backup::optimize($tables) | 优化表 |
| 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) | 案例代码 |

> 备份表
>
> 1.x 是控制器中将需备份到表结构写到缓存/cookie中,然后根据索引找到表
>
> $tables="数据库表列表";
>
> $start= $db->setFile($file)->backup($tables[$id], 0);
>
> 2.x 将需备份到表写到缓存中,无需您来处理,只需要您进行按步骤操作
>
> 第一步将备份到表进行缓存,关键方法: Backup::backupStep1($tables)
>
> 第二步备份表结构和数据,关键方法:Backup::backupStep2($tableIndex,$page),返回page直到page=0 循环结束表和表数据备份完毕
>
> 第三步清理缓存,关键方法Backup::cleanup()

## 事件`参考代码`

~~~
进入vendor/tp5er/tp5-databackup进行修改代码,然后进行提交代码,提交[pull request](https://github.com/pkg6/think-backup/pulls) 进行合并到main分支

## 其他手段进行数据备份还原

### mysql常见命令

~~~

//备份整个数据库
mysqldump -uroot -hhost -ppassword dbname > backdb.sql
//备份数据库中的某个表
mysqldump -uroot -hhost -ppassword dbname tbname1, tbname2 > backdb.sql
//备份多个数据库
mysqldump -uroot -hhost -ppassword --databases dbname1, dbname2 > backdb.sql
//备份系统中所有数据库
mysqldump -uroot -hhost -ppassword --all-databases > backdb.sql

//恢复
mysql -uroot -p'123456' dbname < backdb.sql

//远程备份与还原
备份数据库 192.168.3.10 root 123456 test
mysqldump -h 192.168.3.10 -u root -p123456 test > test.sql
还原数据库 192.168.3.11 root 123456 test
mysql -h 192.168.3.11 -P 3306 -u root -p123456 test < test.sql
~~~

### 备份shell脚本

~~~
#!/bin/bash

# 1.备份全部数据库的数据和结构
# mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql
# 2.备份全部数据库的结构(加 -d 参数)
# mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql
# 3.备份全部数据库的数据(加 -t 参数)
# mysqldump -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql
# 4.备份单个数据库的数据和结构(数据库名mydb)
# mysqldump -uroot-p123456 mydb > /data/mysqlDump/mydb.sql
# 5.备份单个数据库的结构
# mysqldump -uroot -p123456 mydb -d > /data/mysqlDump/mydb.sql
# 6.备份单个数据库的数据
# mysqldump -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql
# 7.备份多个表的数据和结构(数据,结构的单独备份方法与上同)
# mysqldump -uroot -p123456 mydb t1 t2 > /data/mysqlDump/mydb.sql
# 8.一次备份多个数据库
# mysqldump -uroot -p123456 --databases db1 db2 > /data/mysqlDump/mydb.sql

# 1.在系统命令行中,输入如下实现还原:
# mysql -uroot -p123456 < /data/mysqlDump/mydb.sql
# 2.在登录进入mysql系统中,通过source指令找到对应系统中的文件进行还原:
# mysql> source /data/mysqlDump/mydb.sql

#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/root/mysqlbackup
#日期
dd=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
tool=mysqldump
#用户名
username=root
#密码
password=123456
#将要备份的数据库
database_name=demo

#如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi

#简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
$tool -u $username -p$password $database_name > $backup_dir/$database_name-$dd.sql

#写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt

#找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
#删除最早生成的备份,只保留number数量的备份
rm $delfile
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
~~~