您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP技术 > PHP应用

用PHP实现数据库自动备份和优化

作者:UncleToo  来源:翻译  日期:2013-12-10 8:01:22
收藏  评论:( 0 )  阅读:460

备份数据库

备份MySQL数据库有许多不同的方法。具体使用哪一个取决于你的虚拟主机支持哪些特性和命令。下面介绍3种常用的备份方法。

方法1:mysqldump

mysqldump是一个用于创建数据库备份的Linux命令—— 一个创建表、删除表、插入数据的sql文件。使用这种方法前,你的服务器必须安装mysqldump,且PHP要支持Linux命令执行。

Mysqldump基本语法如下:

mysqldump -u [username] -p [password] [database_name] > dumpfilename.sql

PHP中的写法:

$command = "mysqldump --opt -h $dbhost -u [username] -p[password] [database_name] > dumpfilename.sql";
shell_exec($command);

这只是一个简单的列子,更详细的说明可以参考MySQL手册

方法2:mysqlhostcopy

Mysqlhostcopy是一个PERL脚本,他对MyISAM表的访问速度要比mysqldump快得多,使用这个工具时,必须保证你的主机支持Shell。命令如下:

/usr/bin/mysqlhotcopy -u [username] -p [password] [database_name] /path/to/backup

PHP中的写法:

$command = "/usr/bin/mysqlhotcopy -u [username] -p [password] [database_name] /path/to/backup";
shell_exec($command);

也可以使用如下的命令来查看mysqlhostcopy文件:

perldoc mysqlhotcopy

方法3:SELECT INTO outfile

如果你的服务器不支持shell,这种方法将是一个很好的选择。它使用一个SQL查询生成一个数据库备份。它需要两种类型的权限:

1。数据库用户必须选择特权(select_priv)

2。MYSQL守护进程的所有者必须写入到目标目录的权限。

SELECT * INTO OUTFILE 'backup.sql' FROM my_table

该查询将创建一个只有一张表的备份,所以你必须遍历整个数据库,为每一张表创建一个单独的文件。

$alltables = mysql_query("SHOW TABLES");
while ($table = mysql_fetch_assoc($alltables))
{
   foreach ($table as $db => $tablename)
   {
       $sql = "SELECT * INTO OUTFILE 'backup/{$tablename}_backup.sql' FROM {$tablename}";
       mysql_query($sql)
       or die(mysql_error());
   }
}


数据库优化

一个MySQL数据库的功能类似于一个硬盘驱动器。经过多次插入、更新和删除数据,其物理结构变得混乱,从而造成数据库性能下降。这就是为什么要进行数据库进行优化的原因。优化是类似硬盘驱动器的碎片整理,包括清除已删除的行,重新排序,压缩,管理索引路径等等操作。

方法1:mysqlcheck

mysqlcheck的是一个命令行工具,可以检查,修复,优化,或分析表。它可以优化一个表或整个数据库。

优化一张表

mysqlcheck -u [username] -p [password] --auto-repair --check --optimize <database_name>

优化整个数据库

mysqlcheck -u [username] -p [password] --auto-repair --check --optimize --all-databases

PHP中的写法:

$command = "mysqlcheck -u [username] -p [password] --auto-repair --check --optimize --all-databases";
shell_exec($command);

方法2:优化查询

优化查询可以一次优化只有一个表,所以,有必要通过循环的表:

$alltables = mysql_query("SHOW TABLES");
while ($table = mysql_fetch_assoc($alltables))
{
   foreach ($table as $db => $tablename)
   {
       $sql = "OPTIMIZE TABLE '". $tablename."'";
       mysql_query($sql)
       or die(mysql_error());
   }
}


数据库备份和自动优化

自动备份和优化过程是通过设置一个cron作业在一定时间间隔内运行PHP脚本——每天、每周、每两周一次等。

<?php
// 检查访问来防止未经授权的用户来运行一个备份
$v = $_GET['v'];
if($v != 'my_secret_phrase') {
    die('access not allowed');
}
// 生成备份
$command = "/usr/bin/mysqlhotcopy -u [username] -p [password] [database_name] /path/to/backup";
shell_exec($command);
// 优化数据库
$command = "mysqlcheck -u [username] -p [password] --auto-repair --check --optimize --all-databases";
shell_exec($command);
?>


本文由UncleToo翻译,转载请注明出处!

原文(英文版)出处:http://www.phpbuilder.com/articles/databases/mysql/implementing-automatic-database-backup-and-optimization-in-php.html



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/application/727.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论