MySQL数据库备份和还原的常用命令?

1.备份MySQL数据库的命令

backupfile.sql

2表,该命令允许备份覆盖现有数据库,而无需删除原始数据库手动。

backupfile.sql

3.直接压缩MySQL数据库备份

backupfile.sql.gz

4.备份MySQL数据库的特定表

backupfile.sql

5.同时备份多个MySQL数据库

multibackupfile.sql

6.仅备份一个数据库结构。
数据

structupfile.sql

7复制服务器上的所有数据库

allbackupfile.sql

8.恢复MySQL数据库的命令

mysql-hostname-username-ppassworddatabasename

9.恢复压缩的MySQL数据库

gunzip

10.将数据库移至新服务器

mysqldump-username-ppassworddatabasename|mysql_host=*.*.*.*-Cdatabasename

浅谈MySQL数据库备份的几种方法

mysql常见的备份方式有:mysqldump、mysqlhotcopy、BACKUPTABLE、SELECTINTOOUTFILE,或者二进制日志备份(binlog),或者直接复制数据文件和相关配置文件。
MyISAM表以文件的形式存储,因此备份相对容易。
可以使用上面提到的一些方法。
Innodb中的所有表都存储在同一个数据文件ibdata1中(可以是多个文件,也可以是独立的表空间文件),复制数据文件和复制binlog相对困难。
1.mysqldump备份mysqldump采用SQL级别的备份机制,它将数据表导出到SQL脚本文件中。
MySQL不同版本之间升级比较方便。
例子:mysqldump-uroot-pdatabasetable>/home/jobs/back.sqlmmysqldump也可以用来额外备份【如果是mysql企业版的话可以用,当然mysqlbackup是收费的】mysqlhotcopy是一个PERL程序。
它使用LOCKTABLES、FLUSHTABLES和cp或scp来快速复制数据库。
它是备份单个数据库或表的最快方法,但它只能在数据库文件(包括数据库表定义文件、数据文件和索引)所在的设备上运行。
mysqlhotcopy只能用于复制MyISAM,并且只能运行在类Unix和NetWare系统上。
mysqlhotcopy支持同时复制多个数据库,还支持正则表达式。
示例:root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=123456database/tmp(复制数据库目录database到/tmp)root#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=123456db_name_1...db_name_n/tmproot#/usr/local/mysql/bin/mysqlhotcopy-h=localhost-u=root-p=123456db_name./regex//tmp更详细的使用方法请参考手册或者调用以下命令查看mysqlhotcopy帮助:perldoc/usr/local/mysql/bin/mysqlhotcopy请注意,如果要使用mysqlhotcopy,则必须具有SELECT和RELOAD权限(以运行FLUSHTABLES),并且还必须具有读取datadir/db_name目录的权限。
恢复mysqlhotcopy备份的整个数据库目录可以直接复制到mysqld指定的datadir(本例为/usr/local/mysql/data/),同时要注意issues权限,如在以下示例中:root#cp-rfdb_name/usr/local/mysql/data/root#chown-Rnobody:nobody/usr/local/mysql/data/(将db_name目录的属主更改为运行mysqld的用户)3、备份SQL语法3.1备份BACKUPTABLE语法其实和工作原理类似mysqlhotcopy,都是Lock表然后复制数据文件,可以实现在线备份,但是效果不太理想,所以没有。
推荐只复制表结构文件和数据文件,但不同时复制索引文件,因此恢复速度较慢。
示例:BACKTABLEtbl_nameTO'/tmp/db_name/'注意,应该有。
运行此SQL的FILE权限,并且/tmp/db_name/目录必须可由mysqld用户写入。
导出的文件不能覆盖现有的问题文件。
重置使用BACKUPTABLE方法备份的文件后,可以运行RESTORETABLE语句来恢复数据表。
示例:RESTORETABLEFROM‘/tmp/db_name/‘与上面描述的类似。
3.2SELECTINTOOUTFILE将数据导出到纯文本文件您可以自定义字段的范围,以方便处理此数据。
示例:SELECTINTOOUTFILE'/tmp/db_name/tbl_name.txt'FROMtbl_name您必须具有FILE权限才能运行此SQL,并且文件/tmp/db_name/tbl_name.txt必须可由mysqld用户和导出的文件写入;无法覆盖已存在的文件以避免安全问题。
对于使用SELECTINTOOUTFILE方法备份的文件,可以使用LOADDATAINFILE语句来恢复数据表。
示例:LOADDATAINFILE‘/tmp/db_name/tbl_name.txt‘INTOTABLEtbl_name与上述类似。
导入数据之前,数据表必须已经存在。
如果您担心重复数据,可以添加REPLACE关键字来替换现有数据或使用IGNORE关键字来忽略它。
4、启用二进制日志(binlog)使用binlog方式比较简单,灵活,省心省力,还可以支持增量备份。
启用binlog后必须重新启动Mysqld。
首先,关闭mysqld,打开my.cnf,添加以下行:server-id=1log-bin=binloglog-bin-index=binlog.index,然后启动mysqld。
运行时会产生binlog.000001和binlog.index第一个文件是mysqld,记录了所有对数据的更新操作,最后一个文件是所有bilog的索引,不能轻易删除。
关于binlog的信息请参见手册。
当需要备份时,可以先执行一条SQL语句让mysqld完成对当前binlog的写入,然后就可以直接备份文件,这样就可以达到增量备份的目的:FLUSHLOGS;如果是备份复制系统中的slave,还应该备份master.info和relay-log.info文件。
保留的binlog文件可以使用MySQL提供的mysqlbinlog实用程序查看,例如:/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001该实用程序允许您显示指定数据库下的所有SQL语句。
而且还可以限定时间范围,相当方便。
详情请参阅手册。
恢复时,可以使用类似如下的语句:/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001|mysql-uyejr-pyejrdb_name直接使用mysqlbinlog中SQL语句的输出作为输入来执行。
如果您有空车,也可以通过此方式进行预订。
由于从机的性能要求相对较低,因此成本较低。
可以低成本实现增量备份,并且可以分担部分数据查找压力。
具体解决方案:1、主从同步请参考http://kerry.blog.51cto.com/172631/1102062、增量备份:每天中午12点、中午12点做一次全量备份,每小时备份一次bilog,即增量备份,具体操作如下:Linux下打开binlog,将mysqld部分添加到/etc/my.cnf:[mysqld]log-bin=../logs/mysql-binmax-binlog-size=50M在window下打开binlog%mys在ql%/my.ini中添加mysqld部分:[mysqld]log-bin=../logs/mysql-binmax-binlog-size=50M全量备份脚本(仅提供部分参考)。
数据量比较大,可以一天准备一次,然后每小时追加备份#!/bin/sh#mysqldatabackupscript##usemysqldump--help,getmoredetail.BakDir=/backup/mysqlLogFile=/b;ackup/mysql/mysqlbak.logDATE=`日期+%Y%m%d`echo"">>$LogFileecho"">>$LogFileecho"------------------------------------------------">>$LogFileecho$(数据+"%y-%m-%d%H:%M:%S")>>$LogFilecho"------------------------">>$LogFilecd$BakDirDumpFile=$DATE.sqlGZDumpFile=$DATE.sql.tgzmysqldump--quick--所有数据库--flush-logs--delete-master-logs--lock-all-tables>$DumpFilecho"DumpDone">>$LogFiletarczvf$GZDumpFile$DumpFile>>$LogFile2>&1echo"[$GZDumpFile]返回upSuccess!">>$LogFilerm-f$DumpFile#deletepreviousdailybackupfiles:如果使用增量备份文件,如果全量备份完成,增量备份文件将被删除。
cd$BakDir/dailyrm-f*cd$BakDirecho"BackupD!"echo"请检查$BakDirDirectory!"上面的ls-al$BakDir脚本将mysql备份到本地/backup/mysql目录,额外的备份文件放在/backup/mysql/Daily目录下增量备份增量备份的数据量比较小。
但需要在全量备份的基础上额外运行一次使用binlog,脚本如下:#!/bin/sh#mysqlbinlogbackupscript/usr/bin/mysqladminflush-logsDATADIR=/var/lib/mysqlBAKDIR=/backup/mysql/daily###如果做了特殊设置,请编辑这个或者编辑实现这个变量的行:默认是取机器名,mysql也取的名字机器默认HOSTNAME=`uname-n`cd$DATADIRFILELIST=`cat$HOSTNAME-bin.index`##统计行数,即文件数COUNTER=0forfilein$FILELISTdoCOUNTER=`expr$COUNTER+1`doneNextNum=0forfilein$FILELISTdobase=`basename$file`NextNum=`expr$NextNum+1`if[$NextNum-eq$COUNTER]thenecho"skiplastest"elsedest=$BAKDIR/$baseif(test-e$dest)thenecho"skipexist$base"elseecho"copying$base"cp$base$BAKDIRfifidoneecho"backupmysqlbinlogok"额外的备份脚本是在备份MySQL之前删除日志它会自动将日志缓存到文件中,然后生成一个新的日志文件,因此我们只需要备份前几个,即不需要。
最近的备份,因为从上次备份到本次备份,可能会创建多个日志文件,所以应该检测这些文件,如果备份了,就不需要备份。
备份file.sql,然后恢复binlog:./mysqlbinlog--start-date="2016-04-1017:30:05"--stop-date="2016-04-1017:41:28"/usr/local/mysql/data/mysql-bin.00002|mysql-uroot-p1234565复制文件直接复制数据文件相比之前的方法,复制数据文件更加直接、快捷、方便增量备份基本上是不可能的。
为了保证数据的一致性,在复制文件之前必须执行以下SQL语句:FLUSHTABLESWITHREADLOCK,即将内存中的所有数据刷新到磁盘,同时锁定数据表;确保复制过程中不会写入新数据。
这种方法备份的数据恢复起来也很简单,只需将其复制到原始数据库目录。
请注意,对于Innodb类型的表,您还必须复制其日志文件,即ib_logfile*文件。
因为当Innodb表损坏时,您可以依靠这些日志文件来恢复。
6、使用rsync进行备份rsync作为同步工具也可以用于备份,但需要配置服务器和客户端示例rsync-vzrtopg--progress--deleteroot@192.168.1.3::root/tmp/相关。
rsync配置可以参考http://fanqiang.chinaunix.net/a6/b7/20010908/1305001258.html缺点是rsync是基于文件修改时间的增量备份,所以备份数据的基础是充分准备和配置比较费力MySQL数据库恢复工具使用(可以还执行备份操作)是phpMyAdmin,它是大多数托管提供商(例如Hawkhost)免费提供的免费开源工具。
相信很多站长也用过phpMyAdmin来备份和恢复网站数据库。
它确实非常方便,并且具有多语言界面。
不过,有一种情况你可能还没有遇到过,就是当数据库大小比较大的时候,比如SQL备份文件大于2MB,甚至此时大于10MB,如果你通过phpMyAdmin恢复数据库,会出现错误,显示如下建议:这是因为你的SQL文件大小太大,超出了phpMyAdmin的处理能力这种情况尤其值得注意当网速比较慢时,例如站长尝试使用phpMyAdmin来恢复大型MySQL数据库备份。
当网络拥塞时,文件大小会很大。
当然,phpMyAdmin只适合恢复较小的SQL文件的备份。
为了恢复非常大的MySQL数据库备份,你应该使用专用的恢复工具,它就是:BigDump!工具下载地址http://www.jb51.net/codes/37147.html8、使用bacula(www.bacula.org)进行备份每n台机器都会备份数据,不需要写配置文件在每台机器上检查其运行情况。
通过登录该目录,您可以了解哪些备份正在运行、哪些备份已成功、哪些备份已失败。
重置也非常简单。
您只需运行几个命令即可恢复指定的备份。
支持全量备份、差异备份和增量备份,支持将备份写入硬盘文件和磁带。
支持的平台相当多,设置中包括获胜平台(备份到胜利,但尚不支持备份到胜利)。
当然也有一些缺点,比如同时备份支持还没有经过充分的测试,笔者表示如果没有亲自测试过最好不要尝试。
还有一点是文档中没有快速入门。

文档有点太详细了,我无法耐心阅读。

1.前期准备Bacula由三个模块组成。
一个是Director,用来指挥整个系统的运行和工作计划,我它通知其他两个模块开始工作。
第一个是StorageDaemon,它是存储端,负责将数据从网络备份到本地机器并在恢复时流式传输数据。
最后是FileDaemon,它在备份期间传输文件并在恢复期间接受数据并恢复它。
事实上,以上三个模块都不能让bacula运行,另外一个模块就是数据库模块。
该模块可以通过SQLite(在bacula中编译)或MySql和PostgreSql来使用。
作者推荐mysql。
还需要编译一些第三方库:GZIP和Readline。
文档中没有说明,但实际上需要另一个软件才能保证正常运行:ntp。
因为差异备份和增量备份都是依靠文件修改时间来决定是否备份。
单机备份问题不大,但网络备份必须考虑到各主机的时间差。
所以我建议所有主机每天运行ntpdate两次来调整时间。
如果您在上海交通大学网络,您可以使用dns.sjtu.edu.cn来调整时间。
如果您使用备份磁带,还应该检查您的磁带驱动器是否受支持。
最好阅读文档中的了解池、卷和标签部分。
否则你在设置过程中会感到困惑。
2.编译过程很简单,文档也很详细,就不详细介绍了。
注意--enable-client-only可以用来在备份机器上编译。
3.数据库创建下面说一下mysql的创建过程。
首先在代码根目录下,cdsrc/cats/./grant_mysql_privileges./create_mysql_database./make_mysql_tables如果mysql不在本机,可以添加-h参数来指定。
默认使用空密码的root用户可以使用-p参数启用密码验证。
如果你想使用其他用户,只需编辑脚本即可,非常简单。
默认创建用户bacula,密码为空。
建议更改密码。
Bacula可以使用任意数量的数据库,这意味着您可以运行两个数据库,然后备份它们。
4.在运行FileDaemon(fd)配置之前,请注意一些应该注意的事项在配置中指定主机地址时,最好使用ip配置它。

如果是外部IP,则当fd在备份主机上运行时,127.0.0.1将不起作用。
配置非常简单,只需指定哪个Director可以运行并调度它,密码是什么,fd名称,工作目录以及将日志发送到哪里。
只需编辑和修改标准配置即可。
5.在接受备份的设备上运行StorageDaemon(sd)sd。
配置也相当简单,只不过比fd多了一个设备来指定应该使用什么硬件来复制数据。
如果是磁带备份,您可以将多个数据备份到一台设备,Bacula会告诉您在恢复过程中使用哪一磁带。
因为我使用的是文件备份模式,为每个备份配置一个设备,并将不同的备份放在不同的目录中下面是一个简单的备份设备配置文件Device{Name=dbdevMediaType=File#可以随意写入,但在配置Direct时。
保存到or时,必须输入相同的ArchiveDevice=/var/bak/db#备份在哪个目录,必须存在LabelMedia=yes;#AutomaticlabelRandomAccess=Yes;AutomaticMount=yes;