扫码关注官方订阅号
用工具啊 navicat 什么的如果要自动化导出备份sql,一般是通过命令行crontab执行mysqldump 来导出
navicat
crontab
mysqldump
工具能干的事就交给工具吧!php代码实现:提供两种方法,仅供研究使用。第1种方法:复制代码 代码如下:
<?php$host="localhost";$user="root";$password="";$dbname="dbname";mysql_connect($host,$user,$password);mysql_select_db($dbname);$mysql= "set names utf8;";mysql_query($mysql);$q1=mysql_query("show tables");while($t=mysql_fetch_array($q1)){$table=$t[0];$q2=mysql_query("show create table $table");$sql=mysql_fetch_array($q2);$mysql.=$sql['Create Table'].";n";$q3=mysql_query("select * from $table");while($data=mysql_fetch_assoc($q3)){$keys=array_keys($data);$keys=array_map('addslashes',$keys);$keys=join(',',$keys);$keys="".$keys."";$vals=array_values($data);$vals=array_map('addslashes',$vals);$vals=join("','",$vals);$vals="'".$vals."'";$mysql.="insert into $table($keys) values($vals);n";}$mysql.="n";}$filename=$dbname.date('Ymj').".sql";$fp = fopen($filename,'w');fputs($fp,$mysql);fclose($fp);echo "数据备份成功,生成备份文件".$filename;?>第2种方法:复制代码 代码如下:
$table
,
".$keys."
<?php$host="localhost";$user="root";$password="";$dbname="dbname";backup_tables($host,$user,$password,$dbname);/ backup the db OR just a table /function backup_tables($host,$user,$pass,$name,$tables = '*'){
$link = mysql_connect($host,$user,$pass);mysql_select_db($name,$link);
//get all of the tablesif($tables == '*'){$tables = array();$result = mysql_query('SHOW TABLES');while($row = mysql_fetch_row($result)){$tables[] = $row[0];}}else{$tables = is_array($tables) ? $tables : explode(',',$tables);}$return = '';//cycle throughforeach($tables as $table){$result = mysql_query('SELECT * FROM '.$table);$num_fields = mysql_num_fields($result); $return.= 'DROP TABLE '.$table.';';$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));$return.= "nn".$row2[1].";nn";
for ($i = 0; $i < $num_fields; $i++) {while($row = mysql_fetch_row($result)){$return.= 'INSERT INTO '.$table.' VALUES(';for($j=0; $j<$num_fields; $j++) {$row[$j] = addslashes($row[$j]);$row[$j] = ereg_replace("n","\n",$row[$j]);if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }if ($j<($num_fields-1)) { $return.= ','; }}$return.= ");n";}}$return.="nnn";}
//save file$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');fwrite($handle,$return);fclose($handle);}?>
public function uploadAction(){ $root = $this->config->database->username; $pass = $this->config->database->password; $dbname = $this->config->database->dbname; $timestr = date('YmdHis'); $fileName = "backupMysqlFile-$timestr.sql.gz"; $filePath = "/backup/mysql/$fileName"; $command = "mysqldump -h127.0.0.1 -u$root -p$pass $dbname | gzip > $filePath"; exec($command); $ret = $this->qiniuuploadMgr->putFile($this->qiniuToken,$fileName,$filePath); }
> #crontab -e 02 00 * * * /bin/sh /alidata/script/crontab/backupmysql.sh #定义一个每天晚上00:02执行脚本的任务
backupmysql.sh里面只有一个请求CURL请求php action
backupmysql.sh
php action
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
用工具啊
navicat什么的如果要自动化导出备份sql,一般是通过命令行
crontab执行mysqldump来导出工具能干的事就交给工具吧!
php代码实现:
提供两种方法,仅供研究使用。
第1种方法:
复制代码 代码如下:
<?php
$host="localhost";
$user="root";
$password="";
$dbname="dbname";
mysql_connect($host,$user,$password);
mysql_select_db($dbname);
$mysql= "set names utf8;";
mysql_query($mysql);
$q1=mysql_query("show tables");
while($t=mysql_fetch_array($q1)){
$table=$t[0];
$q2=mysql_query("show create table
$table");$sql=mysql_fetch_array($q2);
$mysql.=$sql['Create Table'].";n";
$q3=mysql_query("select * from
$table");while($data=mysql_fetch_assoc($q3)){
$keys=array_keys($data);
$keys=array_map('addslashes',$keys);
$keys=join('
,',$keys);$keys="
".$keys."";$vals=array_values($data);
$vals=array_map('addslashes',$vals);
$vals=join("','",$vals);
$vals="'".$vals."'";
$mysql.="insert into
$table($keys) values($vals);n";}
$mysql.="n";
}
$filename=$dbname.date('Ymj').".sql";
$fp = fopen($filename,'w');
fputs($fp,$mysql);
fclose($fp);
echo "数据备份成功,生成备份文件".$filename;
?>
第2种方法:
复制代码 代码如下:
<?php
$host="localhost";
$user="root";
$password="";
$dbname="dbname";
backup_tables($host,$user,$password,$dbname);
/ backup the db OR just a table /
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
//get all of the tables
if($tables == '*')
{
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result))
{
$tables[] = $row[0];
}
}
else
{
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
$return = '';
//cycle through
foreach($tables as $table)
{
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
$return.= 'DROP TABLE '.$table.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return.= "nn".$row2[1].";nn";
for ($i = 0; $i < $num_fields; $i++)
{
while($row = mysql_fetch_row($result))
{
$return.= 'INSERT INTO '.$table.' VALUES(';
for($j=0; $j<$num_fields; $j++)
{
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace("n","\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
$return.= ");n";
}
}
$return.="nnn";
}
//save file
$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
fwrite($handle,$return);
fclose($handle);
}
?>
backupmysql.sh里面只有一个请求CURL请求php action