You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
zhishifufei_php/vendor/tp5er/tp5-databackup/README.md

199 lines
5.8 KiB

[![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)
## 最佳数据备份还原- shell脚本方式
~~~
//备份整个数据库
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
~~~
## 该库版本说明
1. 0.0.1 支持thinkphp5
2. 0.1.0 支持thinkphp5 thinkphp5.1
3. 1.0.0 支持thinkphp5,thinkphp5.1,thinkphp6 同时会以thinphp6为主
4. 2.x 计划完全支持thinkphp6 不再向下兼容
5. tp5-demo目录下的案例是基于thinkphp5如果需要更高版本thinkphp自己参考test代码进行模仿修改
## 使用本类进行数据库备份
### 使用composer进行安装
~~~
composer require tp5er/tp5-databackup
~~~
> 同时支持tp6和tp5版本
### 引入类文件
~~~
use \tp5er\Backup\Backup;
~~~
### 参数说明
~~~
$start无论是备份还是还原只要一张表备份完成$start就是返回的0
$file sql文件的名字下面有名字命名规范如果名字命令不规范在展示列表中就会出现错误
~~~
### 配置文件
~~~
$config=array(
'path' => './backup/',//数据库备份路径
'part' => 20971520,//数据库备份卷大小
'compress' => 0,//数据库备份文件是否启用压缩 0不压缩 1 压缩
'level' => 9 //数据库备份文件压缩级别 1普通 4 一般 9最高
);
~~~
### 实例化
~~~
$db= new Backup($config);
~~~
### 数据类表列表
~~~
return $this->fetch('index',['list'=>$db->dataList()]);
~~~
### 备份文件列表
~~~
return $this->fetch('importlist',['list'=>$db->fileList()]);
~~~
### 备份表
~~~
$tables="数据库表列表";
$start= $db->setFile($file)->backup($tables[$id], 0);
~~~
### 导入表
~~~
$start=0;
$start= $db->setFile($file)->import($start);
~~~
### 删除备份文件
~~~
$db->delFile($time);
~~~
### 下载备份文件
~~~
$db->downloadFile($time);
~~~
### 修复表
~~~
$db->repair($tables)
~~~
### 优化表
~~~
$db->optimize($tables)
~~~
### 大数据备份采取措施1
~~~
如果备份数据比较大的情况下,需要修改如下参数
//默认php代码能够申请到的最大内存字节数就是134217728 bytes,如果代码执行的时候再需要更多的内存,根据情况定义指定字节数
memory_limit = 1024M
//默认php代码申请到的超时时间是20s,如果代码执行需要更长的时间,根据代码执行的超时时间定义版本运行超时时间
max_execution_time =1000
~~~
### 大数据备份采取措施2
~~~
自由设置超时时间。支持连贯操作,该方法主要使用在表备份和还原中,防止备份还原和备份不完整
//备份
$time=0//表示不限制超时时间,直到程序结束,(慎用)
$db->setTimeout($time)->setFile($file)->backup($tables[$id], 0);
//还原
$db->setTimeout($time)->setFile($file)->import($start);
~~~
### 备份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
~~~