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.
5.8 KiB
5.8 KiB
最佳数据备份还原- 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
该库版本说明
- 0.0.1 支持thinkphp5
- 0.1.0 支持thinkphp5 和 thinkphp5.1
- 1.0.0 支持thinkphp5,thinkphp5.1,thinkphp6 同时会以thinphp6为主
- 2.x 计划完全支持thinkphp6 不再向下兼容
- 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