备份恢复 - php备份mysql数据库方案有哪些?
问题描述
问题解答
回答1:用工具啊 navicat 什么的如果要自动化导出备份sql,一般是通过命令行crontab执行mysqldump 来导出
回答2:工具能干的事就交给工具吧!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 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);}?>
回答3: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 -e02 00 * * * /bin/sh /alidata/script/crontab/backupmysql.sh#定义一个每天晚上00:02执行脚本的任务
backupmysql.sh里面只有一个请求CURL请求php action
相关文章:
1. docker镜像push报错2. docker-machine添加一个已有的docker主机问题3. node.js - node exec 执行没反应4. dockerfile - 我用docker build的时候出现下边问题 麻烦帮我看一下5. angular.js - angularjs的自定义过滤器如何给文字加颜色?6. mac里的docker如何命令行开启呢?7. 关于docker下的nginx压力测试8. python 计算两个时间相差的分钟数,超过一天时计算不对9. angular.js - 指令下的指令 面对上级指令ng-repeat的时候 ng-controller会出现多次的问题?10. java - servlet的init方法和选择Filter的init方法来加载配置文件,二者有何区别?

网公网安备