MySQL5.7 mysqldump备份与恢复的实现

MySQL 备份

冷备份:
停止服务进行备份,即停止数据库的写入

热备份:
不停止服务进行备份(在线)

mysql 的 MyIsam 引擎只支持冷备份,InnoDB 支持热备份,原因:

InnoDB引擎是事务性存储引擎,每一条语句都会写日志,并且每一条语句在日志里面都有时间点,那么在备份的时候,mysql可以根据这个日志来进行redo和undo,将备份的时候没有提交的事务进行回滚,已经提交了的进行重做。但是MyIsam不行,MyIsam是没有日志的,为了保证一致性,只能停机或者锁表进行备份。

InnoDB不支持直接复制整个数据库目录和使用mysqlhotcopy工具进行物理备份:

1、直接复制整个数据库目录
因为MYSQL表保存为文件方式,所以可以直接复制MYSQL数据库的存储目录以及文件进行备份。MYSQL的数据库目录位置不一定相同,在Windows平台下,MYSQL5.6存放数据库的目录通常默认为~\MySQL\MYSQL Server 5.6\data,或其他用户自定义的目录。这种方法对INNODB存储引擎的表不适用。使用这种方法备份的数据最好还原到相同版本的服务器中,不同的版本可能不兼容。在恢复的时候,可以直接复制备份文件到MYSQL数据目录下实现还原。通过这种方式还原时,必须保证备份数据的数据库和待还原的数据库服务器的主版本号相同。而且这种方式只对MYISAM引擎有效,对于InnoDB引擎的表不可用。执行还原以前关闭mysql服务,将备份的文件或目录覆盖mysql的data目录,启动mysql服务。

2、使用mysqlhotcopy工具快速备份
mysqlhotcopy是一个perl脚本,最初由Tim Bunce编写并提供。他使用LOCK TABLES 、FLUSH TABLES和cp或scp来快速备份数据库。他是备份数据库或单个表的最快途径,但他只能运行在数据库目录所在机器上,并且只能备份myisam类型的表。

mysqldump 备份简述

mysqldump可产生两种类型的输出文件,取决于是否选用- -tab=dir_name选项。

不使用- -tab=dir_name选项,mysqldump产生的数据文件是纯文本的SQL文件,又CREATE(数据库、表、存储路径等)语句和INSERT(记录)语句组成。输出结果以一个文件保存,可以用mysql命令去恢复备份文件。

使用- -tab=dir_name选项,mysqldump对于每一个需备份的数据表产生两个输出文件:一个是带分隔符的文本文件,备份的数据表中的每行存储为文本中的一行,以“表名.txt”保存;另一个输出文件为数据表的CREATE TABLE语句,以“表名.sql”保存。

mysqldump 语法和选项

【命令】shell> mysqldump -help

- -all-databases 表示备份系统中所有数据库,使用- -databases参数之后,必须指定至少一个数据库的名称,多个数据库名称之间用空格隔开

常用的选项

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

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

- -tab
这个选项将会创建两个文件,一个是带分隔符的文本文件,备份的数据表中的每行存储为文本中的一行,以“表名.txt”保存;另一个输出文件为数据表的CREATE TABLE语句,以“表名.sql”保存。

- -quick或者- -opt
如果你未使用- -quick或者- -opt选项,那么mysqldump将在转储结果之前把全部内容载入到内存中。这在你转储大数据量的数据库时将会有些问题。该选项默认是打开的,但可以使用- -skip-opt来关闭它。

- -skip-comments
使用–skip-comments可以去掉导出文件中的注释语句

- -compact
使用- -compact选项可以只输出最重要的语句,而不输出注释及删除表语句等等

以SQL格式备份数据

如果备份文件名.sql没有指定所放置的路径,则默认放在~\MySQL\MySQL Server 5.6\bin目录下。

指定数据备份路径:
mysqldump –h 主机名 –u 用户名 –p - -all-databases > C:\备份文件名.sql

调用mysqldump带有- -all-databases选项备份所有的数据库
mysqldump –h 主机名 –u 用户名 –p - -all-databases > C:\备份文件名.sql

调用mysqldump带有- -databases选项备份指定的数据库
mysqldump –u 用户名 –p - -databases db1 db2 db3 … > C:\备份文件名.sql

调用mysqldump备份一个指定的数据库:
mysqldump –u 用户名 –p - -databases db > 备份文件名.sql

用mysqldump不带有- -databases选项备份指定的一个数据库,生成的备份文件中是没有CREATE DATABASE和USE语句的:
mysqldump –u 用户名 –p db > 备份文件名.sql

注意: 当对一个数据库进行备份时- -databases允许省略,但是省略后导致的是备份文件名.sql中没有CREATE DATABASE 和USE语句,那么恢复备份文件时,必须指定一个默认的数据库名,由此服务器才知道备份文件恢复到哪个数据库中;由此可以导致你可以使用一个和原始数据库名称不同的数据库名。

调用mysqldump备份某个数据库中的某几张表:
mysqldump –u用户名 –p 数据库名 表名1 表名2 表名3… > 备份文件名.sql

恢复SQL格式的备份文件

通过mysqldump备份的文件,如果用了- -all-databases或- -databases选项,则在备份文件中包含CREATE DATABASE和USE语句,故并不需要指定一个数据库名去恢复备份文件。

在Shell命令下:

shell> mysql –u 用户名 –p < 备份文件.sql

在mysql命令下,用source命令导入备份文件:

mysql> source备份文件.sql; //已登录mysql,用source命令

如果通过mysqldump备份的是单个数据库,且没有使用- -databases选项,则备份文件中不包含CREATE DATABASE和USE语句,那么在恢复的时候必须先创建数据库。

在shell命令下:

shell> mysqladmin –u 用户名 –p create 数据库名 //创建数据库
shell> mysql –u 用户名 –p数据库名 < 备份文件.sql

在mysql命令下:

mysql> CREATE DATABASE IF NOT EXIST 数据库名;
mysql> USE 数据库名;
mysql> source备份文件.sql;

注意: 只能在cmd界面下执行source命令,不能在mysql工具里面执行source命令,会报错,因为cmd是直接调用mysql.exe来执行命令的。

以带分隔符的文本文件格式备份数据

调用mysqldump带有- -tab=dir_name选项去备份数据库,则dir_name表示输出文件的目录,在这个目录中,需备份的每个表将会产生两个文件。如对于一个名为t1的表,包含两个文件:t1.sql和t1.txt。.sql文件中包含CREATE TABLE语句,.txt文件中一行为数据表中的一条记录,列值与列值之间以‘tab'分隔。

注意: 使用带- -tab=dir_name选项的mysqldump最好只被用于本地服务器上。因为如果用在远程服务器上,- -tab产生的目录将会既存在本地主机也会存在于远程主机上,.txt文件将会被服务器写在远程主机的目录中,而.sql文件将会被写在本地主机目录中。

调用mysqldump带有- -tab=dir_name选项备份数据库
mysqldump –u 用户名 –p - -tab=dir_name 数据库名

【例子】用mysqldump带有- -tab=dir_name选项备份数据库test,放在D盘下:

数据库test中的表:

执行备份命令:

所输出的结果:

恢复带分隔符的文本文件格式的备份文件 用mysql命令处理.sql文件去还原表结构,然后处理.txt文件去载入记录。

shell> mysql –u 用户名 –p 数据库名 < 表名.sql //还原表结构
shell> mysqlimport –u 用户名 –p 数据库名 表名.txt //还原记录

或者:可用LOAD DATA INFILE 去代替mysqlimport命令,不过此时得在mysql命令下:

mysql> use 数据库名; //选中数据库
mysql> LOAD DATA INFILE ‘表名.txt' INTO TABLE表名; //还原记录

【例子】 恢复数据库test里面的数据表stucou表: 查看test数据库里面的表,没有stucou表:

用stucou.sql文件恢复stucou表结构:

stucou数据表恢复成功:

stucou数据表中没有任何记录:

用stucou.txt文件恢复stucou表记录:

用mysql命令将查询的中间结果导出

将查询结果导入到文本文件中

mysql是一个功能丰富的工具命令,使用mysql还可以在命令行模式下执行SQL指令,将查询结果导入到文本文件中。相比mysqldump,mysql工具导出的结果可读性更强。如果mysql服务器是单独的机器,用户是在一个client上进行操作,用户要把数据结果导入到client机器上,可以使用mysql -e语句。

【命令】:
shell> mysql -u root -p --execute="SELECT 语句" dbname > filename.txt

该命令使用–execute 选项,表示执行该选项后面的语句并退出,后面的语句必须用双引号括起来

dbname为要导出的数据库名称,导出的文件中不同列之间使用制表符分隔,第一行包含了字段名称

【例子】使用mysql命令,导出test库的person表记录到文本文件:
shell> mysql -u root -p --execute="SELECT * FROM person;" test > C:\person3.txt

person3.txt的内容如下

ID     Name    Age    job

1       green    29      lawer

2       suse    26      dancer

3       evans    27      sports man

4       mary    26      singer

可以看到,person3.txt文件中包含了每个字段的名称和各条记录,如果某行记录字段很多,可能一行不能完全显示,可以使用 - -vertical参数,将每条记录分为多行显示

【例子】使用mysql命令导出test库的person表使用–vertical参数显示:
shell> mysql -u root -p --vertical --execute="SELECT * FROM person;" test > C:\person4.txt

*************************** 1. row ***************************

ID: 1

Name: green

Age: 29

job: lawer

*************************** 2. row ***************************

ID: 2

Name: suse

Age: 26

job: dancer

*************************** 3. row ***************************

ID: 3

Name: evans

Age: 27

job: sports man

*************************** 4. row ***************************

ID: 4

Name: mary

Age: 26

job: singer

如果person表中记录内容太长,这样显示将会更加容易阅读

将查询结果导入到html文件中

使用mysql命令导出test库的person表记录到html文件,输入语句如下

shell> mysql -u root -p --html --execute="SELECT * FROM PERSON;" test > C:\person5.html

将查询结果导入到xml文件中

如果要导出为xml文件,那么使用–xml选项
使用mysql命令导出test库的person表的中记录到xml文件

shell> mysql -u root -p --xml --execute="SELECT * FROM PERSON;" test > C:\person6.xml
<?xml version="1.0"?>

<resultset statement="SELECT * FROM PERSON" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

 <row>

  <field name="ID">1</field>

  <field name="Name">green</field>

  <field name="Age">29</field>

  <field name="job">lawer</field>

 </row>

 <row>

  <field name="ID">2</field>

  <field name="Name">suse</field>

  <field name="Age">26</field>

  <field name="job">dancer</field>

 </row>

 <row>

  <field name="ID">3</field>

  <field name="Name">evans</field>

  <field name="Age">27</field>

  <field name="job">sports man</field>

 </row>

 <row>

  <field name="ID">4</field>

  <field name="Name">mary</field>

  <field name="Age">26</field>

  <field name="job">singer</field>

 </row>

</resultset>

到此这篇关于MySQL5.7 mysqldump备份与恢复的实现的文章就介绍到这了,更多相关MySQL mysqldump备份恢复内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql数据库备份及恢复命令 mysqldump,source的用法

    还原一个数据库:mysql -h localhost -u root -p123456 www<c:\www.sql 备份一个数据库:mysqldump -h localhost -u root -p123456 www > d:\www2008-2-26.sql //以下是在程序中进行测试 //$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile&qu

  • 浅谈mysqldump使用方法(MySQL数据库的备份与恢复)

    #mysqldump --help 1.mysqldump的几种常用方法: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql    (2)导出数据库结构(不含数据) mysqldump -u username -p -d dbname > dbname.sql    (3)导出数据库中的某张数据表(包含数据) mysqldump -u username -p dbname tablename > tabl

  • mysql备份恢复mysqldump.exe几个常用用例

    1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名  mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql 3.导出一个数据库结构 mysqldump -u wcnc -p -d --add-drop-ta

  • 用mysqldump备份和恢复指定表的方法

    复制代码 代码如下: mysqldump -u user -p db tab1 tab2 > db.sql 恢复  复制代码 代码如下: mysql -u user -p db < db.sql 参考: 1.拷备文件          :   (保证数据库没有写操作(可以给表上锁定))直接拷贝文件不能移植到其它机器上,除非你正在拷贝的表使用MyISAM存储格式 2.mysqldump    :   mysqldump生成能够移植到其它机器的文本文件 例: 备份整个数据库     --> 

  • MySQL5.7 mysqldump备份与恢复的实现

    MySQL 备份 冷备份: 停止服务进行备份,即停止数据库的写入 热备份: 不停止服务进行备份(在线) mysql 的 MyIsam 引擎只支持冷备份,InnoDB 支持热备份,原因: InnoDB引擎是事务性存储引擎,每一条语句都会写日志,并且每一条语句在日志里面都有时间点,那么在备份的时候,mysql可以根据这个日志来进行redo和undo,将备份的时候没有提交的事务进行回滚,已经提交了的进行重做.但是MyIsam不行,MyIsam是没有日志的,为了保证一致性,只能停机或者锁表进行备份. I

  • 浅谈MySQL数据库的备份与恢复

    一.MySQL 常见的备份方式 1. 直接拷贝数据库文件(物理拷贝) 2. 使用 mysqldump 工具备份 3. 使用 mysqlhotcopy 工具备份 4. 使用 mysql 的主从同步复制,实现数据实时同步备份 二.MySQL 物理数据文件结构介绍 1. 日志文件 错误日志 err log 二进制日志 binary log 更新日志 update log 查询日志 query log 慢查询日志 slow query log innodb 的 redo 日志 2. 数据文件 >>&g

  • 一文学会Mysql数据库备份与恢复

    目录 数据库备份的分类 从数据库的备份策略角度,备份可分为 常见的备份方法 Mysql完全备份 完全备份分类 冷备份方法实现恢复数据库 mysqldump备份与恢复 Mysql完全恢复 Mysql 日志管理 Mysql增量备份 Mysql增量恢复 断点恢复 基于位置点恢复 基于时间点恢复 总结 数据库备份的分类 物理备份:数据库操作系统的物理文件(如数据文件,日志文件等)的备份 物理备份的方法: 冷备份(脱机备份):是在关闭数据库时候进行的 热备份(联机备份):数据库处于运行状态,依赖于数据库的

  • mysql全量备份和快速恢复的方法整理

    一个简单的mysql全量备份脚本,备份最近15天的数据. 备份 #每天备份mysql数据库(保存最近15天的数据脚本) DATE=$(date +%Y%m%d) /home/cuixiaohuan/lamp/mysql5/bin/mysqldump -uuser -ppassword need_db > /home/cuixiaohuan/bak_sql/mysql_dbxx_$DATE.sql; find /home/cuixiaohuan/bak_sql/ -mtime +15 -name

  • Mysql实现企业级日志管理、备份与恢复的实战教程

    背景 随着业务的发展,公司业务和规模不断扩大,网站积累了大量的用户信息和数据,对于一家互联网公司来说,用户和业务数据是根基.一旦公司的数据错乱或者丢失,对于互联网公司而言就等于说是灭顶之灾,为防止系统出现操作失误或系统故障导致数据丢失,公司要求加强用户数据的可靠性,要求全面加强数据层面备份,并能在故障发生时第一时间恢复. 数据备份形式 文件备份: 通过Linux的备份命令把文件统一打个包存起来,可存在本地和远程服务器,等到要恢复时,再用这些文件恢复到指定位置. 数据库数据备份: 在一些对数据可靠

  • 详解Mysql之mysqlbackup备份与恢复实践

    一.mysqlbackup简介 mysqlbackup是ORACLE公司也提供了针对企业的备份软件MySQL Enterprise Backup简称,是MySQL服务器的备份实用程序.它是一个多平台,高性能的工具,具有丰富的功能,例如 "热"(在线)备份,增量和差异备份,选择性备份和还原,支持直接云存储备份,备份加密和压缩以及许多其他有价值的功能特征.经过优化以用于InnoDB表,MySQL Enterprise Backup能够备份和还原MySQL支持的任何存储引擎创建的各种表.它的

  • mysql 数据备份与恢复使用详解(超完整详细教程)

    目录 一.前言 二.数据备份策略 1.全备 2.增备 3.差异备份 三.数据备份类型 1.冷备 2.热备 3.温备 四.前置准备 五.mysqldump 数据备份命令使用 1.命令格式 2.案例演示 3.其他重要参数选项补充 六.mysqldump 数据恢复 1.全量恢复 2.全量备份中恢复单库 3.从某个数据库中恢复单表数据 4.使用dump + binlog进行数据恢复 七.物理备份 八.表的导出与导入 1. 使用SELECT…INTO OUTFILE导出文本文件 2. 使用mysqldum

  • Mysql从5.6.14安全升级至mysql5.6.25的方法

    服务器上Mysql的版本为:社区版的mysql-community-server-5.6.14.近日局方对服务器进行漏洞扫描,发现zhyh08上的mysql存在几个高危漏洞,要求进行修复.受这几个漏洞影响的主要是5.6.17及以前的版本,所以将mysql升级至最新的5.6.25即可解决问题. 1.下载最新的mysql安装包(rpm文件),链接如下: MySQL-5.6.25-1.el6.x86_64.rpm-bundle.tar 2.备份数据库数据,这里使用的是mysqldump命令. 3.备份

  • MySQL备份与恢复之保证数据一致性(5)

    在上一篇文章中我们提到热拷贝(MySQL备份与恢复之热拷贝),热拷贝也就是在MySQL或者其他数据库服务在运行的情况下使用mysqlhotcopy命令进行备份.这篇文章我们讲解怎样保证数据一致性.现在假设有这样一种情况,我们总是在凌晨对数据库进行备份,假设在凌晨之后发生数据库异常,并且导致数据丢失.这样凌晨之前的数据我们已经做了备份,但是凌晨到发生异常这段时间的数据就会丢失(没有binlog的情况下).好在InnoDB存储引擎支持事务,也支持Binlog,凌晨到发生异常这段时间的数据就可以通过日

随机推荐