我想到的有三种思路吧
创新互联建站-专业网站定制、快速模板网站建设、高性价比儋州网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式儋州网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖儋州地区。费用合理售后完善,10余年实体公司更值得信赖。
1.如果服务器允许mysqldump 并且没有禁止PHP的shell_exec()这个函数的话
直接在PHP里面执行mysqldump就可以了。
2.通过mysql_query('show tables')的返回值遍历每个表,循环对每个表使用查询语句
select * into outfile '路径/文件名' from 表名
缺点是这样得到的是纯数据,恢复数据的时候你需要额外再写脚本
3.同样通过show tables返回表名,遍历每个表,通过select 语句查询,然后逐条结果处理,比如手工添加drop table 和create table 以及insert into等等,然后再写入文件。这样得到的备份数据是比较接近mysqldump的结果的,各种工具都可以用来恢复数据。缺点是如果数据库太大的话,效率不好说
总之我不推荐用PHP来实现mysql数据的备份,如果可能的话还是用mysqldump吧
先说代码,我看了一下,代码没什么问题,至于你说的不备份,原因可能如下:
查询无结果,测试办法是在最外层的那个while语句结束后输出查询语句,即:
while ($t = mysql_fetch_array($q1))
{
//里面的代码
}
echo $mysql;//在这里输出查询结果,如果结果正常,则说明查询有结果
$filename = "autobackup.sql"; //存放路径,默认存放到项目最外层
然后就是另一个问题了,目标文件不可写,你可以参考下面这样的代码
$filename = "autobackup.sql"; //存放路径,默认存放到项目最外层
if(!file_exists($filename) || is_writable($filename))//如果文件不存在或可写
{
$fp = fopen($filename, 'w');//打开或创建可写文件
$mysql=str_replace("','','');","',null,null);",$mysql);
fputs($fp, $mysql);//写入
fclose($fp);
}
else
{
echo "文件 $filename 不存在或不可写";
}
如果尝试发现仍有问题,请再追问
使用mysqldump函数
mysqldump -u username -p dbname table1 table2 ... BackupName.sql
dbname参数表示数据库的名称
table1和table2参数表示需要备份的表的名称,为空则整个数据库备份;
BackupName.sql参数表设计备份文件的名称,文件名前面可以加上一个绝对路径。通常将数据库被分成一个后缀名为sql的文件。
备份数据库的主要过程:
切换到对应的数据库;
使用show create table tableName,获得表结构,写到文件中;
然后查询所有的表数据,循环生成相对应sql语句,写到文件中;
试运行生成的sql文件。