先来为大家介绍几个MySQL备份命令mysqldump常用操作实例:
1、mysqldump备份
只导出表结构
d:/PHP/xampp/mysql/bin/mysqldump -h127.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 -h127.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 -h127.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 -h127.0.0.1 -P3306 -uroot -p123456 snsgou_sns_test --force < d:/Python/data/snsgou_sns_table.sql
d:/PHP/xampp/mysql/bin/mysql -h127.0.0.1 -P3306 -uroot -p123456 snsgou_sns_test --force < d:/Python/data/snsgou_sns_data.sql
/usr/local/mysql/bin/mysql -h127.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 命令中能成功执行!
在“新建操作”时,
“程序或脚本”:选择PHP解析器即可,如 d:/PHP/xampp/php/php.exe,
“添加参数(可选)“: D:/PHP/xampp/htdocs/BackupDb_git/backup_db.php jb51.net
附: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
导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,
要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。
mysqldump -uroot -p --all-databases --compatible=ansi
--compact
导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys
mysqldump -uroot -p --all-databases --compact
--complete-insert, -c
使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。
mysqldump -uroot -p --all-databases --complete-insert
--compress, -C
在客户端和服务器之间启用压缩传递所有信息
mysqldump -uroot -p --all-databases --compress
--create-options, -a
在CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)
mysqldump -uroot -p --all-databases
--databases, -B
导出几个数据库。参数后面所有名字参量都被看作数据库名。
mysqldump -uroot -p --databases test mysql
--debug
输出debug信息,用于调试。默认值为:d:t:o,/tmp/mysqldump.trace
mysqldump -uroot -p --all-databases --debug
mysqldump -uroot -p --all-databases --debug=” d:t:o,/tmp/debug.trace”
--debug-check
检查内存和打开文件使用说明并退出。
mysqldump -uroot -p --all-databases --debug-check
--debug-info
输出调试信息并退出
mysqldump -uroot -p --all-databases --debug-info
--default-character-set
设置默认字符集,默认值为utf8
mysqldump -uroot -p --all-databases --default-character-set=latin1
--delayed-insert
采用延时插入方式(INSERT DELAYED)导出数据
mysqldump -uroot -p --all-databases --delayed-insert
--delete-master-logs
master备份后删除日志. 这个参数将自动激活--master-data。
mysqldump -uroot -p --all-databases --delete-master-logs
--disable-keys