07/04
2018
Implement the database backup restore
//备份整个数据库 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
composer require tp5er/tp5-databackup
同时支持tp6和tp5版本, (*2)
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)
如果备份数据比较大的情况下,需要修改如下参数 //默认php代码能够申请到的最大内存字节数就是134217728 bytes,如果代码执行的时候再需要更多的内存,根据情况定义指定字节数 memory_limit = 1024M //默认php代码申请到的超时时间是20s,如果代码执行需要更长的时间,根据代码执行的超时时间定义版本运行超时时间 max_execution_time =1000
自由设置超时时间。支持连贯操作,该方法主要使用在表备份和还原中,防止备份还原和备份不完整 //备份 $time=0//表示不限制超时时间,直到程序结束,(慎用) $db->setTimeout($time)->setFile($file)->backup($tables[$id], 0); //还原 $db->setTimeout($time)->setFile($file)->import($start);
#!/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