本机运行的MySQL 数据库 如何安全的备份还原

本机运行的MySQL 数据库 如何安全的备份还原,第1张

一般是即时备份。做主从。或者是每天增量备份。

本文是在linux下,mysql 4114版本下测试的,经过适当修改可能适合mysql 40,50及其其他版本

本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采取这种备份策略或者需要修改相关参数

每个人的备份策略都可能不同,所以请根据实际情况修改,做到举一反三,不要照搬照抄,可能会造成不必要的损失

希望你明白这个脚本要干什么工作!

脚本描述

每7天备份一次所有数据,每天备份binlog,也就是增量备份

(如果数据少,每天备份一次完整数据即可,可能没必要做增量备份)

作者对shell脚本不太熟悉,所以很多地方写的很笨 :)

开启 bin log

在mysql 41版本中,默认只有错误日志,没有其他日志可以通过修改配置打开bin log方法很多,其中一个是在/etc/mycnf中的mysqld部分加入:

[mysqld]

log-bin

这个日志的主要作用是增量备份或者复制(可能还有其他用途)

如果想增量备份,必须打开这个日志

对于数据库 *** 作频繁的mysql,这个日志会变得很大,而且可能会有多个

在数据库中flush-logs,或者使用mysqladmin,mysqldump调用flush-logs后并且使用参数delete-master-logs,这些日志文件会消失,并产生新的日志文件(开始是空的)

所以如果从来不备份,开启日志可能没有必要

完整备份的同时可以调用flush-logs,增量备份之前flush-logs,以便备份最新的数据

完整备份脚本

如果数据库数据比较多,我们一般是几天或者一周备份一次数据,以免影响应用运行,如果数据量比较小,那么一天备份一次也无所谓了

#!/bin/sh

# mysql data backup script

# by scud

# 2005-10-30

#

# use mysqldump --help,get more detail

#

BakDir=/backup/mysql

LogFile=/backup/mysql/mysqlbaklog

DATE=`date +%Y%m%d`

echo " " >> $LogFile

echo " " >> $LogFile

echo "-------------------------------------------" >> $LogFile

echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile

echo "--------------------------" >> $LogFile

cd $BakDir

DumpFile=$DATEsql

GZDumpFile=$DATEsqltgz

mysqldump --quick --all-databases --flush-logs

--delete-master-logs --lock-all-tables

> $DumpFile

echo "Dump Done" >> $LogFile

tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1

echo "[$GZDumpFile]Backup Success!" >> $LogFile

rm -f $DumpFile

#delete previous daily backup files:采用增量备份的文件,如果完整备份后,则删除增量备份的文件

cd $BakDir/daily

rm -f

cd $BakDir

echo "Backup Done!"

echo "please Check $BakDir Directory!"

echo "copy it to your local disk or ftp to somewhere !!!"

ls -al $BakDir

上面的脚本把mysql备份到本地的/backup/mysql目录,增量备份的文件放在/backup/mysql/daily目录下

注意:上面的脚本并没有把备份后的文件传送到其他远程计算机,也没有删除几天前的备份文件:需要用户增加相关脚本,或者手动 *** 作

增量备份

增量备份的数据量比较小,但是要在完整备份的基础上 *** 作,用户可以在时间和成本上权衡,选择最有利于自己的方式

增量备份使用bin log,脚本如下:

#!/bin/sh

#

# mysql binlog backup script

#

/usr/bin/mysqladmin flush-logs

DATADIR=/var/lib/mysql

BAKDIR=/backup/mysql/daily

###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名

HOSTNAME=`uname -n`

cd $DATADIR

FILELIST=`cat $HOSTNAME-binindex`

##计算行数,也就是文件数

COUNTER=0

for file in $FILELIST

do

COUNTER=`expr $COUNTER + 1 `

done

NextNum=0

for file in $FILELIST

do

base=`basename $file`

NextNum=`expr $NextNum + 1`

if [ $NextNum -eq $COUNTER ]

then

echo "skip lastest"

else

dest=$BAKDIR/$base

if(test -e $dest)

then

echo "skip exist $base"

else

echo "copying $base"

cp $base $BAKDIR

fi

fi

done

echo "backup mysql binlog ok"

增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后一个

因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果已经备份过,就不用备份了

注:同样,用户也需要自己远程传送,不过不需要删除了,完整备份后程序会自动生成

访问设置

脚本写完了,为了能让脚本运行,还需要设置对应的用户名和密码,mysqladmin和mysqldump都是需要用户名和密码的,当然可以写在脚本中,但是修改起来不太方便,假设我们用系统的root用户来运行此脚本,那么我们需要在/root(也就是root用户的home目录)创建一个mycnf文件,内容如下

[mysqladmin]

password =password

user= root

[mysqldump]

user=root

password=password

注:设置本文件只有root可读(chmod 600 mycnf )

此文件说明程序使用mysql的root用户备份数据,密码是对应的设置这样就不需要在脚本里写用户名和密码了

自动运行

为了让备份程序自动运行,我们需要把它加入crontab

有2种方法,一种是把脚本根据自己的选择放入到/etc/crondaily,/etc/cronweekly这么目录里

一种是使用crontab -e放入到root用户的计划任务里,例如完整备份每周日凌晨3点运行,日常备份每周一-周六凌晨3点运行

使用直接拷贝的方法备份时,尤其要注意表没有被使用,应该对表进行读锁定或停止MySQL服务。备份一个表,需要三个文件:

对于MyISAM表:

tbl_namefrm 表的描述文件

tbl_nameMYD 表的数据文件

tbl_nameMYI 表的索引文件

对于ISAM表:

tbl_namefrm 表的描述文件

tbl_nameISD 表的数据文件

tbl_nameISM 表的索引文件

对于MyISAM表,你可以从运行在不同硬件系统的服务器之间复制文件,例如,SUN服务器和INTEL PC机之间。

当 然,这只是备份一个数据表,在很多情况下我们需要备份完整的数据库,这个时候同样可以直接复制数据库文件夹即可完成备份;若想再省点儿事,把整个数据库目 录“data”复制也可以,但是在还原数据时要注意,只能一个一个地还原数据库,因为该目录下有mysql运行时的配置文件,若正在运行的mysql配置 信息遭到还原破坏,整个mysql服务就会无法启动。

SELECT INTO OUTFILE和MYSQLDUMP备份数据:

MySQLdump工具可以把整个数据库装载到一个单独的文本文件中。这个文件包含所有重建数据库和表的SQL命令。这个命令取得所有的模式 (Schema)并且将其转换成DDL语法(CREATE语句,即数据库定义语句),还取得所有的数据,并且为这些数据创建INSERT语句。所有的东西 都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这个工具令人难以置信地简单而快速。

有3种方式来调用mysqldump

选择一个数据库或一个数据表备份到一个文件:

/bin> mysqldump [options] db_name [tables] > filenametxt

选择多个数据库备份到一个文件:

/bin> mysqldump [options] --database DB1 [DB2 DB3] > filenametxt

所有数据库备份到一个文件:

/bin> mysqldump [options] --all--database > filenametxt

Option选择:

--help,-?

显示帮助消息并退出。

--add-drop-table

这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除

--add-locks

这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的 *** 作

-c or --complete_insert

这个选项使得MySQLdump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库时这个选项很有用。

--delayed-insert 在INSERT命令中加入DELAY选项

-F or --flush-logs 使用这个选项,在执行导出之前将会刷新MySQL服务器的log

-f or --force 使用这个选项,即使有错误发生,仍然继续导出

--full 这个选项把附加信息也加到CREATE TABLE的语句中

-l or --lock-tables 使用这个选项,导出表的时候服务器将会给表加锁。

-t or --no-create- info

这个选项使的MySQLdump命令不创建CREATE TABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便。

-d or --no-data 这个选项使的MySQLdump命令不创建INSERT语句。

在您只需要DDL语句时,可以使用这个选项。

--opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。

-q or --quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。

-T path or --tab = path

这 个选项将会将数据库中每一个表创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为 table_namesql,数据文件被命名为table_nametxt。该参数的path为存放目录,而且该目录必须已经存在。 如:/bin>mysqldump –uroot –p --tab=d:\\ mydata

-w "WHERE Clause" or --where = "Where clause " 筛选将要放到导出文件的数据。

下面来看几组mysqldump命令案例:

将数据库mydata的内容备份到mydatatxt文件中:

/bin>MySQLdump –uroot -p mydata > d:\\mydatatxt

将mydata数据库中的users表的内容备份到d:\\userstxt:

/bin>MySQLdump –uroot -p mydata users > d:\\userstxt

将mydata数据库中的users表username值为“feihu”的数据备份到d:\\userstxt:

/bin>MySQLdump –uroot -p --where=”username=’feihu’” mydata users > d:\\userstxt;

将mydata数据库以及内部表的创建结构(DDL)备份到d:\\userstxt:

/bin>MySQLdump –uroot –p -d mydata > d:\\mydatatxt

将mydata和mydata2数据库同时备份到d:\\userstxt:

/bin> MySQLdump –uroot –p -d mydata mydata2 > d:\\mydatatxt

将所有数据备份到一个数据库,命令怎么写呢???

schema: 模式The set of statements, expressed in data definition language, that completely describe the structure of a data base(一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构。)

当需要将还原备份数据时,使用如下语句:

/bin>mysql –uroot –p mydata < d:\\mydatatxt;

注意使用“<”符号,导入数据。还可以使用source命令执行文件中的脚本来还原数据,如:

Mysql>source d:\mydatatxt;

LOAD DATA INFILE和MYSQLIMPORT恢复数据

关于load data infile语句的使用已经在别一节讲述过了,详细请参考“使用LOAD DATA和INSERT语句导入Mysql数据”。如果你仅仅恢复数据, mysqlimport完全是与LOAD DATA 语句对应的,读者可以任意选择一个去实现。

MySQLimport位于MySQL/bin目录中,是MySQL的一个载入(或者说导入)数据的一个非常有效的工具。这是一个命令行工具。有两个参数 以及大量的选项可供选择。这个工具把一个文本文件(textfile)导入到你指定的数据库和表中。比方说我们要从文件userstxt中把数据导入到 数据库mydata中的表users中:

/bin>mysqlimport –uroot –p mydata d:\userstxt

注意:这里userstxt是我们要导入数据的文本文件,而mydata是我们要 *** 作的数据库,数据库中的表名是users,这里文本文件的数据格式必须与users表中的记录格式一致,否则MySQLimport命令将会出错。

其中表的名字是导入文件的第一个句号()前面文件字符串,另外一个例子:MySQLimport mydata users200910txt;那么我们将把文件中的内容导入到数据库mydata 中的users表中。

上面的例子中,都只用到两个参数,并没有用到更多的选项,下面介绍MySQLimport的选项

-d or --delete 新数据导入数据表中之前删除数据数据表中的所有信息

-f or --force 不管是否遇到错误,MySQLimport将强制继续插入数据

-i or --ignore MySQLimport跳过或者忽略那些有相同唯一关键字的行, 导入文件中的数据将被忽略。

-l or -lock-tables 数据被插入之前锁住表,这样就防止了,你在更新数据库时,用户的查询和更新受到影响。

-r or -replace 这个选项与-i选项的作用相反;此选项将替代表中有相同唯一关键字的记录。

--fields-enclosed-by= char 指定文本文件中数据的记录时以什么括起的, 很多情况下数据以双引号括起。 默认的情况下数据是没有被字符括起的。

--fields-terminated-by=char 指定各个数据的值之间的分隔符,在句号分隔的文件中,分隔符是句号。您可以用此选项指定数据之间的分隔符。默认的分隔符是跳格符(Tab)

--lines-terminated-by=str 此选项指定文本文件中行与行之间数据的分隔字符串或者字符。 默认的情况下MySQLimport以newline为行分隔符。您可以选择用一个字符串来替代一个单个的字符:一个新行或者一个回车。

MySQLimport命令常用的选项还有-v 显示版本(version),-p 提示输入密码(password)等。

如果,我们要导入一个文件(Orderstxt)中行的记录格式是这样的:

"1", "ORD89876", "1 Dozen Roses", "19991226"

我们的任务是要把这个文件里面的数据导入到数据库mydata中的表格Orders中,我们使用这个命令:

/Bin>MySQLimport -uroot–prl --fields-enclosed-by=" --fields-terminated-by=, mydata Orderstxt

比如我们要插入一些数据,使用包含下面文本的文件(文件名为New_Datasql,当然我们也可以取名为New_Datatxt及任何其他的合法名字,并不一定要以后缀sql结尾):

USE mydata; INSERT INTO Orders (Orders_ID, username) VALUES(1, "Block"); INSERT INTO Orders (Orders_ID, username) VALUES(2, "Newton"); INSERT INTO Orders (Orders_ID, username) VALUES(3, "Simmons");

注意上面的这些句子的语法都必须是正确的,并且每个句子以分号结束。上面的USE命令选择数据库,INSERT命令插入数据。

然后运行下面的命令:

/bin>mysql –uroot –p mydata < d:\New_Datatxt;

接着按提示输入密码,如果上面的文件中的语句没有错误,那么这些数据就被导入到了数据库中。

在数据库表丢失或损坏的情况下 备份你的数据库是很重要的 如果发生系统崩溃 你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态 有时 正是MySQL管理员造成破坏 管理员已经知道表以破坏 用诸如vi或Emacs等编辑器试图直接编辑它们 这对表绝对不是件好事!备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件(如用cp cpio或tar等) 每种方法都有其优缺点 mysqldump与MySQL服务器协同 *** 作 直接拷贝方法在服务器外部进行 并且你必须采取措施保证没有客户正在修改你将拷贝的表 如果你想用文件系统备份来备份数据库 也会发生同样的问题 如果数据库表在文件系统备份过程中被修改 进入备份的表文件主语不一致的状态 而对以后的恢复表将失去意义 文件系统备份与直接拷贝文件的区别是对后者你完全控制了备份过程 这样你能采取措施确保服务器让表不受干扰 mysqldump比直接拷贝要慢些 mysqldump生成能够移植到其它机器的文本文件 甚至那些有不同硬件结构的机器上 直接拷贝文件不能移植到其它机器上 除非你正在拷贝的表使用MyISAM存储格式 ISAM表只能在相似的硬件结构的机器上拷贝 在MySQL 中引入的MyISAM表存储格式解决了该问题 因为该格式是机器无关的 所以直接拷贝文件可以移植到具有不同硬件结构的机器上 只要满足两个条件 另一台机器必须也运行MySQL 或以后版本 而且文件必须以MyISAM格式表示 而不是ISAM格式 不管你使用哪种备份方法 如果你需要恢复数据库 有几个原则应该遵守 以确保最好的结果 定期实施备份 建立一个计划并严格遵守 让服务器执行更新日志 当你在崩溃后需要恢复数据时 更新日志将帮助你 在你用备份文件恢复数据到备份时的状态后 你可以通过运行更新日志中的查询再次运用备份后面的修改 这将数据库中的表恢复到崩溃发生时的状态 以文件系统备份的术语讲 数据库备份文件代表完全倾倒(full dump) 而更新日志代表渐进倾倒(incremental dump) 使用一种统一的和易理解的备份文件命名机制 象backup buckup 等不是特别有意义 当实施你的恢复时 你将浪费时间找出文件里是什么东西 你可能发觉用数据库名和日期构成备份文件名会很有用 例如 %mysqldump samp_db >/usr/archives/mysql/samp_db %mysqldump menagerie >/usr/archives/mysql/menagerie 你可能想在生成备份后压缩它们 备份一般都很大!你也需要让你的备份文件有过期期限以避免它们填满你的磁盘 就象你让你的日志文件过期那样 用文件系统备份备份你的备份文件 如果遇上了一个彻底崩溃 不仅清除了你的数据目录 也清除了包含你的数据库备份的磁盘驱动器 你将真正遇上了麻烦 也要备份你的更新日志 将你的备份文件放在不同于用于你的数据库的文件系统上 这将降低由于生成备份而填满包含数据目录的文件系统的可能性 用于创建备份的技术同样对拷贝数据库到另一台机器有用 最常见地 一个数据库被转移到了运行在另一台主机上的服务器 但是你也可以将数据转移到同一台主机上的另一个服务器 使用mysqldump备份和拷贝数据库 当你使用mysqldumo程序产生数据库备份文件时 缺省地 文件内容包含创建正在倾倒的表的CREATE语句和包含表中行数据的INSERT语句 换句话说 mysqldump产生的输出可在以后用作mysql的输入来重建数据库 你可以将整个数据库倾倒进一个单独的文本文件中 如下 %mysqldump samp_db >/usr/archives/mysql/samp_db 输出文件的开头看起来象这样 # MySQL Dump ## Host: localhost Database: samp_db# # Server version alpha log## Table structure for table absence #CREATE TABLE absence(student_id int( ) unsigned DEFAULT NOT NULL date date DEFAULT NOT NULL PRIMARY KEY (student_id date));## Dumping data for table absence #INSERT INTO absence VALUES ( );INSERT INTO absence VALUES ( );INSERT INTO absence VALUES ( ); 文件剩下的部分有更多的INSERT和CREATE TABLE语句组成 如果你想压缩备份 使用类似如下的命令 %mysqldump samp_db | gzip >/usr/archives/mysql/samp_db gz如果你要一个庞大的数据库 输出文件也将很庞大 可能难于管理 如果你愿意 你可以在mysqldump命令行的数据库名后列出单独的表名来倾到它们的内容 这将倾倒文件分成较小 更易于管理的文件 下例显示如何将samp_db数据库的一些表倾到进分开的文件中 %mysqldump samp_db student score event absence >grapbook sql%mysqldump samp_db member president >hist league sql如果你生成准备用于定期刷新另一个数据库内容的备份文件 你可能想用 add drop table选项 这告诉服务器将DROP TABLE IF EXISTS语句写入备份文件 然后 当你取出备份文件并把它装载进第二个数据库时 如果表已经存在 你不会得到一个错误 如果你倒出一个数据库以便能把数据库转移到另一个服务器 你甚至不必创建备份文件 要保证数据库存在于另一台主机 然后用管道倾倒数据库 这样mysql能直接读取mysqldump的输出 例如 你想从主机拷贝数据库samp_db到 可以这样很容易做到 %mysqladmin h create samp_db%mysqldump samp_db | mysql h samp_db以后 如果你想再次刷新上的数据库 跳过mysqladmin命令 但要对mysqldump加上 add drop table以避免的得到表已存在的错误 %mysqldump add drop table samp_db | mysql h samp_dbmysqldump其它有用的选项包括 flush logs和 lock tables组合将对你的数据库检查点有帮助 lock tables锁定你正在倾倒的所有表 而 flush logs关闭并重新打开更新日志文件 新的更新日志将只包括从备份点起的修改数据库的查询 这将设置你的更新日志检查点位备份时间 (然而如果你有需要执行个更新的客户 锁定所有表对备份期间的客户访问不是件好事 )如果你使用 flush logs设置检查点到备份时 有可能最好是倾倒整个数据库 如果你倾倒单独的文件 较难将更新日志检查点与备份文件同步 在恢复期间 你通常按数据库为基础提取更新日志内容 对单个表没有提取更新的选择 所以你必须自己提取它们 缺省地 mysqldump在写入前将一个表的整个内容读进内存 这通常确实不必要 并且实际上如果你有一个大表 几乎是失败的 你可用 quick选项告诉mysqldump只要它检索出一行就写出每一行 为了进一步优化倾倒过程 使用 opt而不是 quick opt选项打开其它选项 加速数据的倾倒和把它们读回 用 opt实施备份可能是最常用的方法 因为备份速度上的优势 然而 要警告你 opt选项确实有代价 opt优化的是你的备份过程 不是其他客户对数据库的访问 opt选项通过一次锁定所有表阻止任何人更新你正在倾倒的任何表 你可在一般数据库访问上很容易看到其效果 当你的数据库一般非常频繁地使用 只是一天一次地调节备份 一个具有 opt的相反效果的选项是 dedayed 该选项使得mysqldump写出INSERT DELAYED语句而不是INSERT语句 如果你将数据文件装入另一个数据库并且你想是这个 *** 作对可能出现在该数据库中的查询的影响最小 delayed对此很有帮助 press选项在你拷贝数据库到另一台机器上时很有帮助 因为它减少网络传输字节的数量 下面有一个例子 注意到 press对与远端主机上的服务器通信的程序才给出 而不是对与本地主机连接的程序 %mysqldump opt samp_db | mysql press h samp_dbmysqldump有很多选项 详见《MySQL参考手册》 使用直接拷贝数据库的备份和拷贝方法 另一种不涉及mysqldump备份数据库和表的方式是直接拷贝数据库表文件 典型地 这用诸如cp tar或cpio实用程序 本文的例子使用cp 当你使用一种直接备份方法时 你必须保证表不在被使用 如果服务器在你则正在拷贝一个表时改变它 拷贝就失去意义 保证你的拷贝完整性的最好方法是关闭服务器 拷贝文件 然后重启服务器 如果你不想关闭服务器 要在执行表检查的同时锁定服务器 如果服务器在运行 相同的制约也适用于拷贝文件 而且你应该使用相同的锁定协议让服务器 安静下来 假设服务器关闭或你已经锁定了你想拷贝的表 下列显示如何将整个samp_db数据库备份到一个备份目录(DATADIR表示服务器的数据目录) %cd DATADIR%cp r samp_db /usr/archive/mysql单个表可以如下备份 %cd DATADIR/samp_db%cp member /usr/archive/mysql/samp_db%cp score /usr/archive/mysql/samp_db 当你完成了备份时 你可 lishixinzhi/Article/program/MySQL/201311/29384

把以前写的一个发你看看

脚本要求:编写shell脚本,每天凌晨1点备份td_oa库,到mysql-back目录,并将备份文件压缩,压缩名称为备份的日期,只保留连续七天的备份文件

#!/bin/bash

mysql-uroot-p123456-e"flushtableswithreadlock;"锁住表

/usr/local/mysql/bin/mysqlmp-uroot-p123456td_oa--flush-logs--single-transaction

mysql-uroot-p123456-e"unlocktables;"解锁

a=`/bin/date%Y-%m-%d`#在这里加上时间,压缩的时候加上时间,会失败。

echo$a

cd/gxl

/bin/tar-czf$atar/fjp/td_oasql

b="$atar"

cp-p$b/root/fjp

forcin`find/root/fjp-ctime7`

do

/bin/rm-rf$c

done

方法:

1、打开Navicat for MySQL 选中你想要定时备份的数据库 点击“计划任务”,创建批次处理任务。

2、在d出的新窗口中 双击 可用任务中的Backup_(database),在下面的“选择任务”框中,就会泛起您选取的 Backup_(database) 也\就是备份database库。

3、"保留" ,给你的备份起个名字 。返回 Navicat for MySQL 窗口,打开database库的“计划任务”。你会看到计划任务里多了一个 backup_database 在database上点右键,设置计画任务。

4、在日程铺排里 新建一个计划 在高级选项里 勾选重复任务 我设定的是每24小时也就是一天。详细的时间距离视你的服务器情况而定 设置完计划任务之后。系统会要求你输入服务器的密码,不是mysql的哦。

5、现在你的数据库每隔一段时间就自动备份一次,自动备份的文件名是按时间排序的,假如需要恢复备份的话,!可以按时间恢复数据,查看备份的话就简朴了,就点数据库下面有个备份就OK了。

简单用例说明:

导入、导出数据库

导出: mysqldump -uroot db1 > db1sql (注db1为database名)

导入:mysql -uroot test < db1sql (注test为database名,将db1中所有的表及数据导入到test数据库)

导入、导出表

导出:mysqldump -uroot db1 tb1 tb2>tablessql(注db1为database名,tb1 tb2为要导出的表列表,中间用空格隔开)

导入:mysql -uroot test < tablessql(将db1数据库中的tb1和tb2表导入到test数据库)

常见参数:

--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语句)

--databases, -B

导出几个数据库。参数后面所有名字参量都被看作数据库名。

mysqldump -uroot -p --databases test mysql

--no-data, -d

不导出任何数据,只导出数据库表结构。

以上就是关于本机运行的MySQL 数据库 如何安全的备份/还原全部的内容,包括:本机运行的MySQL 数据库 如何安全的备份/还原、mysql 数据备份、如何实现MySQL数据库的备份与恢复等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10165321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存