PHP定时备份MySQL与mysqldump语法参数详解

先来为大家介绍几个mysql备份命令Mysqldump常用操作实例:

1、MYSQLdump备份

只导出表结构

d:/PHP/xampp/mysql/bin/mysqldump -h227.0.0.1 -P3306 -uroot -p123456 snsgou_sns_test --no-data --default_character-set=utf8 > d:/Python/data/snsgou_sns_test_table.sql

mysqldump只导出数据

d:/PHP/xampp/mysql/bin/mysqldump -h227.0.0.1 -P3306 -uroot -p123456 snsgou_sns_test --no-create-info --default_character-set=utf8 > d:/Python/data/snsgou_sns_test_data.sql

mysqldump全部导出(包含表结构及数据)

d:/PHP/xampp/mysql/bin/mysqldump -h227.0.0.1 -P3306 -uroot -p123456 snsgou_sns_test --default_character-set=utf8 > d:/Python/data/snsgou_sns_test.sql

2、mysqldump还原 (注:--force 参数,表示遇到错误时将继续执行)

d:/PHP/xampp/mysql/bin/mysql -h227.0.0.1 -P3306 -uroot -p123456 snsgou_sns_test --force < d:/Python/data/snsgou_sns_table.sql d:/PHP/xampp/mysql/bin/mysql -h227.0.0.1 -P3306 -uroot -p123456 snsgou_sns_test --force < d:/Python/data/snsgou_sns_data.sql /usr/local/mysql/bin/mysql -h227.0.0.1 -P3306 -uroot -p'sg$123456' snsgou_sns_test --force < /root/2/snsgou_sns_test.sql

注意:mysqldump只能备份导出,而还原的话,则需要使用mysql命令。

根据上述知识点,整理出一份PHP对MySQL数据库的定时备份的脚本:

配置文件:db.inc.jb51.net.php 

<?php /** * 数据库配置文件 */ $dbs = array( array( 'host' => '127.0.0.1', 'port' => 6603, 'user' => 'root', 'pass' => '123456', 'dbname' => 'xxxyyy', 'charset' => 'utf8' ), array( 'host' => '127.0.0.1', 'port' => 6603, 'user' => 'root', 'pass' => '123456', 'dbname' => 'yyyzzz', 'charset' => 'utf8' ), ); $backupPath = 'F:/mysql_bak/' . date('Ym') . '/' . date('d'); $oldPath = 'F:/mysql_bak/' . (intval(date('Ym')) - 1); // 注意:如果路径中有空格,需要用 双引号 引起来 $cmd = '"D:/Program Files/MySQL/MySQL Server 5.5/bin/mysqldump"'; // 全部导出 $cmd .= " -h%s -P%s -u%s -p%s %s --default_character-set=%s > %s"; // 只导出 表结构 //$cmd .= " -h%s -P%s -u%s -p%s %s --no-data --default_character-set=%s > %s"; // 只导出 数据 //$cmd .= " -h%s -P%s -u%s -p%s %s --no-create-info --default_character-set=%s > %s";

备份文件:backup_db.php

<?php /** * 备份数据库 */ set_time_limit(0); define('ROOT_PATH', dirname(__FILE__)); if (!@include ROOT_PATH . '/db.inc.jb51.net.php') { echo 'args error'; //write('args error'); exit(1); } // 新建备份目录 new_mkdir($backupPath); // 删除一个月前的数据 new_rmdir($oldPath); // 批量备份数据库 foreach ($dbs as $db) { $cmd2 = ''; if (isset($db['name'])) { $fileName = $backupPath . '/' . $db['name'] . '_' . date('Ymd') . '_' . time() . '.sql'; $cmd2 = sprintf($cmd, $db['host'], $db['port'], $db['user'], $db['pass'], $db['name'], $db['charset'], $fileName); //write($cmd2); try { exec($cmd2); } catch (Exception $e) { // 写错误日志(省略) echo $e->getMessage(); } } } /** * 创建文件夹 * * @param string $path 文件夹路径 * @param int $mode 访问权限 * @param boolean $recursive 是否递归创建 */ function new_mkdir($path = '', $mode = 0777, $recursive = true) { clearstatcache(); if (!is_dir($path)) { mkdir($path, $mode, $recursive); chmod($path, $mode); $ret = @touch($path . '/index.html'); @chmod($path . '/index.html', 0777); return $ret; } return true; } /** * 清空/删除 文件夹 * * @param string $dirname 文件夹路径 * @param bool $self 是否删除当前文件夹 * @return bool */ function new_rmdir($dirname = '', $self = true) { if (!file_exists($dirname)) { return false; } if (is_file($dirname) || is_link($dirname)) { return unlink($dirname); } $dir = dir($dirname); if ($dir) { while (false !== $entry = $dir->read()) { if ($entry == '.' || $entry == '..') { continue; } new_rmdir($dirname . '/' . $entry); } } $dir->close(); $self && rmdir($dirname); } /** * 写文件 * * @param string $filename 文件名 * @param string $text 要写入的文本字符串 * @param string $openmod 文本写入模式('w':覆盖重写,'a':文本追加) * @return boolean */ function write_file($filename = '', $text = '', $openmod = 'w') { if (@$fp = fopen($filename, $openmod)) { flock($fp, 2); fwrite($fp, $text); fclose($fp); return true; } else { return false; } } /** * 写对象(包括 数字、字符串、数组) * * @param string $text 要写入的文本字符串 * @param string $type 文本写入类型('w':覆盖重写,'a':文本追加) */ function write($text = '', $type = 'a') { if (!is_dir('d:/PHP/xampp/htdocs')) { return false; } $filename = 'd:/PHP/xampp/htdocs/write.txt'; $text = "\r\n++++++++++++++++++++++++++++++++++++++++++\r\n" . date('Y-m-d H:i:s') . "\r\n" . print_r($text, true); write_file($filename, $text, $type); }

# 定时任务执行:

d:/PHP/xampp/php/php.exe D:/PHP/xampp/htdocs/BackupDb_git/backup_db.php snsgou.com # 注意:首先要确保上面命令在 cmd 命令中能成功执行!

Windows下配置定时任务请参考:Windows Server 2008 计划任务配置(任务计划程序)执行BAT

在“新建操作”时,

“程序或脚本”:选择PHP解析器即可,如 d:/PHP/xampp/php/php.exe,
“添加参数(可选)“: D:/PHP/xampp/htdocs/BackupDb_git/backup_db.php  jb51.net

Linux下配置定时任务请参考:Linux 定时任务 Crontab命令 详解

附:mysqldump参数大全

参数说明

--all-databases  , -A

导出全部数据库。

mysqldump  -uroot -p --all-databases

--all-tablespaces  , -Y

导出全部表空间

mysqldump  -uroot -p --all-databases --all-tablespaces

--no-tablespaces  , -y

不导出任何表空间信息。

mysqldump  -uroot -p --all-databases --no-tablespaces

--add-drop-database

每个数据库创建之前添加drop数据库语句。

mysqldump  -uroot -p --all-databases --add-drop-database

--add-drop-table

每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)

mysqldump  -uroot -p --all-databases  (默认添加drop语句)

mysqldump  -uroot -p --all-databases –skip-add-drop-table  (取消drop语句)

--add-locks

在每个表导出之前增加LOCK TABLES并且之后UNLOCK  TABLE。(默认为打开状态,使用--skip-add-locks取消选项)

mysqldump  -uroot -p --all-databases  (默认添加LOCK语句)

mysqldump  -uroot -p --all-databases –skip-add-locks   (取消LOCK语句)

--allow-keywords

允许创建是关键词的列名字。这由表名前缀于每个列名做到。

mysqldump  -uroot -p --all-databases --allow-keywords

--apply-slave-statements

在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。

mysqldump  -uroot -p --all-databases --apply-slave-statements

--character-sets-dir

字符集文件的目录

mysqldump  -uroot -p --all-databases  --character-sets-dir=/usr/local/mysql/share/mysql/charsets

--comments

附加注释信息。默认为打开,可以用--skip-comments取消

mysqldump  -uroot -p --all-databases  (默认记录注释)

mysqldump  -uroot -p --all-databases --skip-comments   (取消注释)

--compatible

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。