MySQL数据库备份与恢复方法解析
创始人
2024-12-21 04:39:46
0 次浏览
0 评论
浅谈MySQL数据库备份的几种方法
mysql常见的备份方法有:mysqldump;mysql热拷贝备份表SELECTINTOOUTFILE或者直接复制备份的二进制日志(binlog)或数据文件以及关联的配置文件。由于MyISAM表以文件的形式存储,因此使用上述许多方法来备份它们相对容易。
Innodb中的所有表都存储在同一个数据文件ibdata1中(这可以是多个文件或单独的表空间文件);它可以使用binlog来备份数据文件,这是免费的解决方案,但备份起来相当困难。
1.mysqldump复制mysqldump采用SQL级别的备份机制,它将数据表导出到SQL脚本文件中,非常适合不同MySQL版本之间的升级。
示例:mysqldump-uroot-pdatabasetable>/home/jobs/back.sqlmmysqldump网上有很多mysqldump相关的参数;因此,我在这里不再赘述。
[如果是企业版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目录的权限。
使用restoremysqlhotcopy,您可以同时将整个备份的数据库目录直接复制到mysqld指定的datadir(本例中为/usr/local/mysql/data/)。
您应该关注权限问题。
如下例: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的工作原理非常相似。
两者都锁定表并复制数据文件。
可以实现在线备份,但不推荐,因为效果不太理想。
它只备份表配置文件和数据文件,但不同时复制索引文件,因此恢复速度较慢。
例如:BACKTABLEtbl_nameTO'/tmp/db_name/';您必须具有FILE权限才能运行此SQL;并且/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‘INTOTABLTbl_name权限要求与上述类似。
在导入数据之前,数据表必须已经存在。
如果您担心数据重复;您可以添加REPLACE关键字来替换现有记录,或使用ignore关键字来忽略它们。
4.打开二进制日志(binlog)binlog的使用方法还是蛮简单的。
就是灵活、省心、省力,可提供增量备份。
启用binlog后必须重新启动Mysqld。
首先,关闭mysqld;打开我的.cnf,添加以下行:server-id=1log-bin=binloglog-bin-index=binlog.index=binlog.index然后启动mysqld。
运行时会生成binlog.000001和binlog.index,有关binlog的信息请参见手册。
当你需要备份的时候。
可以先执行一条SQL语句来阻止mysqld写入当前的binlog;然后可以直接备份该文件:如果是增量备份。
冲洗日志;它是备份系统中的一台服务器,您还应该备份master.info和relay-log.info文件。
备份的binlog文件可以使用MySQL提供的工具mysqlbinlog查看;示例:/usr/local/mysql/bin/mysqlbinlog/tmp/binlog.000001该工具可以显示指定数据库下的所有SQL语句。
有限的时间范围可以非常方便,详情请参阅手册。
检索时您可以使用类似于以下的语句。
如果您的设备无法使用,您可以使用此方法进行备份。
由于从设备的性能要求较低,为什么部分数据的查询成本较低而备份成本却增加了?不能分享吗?具体解决方案:1.用于主从同步;请参考http://kerry.blog.51cto.com/172631/110206binlog是每小时增量备份;这意味着具体行动如下。
-Linux下打开binlog,在/etc/my.cnf中添加mysqld部分:[mysqld]log-bin=../logs/mysql-binmax-binlog-size=50Mwindows下打开binlog%mysql%/my.inimysqld添加部分:[mysqld]log-bin=../logs/mysql-binmax-binlog-size=50M完整备份脚本数据量(如果支持引用数据库)比较大;您可以在一天内将它们全部准备好。
次然后每小时执行一次增量备份。
ackup/mysql/mysqlbak.logDATE=`date+%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"BackupDone'echo"请检查$BakDirectory!"echo"copyittoyouurlocaldiskorftptowhere!!!"ls-al$BakDir上面的脚本将mysql备份到本地/backup/mysql目录,增量备份文件放在/backup/mysql/incrementalbackup增量备份的数据量较小,但是基于全量备份。
要运行增量备份,单独使用binlog,脚本如下:#!/bin/sh#mysqlbinlogbackupscript/usr/bin/mysqladminflush-logsDATADIR=/backup/mysql/daily###如果制作了,则编辑或修改使用该变量的行:默认是取机器名,mysql也默认取机器名HOSTNAME=`uname-。
n`cd$DATADIRFILELIST=`cat$HOSTName-bin.index`##计算行数,即filelistdocount=0filefiledocount=0filefiledocount=0filelistdocount=0filefilein+1`dOnexeTtnum=0filelisTdobase=`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日志写入文件。
安装后将生成一个新的日志文件。
所以我们只需要备份前几个即可。
最后一个可以是从一个备份到这个备份。
由于会产生多个日志文件,如果文件有备份则不需要恢复数据:先恢复最近一次的全量备份数据:mysql-hhostname-uusername-ppassworddatabasename<.备份file.sql后恢复binlog:./mysqlbinlog--start-date="2016-04-1017:30:05"--stop-date="2016-04-1017:41:28"/usr/local/mysql/data/mysql-bin.000002|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/13。
05001258.html缺点是rsync是根据文件修改时间进行增量备份,所以备份数据库是完全配置的,配置比较困难7、使用BigDump工具导入非常大的MySQL数据库备份文件。
使用的MySQL数据库恢复工具之一(也可以执行备份操作)是phpMyAdmin,这是大多数托管提供商(如Hawkhost)免费提供的开源免费工具。
很多站长都使用过phpMyAdmin来备份和恢复网站数据库,它确实非常方便,并且具有多语言界面。
然而,有一种你以前从未遇到过的情况。
这意味着当您的数据库大小相对较大时,例如如果SQL备份文件大于2MB或恢复此时它甚至大于10MB。
通过phpMyAdmin数据库出现错误并显示以下建议:这是由于您的SQL造成的。
如果文件太大并且超出了phpMyAdmin的功能,例如网站管理员周末工作。
如果您尝试在周日晚上8点恢复大型MySQL数据库备份。
这种情况尤为重要。
当网络复杂时,文件大小会很大,很容易遇到这个问题。
phpMyAdmin仅适合恢复小型SQL文件备份。
用于恢复非常大的MySQL数据库备份;大转储,必须使用专用的恢复工具。
工具下载地址http://www.jb51.net/codes/37147.html8、使用bacula(www.bacula.org)进行备份zZbacula理论上采用模块化设计和c/s架构。
它可以备份任意n台主机。
数据可以备份到任意n个设备上,无需在每个设备上写入每个文件来控制它们的操作。
登录Director;哪些备份正在运行;所有日志都将组织在您定义哪些备份成功、哪些备份失败的位置,从而使管理更加轻松。
恢复也非常简单。
您可以通过运行几个命令来恢复指定的备份。
完整备份;支持差异备份和增量备份。
有一些支持的平台;设置包括win平台(备份win但尚不支持备份)。
当然也有一些弱点,比如同时备份支持,还没有经过彻底的测试。
作者说,如果你没有亲自测试过,最好不要尝试。
另一件事是文档没有快速启动。
。
文档有点详细,没有耐心是无法阅读的。
。
1.前期准备Bacula由三个模块组成。
其一是导演。
指挥器,用于指挥整个系统的运行;作业调度器,通知其他两个模块开始工作。
第一个是StorageDaemon,它是存储端,负责备份和恢复时将数据从网络传输到本地机器。
最后一个是FileDaemon,文件在备份期间传输,数据在恢复期间接收和恢复。
实际上,以上三个模块不允许bacula运行;另一个模块是数据库模块。
作者推荐mysql通过SQLite(编译为bacula)或者MySql和PostgreSql来使用这个模块。
一些第三方库也可以编译需要:GZIP和Readline。
虽然文档中没有任何解释。
为了保证正常运行还需要另一个软件:ntp。
这是因为差异备份和增量备份都依赖于文件修改时间来确定是否应该进行备份。
单机备份问题不大,但需要考虑各主机之间的时间差。
因此,建议所有主机每天运行两次ntpdate来调整时间。
如果您在上海交通大学网络中。
您可以使用dns.sjtu.edu.cn调整时间。
如果您使用磁带机进行备份。
您还需要检查您的磁带机是否受支持。
文件中理解的附件;最好阅读卷和标签部分。
否则你在配置过程中会感到困惑。
2.编译过程很简单,文档也很详细,就不详细说了。
请注意,您可以在备份计算机上使用--enable-client-only。
3.数据库设置我们先来说一下mysql的设置过程。
第一的,在代码根目录下,如果cdsrc/cats/中不存在mysql./grant_mysql_privileges./create_mysql_database./make_mysql_tables可以添加-h参数来指定-p参数为root用户启用密码验证,默认使用空密码可以使用。
如果您想使用其他用户;你只能修改一个非常简单的脚本。
bacula用户是默认创建的,密码为空。
建议更改密码。
Bacula可以使用任何数据库;这意味着您可以部署两个数据库,然后相互备份。
4.在进行FileDaemon(fd)配置之前,在配置中设置主机地址时,请注意,使用ip时不能使用主机名。
配置。
。
如果是外网IP的话。
如果fd在备份位置上运行,则127.0.0.1不起作用。
配置非常简单;导演能做什么;可以安排;密码是什么?FD名称只需指定工作目录和发送日志的位置即可。
修改标准配置。
5.在接收备份的计算机上运行StorageDaemon(sd)sd。
配置非常简单,除了比fd多了一个设备来指定使用哪个硬件来备份数据。
如果是磁带机备份;可将多份数据备份至一台设备;Bacula会告诉您恢复时使用哪种磁带。
因为使用的是文件复制方式;为每个备份配置一个设备,并将不同的备份放在说明中下面是一个简单的文件备份设备配置Device{Name=dbdevMediaType=File#随意写;但是直接配置的时候。
当储存或你应该写同样的ArchiveDevice=/var/bak/db#要备份哪个目录;LabelMedia=yes;#自动labelRandomAccess=Yes;AutomaticMount=yes;
MySQL上一步如何备份和恢复数据库mysql上一步
MySQL预备步骤:如何备份和恢复数据库?如果您每天使用MySQL,备份和恢复数据库是一项必不可少的任务。虽然备份可以避免数据丢失的风险,但恢复可以让您在不可避免的情况下备份并运行数据库。
本文向您展示如何使用MySQL备份和恢复数据库。
1.备份数据库。
1.使用mysqldump命令。
mysqldump命令是一个MySQL客户端工具,用于备份和恢复MySQL数据库。
使用此命令可以快速备份MySQL数据库。
使用此命令备份数据库的语法为:mysqldump-user-pdbname>backupfile.sql其中-u指定登录MySQL的用户名,-p指定登录MySQL的用户名指定登录密码。
在。
;dbname指定要备份的数据库的名称。
>指定备份输出文件。
例如,如果要备份名为mydatabase的数据库并将其保存到backupfile.sql文件中,则语法为:mysqldump-uroot-pmydatabase>backupfile.sql2使用MySQLWorkbenchMySQLWorkbench是一个开源数据库设计工具。
MySQL数据库的备份和恢复也可以通过图形界面进行管理。
要使用MySQLWorkbench备份数据库,您必须选择导出选项,指定备份文件的输出位置,然后选择要导出的表。
下图详细说明了备份操作。
2.恢复数据库1.使用mysql命令要恢复MySQL中的数据库,必须使用mysql命令。
恢复数据库的语法为:mysql-uusername-pdbname其中-u指定登录MySQL的用户名,-p指定登录MySQL的密码。
dbname是要恢复的数据库的名称。
例如,如果备份了备份文件backupfile,则使用mysql-uroot-pmydatabase2将SQL恢复到名为mydatabase的数据库中。
您还可以使用MySQLWorkbench恢复MySQL数据库。
您可以通过在数据导入选项中指定备份文件来直接恢复所有数据。
当然,您也可以通过选项选择恢复的表。
恢复操作详细如下图所示。
概述备份和恢复数据对于MySQL用户来说非常重要。
mysqldump和mysql命令允许您快速备份和恢复MySQL数据库。
MySQLWorkbench提供了更直观的界面和工具来处理数据库。
无论您使用哪种方法,请务必在开始保护数据之前对其进行备份。
MySQL数据库备份方法
1.数据库备份分类备份主要从物理和逻辑两个方面进行分类。物理副本是指数据文件;指数据库操作系统上物理文件的备份,例如日志文件。
常见的备份方法包括物理冷副本;单独的备份工具(例如mydump或mysqlhotcopy);启用二进制存档以进行增量备份;和第三方工具备份。
2、MySQL全量备份MySQL全量备份概述;优点和缺点;并包括单独的活动。
完整备份的优点是备份和恢复过程简单方便。
这包括数据重复;获取多个备份;它的缺点是备份和恢复时间较长。
备份操作包括物理冷备份和恢复,以及单个数据库的全量备份;这包括多个数据库和所有使用mysqldump命令的数据库。
在物理冷备份阶段关闭数据库;创建备份目录;恢复数据库需要移动到数据库目录以使用tar命令创建备份文件来恢复备份文件。
mysql转储命令是使用相关语法和命令参数的单个库。
为多个库或所有库提供完整的备份功能。
3.恢复数据库。
恢复数据库主要通过mysqldump或者使用source命令导出的脚本。
恢复数据库的源命令后面是备份文件路径。
另外,mysqldump命令还支持恢复数据的功能。
4.MySQL增量备份MySQL增量备份重点关注自上次备份以来已添加或更改的数据。
因为MySQL本身并没有提供直接增量备份的方法;这可以借助二进制日志间接实现。
二进制日志记录了数据库操作的详细信息,对于增量备份和恢复非常重要。
5、MySQL数据库增量恢复增量恢复包括三种方法:一般恢复;基于位置的恢复和时间点恢复。
通用恢复允许恢复所有增量日志内容以跳过错误操作以实现精确恢复。
MySQLbinlog工具日志操作ID;这些恢复方法都是通过指定时间点或位置来实现数据恢复。
相关文章
MySQL GROUP_CONCAT()...
2024-12-22 19:07:00MySQL远程访问设置全攻略:轻松实现跨...
2024-12-15 13:04:12MySQL数据库时间查询与数据更新操作指...
2024-12-19 12:35:29MySQL LIKE查询索引使用技巧解析
2024-12-16 03:15:25MySQL数据插入技巧:了解INSERT...
2024-12-15 12:26:30Redis缓存三大问题解析:穿透、击穿、...
2024-12-16 14:05:05Win7系统下Redis安装指南:详细步...
2024-12-14 15:16:47Win7系统下MySQL配置文件my.i...
2024-12-14 23:15:46掌握SQL增删改查:基础语法与操作技巧解...
2024-12-20 18:36:41SQL Server定时执行语句教程:轻...
2024-12-16 05:11:16最新文章
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
23
2024-12
热门文章
1
SQL2000数据库备份压缩技巧:优化空...
怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...
2
高效掌握:CMD命令轻松启动、关闭及登录...
如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...
3
SQL字符串处理技巧:单引号使用与转义标...
SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...
4
Windows环境下Redis安装指南与...
redis安装windowsredis基本简介与安装安装Redis首先需要获取安...
5
深度解析:Redis性能优势与局限性,助...
redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...
6
深入解析:MySQL数据库的特性与应用
mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...
7
MySQL命令行操作指南:轻松启动和登录...
用命令行方式启动和登录mysql服务的方法1.启动MySQL服务1打开命令行窗口...
8
Linux Redis后台启动教程:配置...
linux怎么启动redis1、首先,为了管理方便,将Redis文件中的conf...
9
MySQL浮点数与Decimal类型详解...
MySQL中的float和decimal类型有什么区别小数类型可以准确地表示非常...
10
C语言实现输入10个整数并找出最大最小值...
C语言从键盘输入任意的10个整数,从中找出最大值和最小值并输出代码:#inclu...