MySQL备份与恢复【金沙官网线上】

mysql的备份可以分为冷备份和热备份两种。

粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份

冷备份:停止数据库服务进行备份

--备份的目的

热备份:不停止数据库服务进行备份

灾难恢复:意外情况下(如服务器宕机、磁盘损坏等)对损坏的数据进行恢复和还原保证数据不丢失,最小程度地丢失
需求改变:因需求改变而需要把数据还原到改变以前
测试:测试新功能是否可用

mysql的存储引擎为MyIsam时,只支持冷备份,可以直接复制mysql的data目录下的数据库文件。这种方式需要注意mysql版本兼容性问题,同时,为了保证一致性,必须停机或者锁表进行备份。

--备份与恢复概述

在恢复时,首先关闭mysql服务,将备份的数据库文件复制到mysql的data目录下,然后启动mysql服务。

根据备份的方法可以分为:

mysql的存储引擎为InnoDB时,支持热备份,因为InnoDB引擎是事务性存储引擎,可以根据日志来进行redo和undo,即将备份的时候没有提交的事务进行回滚,已经提交了的事务进行重做。

1、Hot Backup(热备)

mysql提供了mysqldump命令用于存储引擎为InnoDB时的备份。

2、Cold Backup(冷备)

 

3、Warm Backup(温备)

一、备份

Hot Backup是指在数据库运行中直接备份,对正在运行的数据库基本无影响,但只能是InnoDB存储引擎的,表这种方式在MySQL官方手册中称为Online Backup(在线备份)。

mysqldump的语法和选项可以通过命令行输入mysqldump --help查看。

Cold Backup是指在数据库停止的情况下进行备份,这种备份最为简单,可是最可靠的,一般只需要拷贝相关的数据库物理文件即可。这种方式在MySQL官方手册中称为Offline Backup(离线备份)。

-- 运行帮助命令,查看语法及完整的选项列表
mysqldeump --help

Warm Backup备份同样是在数据库运行时进行,但是会对当前数据库的操作有所影响,例如加一个全局读锁以保证备份数据的一致性,其他的存储引擎就只能使用Warm Backup。

金沙官网线上 1

备份方式分为:

这里因为安装mysql时配置了环境变量,所以可以直接输入命令,否则需要进入mysql安装目录的bin目录下。(例如:C:softMySqlmysql-5.7.22-winx64bin)

物理备份:物理备份就是备份数据文件了,比较形象点就是cp下数据文件,但真正备份的时候自然不是的cp这么简单。

 

逻辑备份:逻辑备份就是把数据库的结构定义语句,数据内容的插入语句,全部存储下来。然后恢复的时候,在另一个mysql服务器执行这些语句,就可以创建另一个与之前一样的数据库了。

mysqldump命令备份指定数据库。

逻辑备份和物理备份各有优劣,一般来说,物理备份恢复速度比较快,占用空间比较大,逻辑备份速度比较慢,占用空间比较小。逻辑备份的恢复成本高。

-- 备份指定数据库(demo)
mysqldump -u root -h 127.0.0.1 -p demo >c:UsersliufaDesktop2018-07-10.sql

--热备工具

金沙官网线上 2

Ibbackup(收费)

 

ibbackup是oracle官方提供的热备工具,可以同时备份MyISAM存储引擎表和InnoDB存储引擎表,物理备份。

mysqldump命令备份指定数据库中的指定表。

XtraBackup(开源免费)

-- 备份指定数据库(demo)中的指定表(student)
mysqldump -u root -h 127.0.0.1 -p demo student >c:UsersliufaDesktopStudent_2018-07-10.sql

XtraBackup支持MySQL数据库5.0版和5.1版,同时也支持InnoDB Plugin版本新增的Barracuda页格式,物理备份。

金沙官网线上 3

Mysqldump(官方自带)

 

mysqldump工具是mysql官方自带的一个非常方便的一款小工具,逻辑备份,5.7加入了Mysqlpump。

mysqldump命令备份多个数据库。

--Hot Backup(热备,逻辑备份)

-- 备份多个数据库(demo、sys)
mysqldump -u root -h 127.0.0.1 -p --databases demo sys >c:UsersliufaDesktop2018-07-10.sql

逻辑备份就是把数据库的结构定义语句,数据内容的插入语句,全部存储下来。然后恢复的时候,在另一个mysql服务器执行这些语句,就可以创建另一个与之前一样的数据库了,适用:这种比较适合数据量少的数据库。

金沙官网线上 4

热备的优点是:

 

1、占用空间比较小

mysqldump命令备份所有数据库。

2、恢复简单,可以使用管道将他们输入到MySQL

-- 备份所有数据库
mysqldump -u root -h 127.0.0.1 -p --all-databases >c:UsersliufaDesktop2018-07-10.sql

3、与存储引擎无关,因为是从mysql服务器中提取数据而生成的,所以消除了底层数据存储的不同

金沙官网线上 5

4、有助于避免数据损坏。若磁盘驱动器有故障而要复制原始文件时,此时将得到一个损坏的备份

 

热备的缺点是:

备份的sql脚本文件中的一些知识点,简单介绍。

1、必须有数据库服务器完成逻辑工作,需要更多地cpu周期

-- 表示当mysql的版本为4.01.03以上时,这里面的sql语句是会执行的
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

-- 在大批量导入时,先禁用索引,然后导入数据完成之后再开启索引,一次性重建索引的效率更高
-- 禁用表(student)的索引
alter table student disable keys;
-- 启用表(student)的索引
alter table student enable keys;

-- 为指定表设置读锁定,那么该线程和其它线程只能从该表中读数据,不能进行任何写操作
lock tables demo.student read;
-- 释放锁定
unlock tables;

-- 为指定表设置写锁定,那么该表只有拥有这个锁的线程才能读写,其它的线程被阻塞
lock tables demo.student write;
-- 释放锁定
unlock tables;

2、速度比较慢。因为获取了信息,然后组装成sql语句,如果调用命令是远程,还要把sql语句远程传输; 

 

--mysqldump实例步骤:

二、恢复

语法:

mysql命令恢复至指定数据库。

[root@001 ~]# mysqldump

-- 恢复至指定数据库(Test)
mysql -u root -h 127.0.0.1 -p Test <c:UsersliufaDesktopStudent_2018-07-10.sql

Usage: mysqldump [OPTIONS] database [tables]     #备份表

金沙官网线上 6

OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]    #备份哪几个数据库

 

OR mysqldump [OPTIONS] --all-databases [OPTIONS]        #所有数据库

如果已经登录mysql,则可以使用这种方式恢复至指定数据库,但只能在cmd界面下执行source命令,不能在mysql工具里面执行source命令。

For more options, use mysqldump --help

-- 如果已经登录mysql,则可以使用这种方式恢复至指定数据库
-- 只能在cmd界面下执行source命令,不能在mysql工具里面执行source命令
use Test;
source c:UsersliufaDesktopStudent_2018-07-10.sql

如果是使用innodb为确保数据一致可以加参数 --single-transaction#一致性备份指的是当你备份的所有数据的时间点都是在你开始备份的那个时间点,即使表中的数据发生变化也不备份。

金沙官网线上 7

--参数说明:

 

--all-databases , -A

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

导出全部数据库。

如果通过mysqldump备份的是单个数据库,且没有使用(--databases)选项,则备份文件中不包含create database和use语句,那么在恢复的时候必须先创建数据库并指定该数据库。

mysqldump -uroot -p --all-databases

 

--all-tablespaces , -Y

三、带有--tab=dir_name选项的备份与恢复

导出全部表空间。

调用mysqldump带有--tab=dir_name选项备份数据库,则dir_name表示输出文件的目录,在这个指定的目录中,需备份的每个表将会产生两个文件。

mysqldump -uroot -p --all-databases --all-tablespaces

例如:对于一个名为t1的表,备份会生成两个文件,即t1.sql和t1.txt。

--no-tablespaces , -y

t1.sql文件中包含create table语句,t1.txt文件中一行对应为数据表中的一条记录,列值与列值之间以‘tab’分隔。

不导出任何表空间信息。

-- 带有--tab=dir_name选项的备份
mysqldump -u root -h 127.0.0.1 -p test --tab=c:UsersliufaDesktop

mysqldump -uroot -p --all-databases --no-tablespaces

金沙官网线上 8

--add-drop-database

 

每个数据库创建之前添加drop数据库语句。

带有--tab=dir_name选项的备份在恢复时,需要先恢复表结构,然后恢复表中的数据。

mysqldump -uroot -p --all-databases --add-drop-database

-- 恢复表结构
mysql -u root -h 127.0.0.1 -p test <c:UsersliufaDesktopstudent.sql

--add-drop-table

金沙官网线上 9

每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)

-- 恢复表中的数据
mysqlimport -u root -h 127.0.0.1 -p test c:UsersliufaDesktopstudent.txt

mysqldump -uroot -p --all-databases (默认添加drop语句)

金沙官网线上 10

mysqldump -uroot -p --all-databases –skip-add-drop-table (取消drop语句)

 

--add-locks

四、导出

在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(默认为打开状态,使用--skip-add-locks取消选项)

使用select...into outfile命令导出。

mysqldump -uroot -p --all-databases (默认添加LOCK语句)

-- select ... into outfile语法
select * from tablename where 1=1 into outfile 'filename.txt' [OPTIONS]

[OPTIONS]:
fields terminated by 'string'                -- 表示每个字段的值用指定的字符分割,可以为单个或多个字符
fields [OPTIONALLY]  ENCLOSED BY 'char'    -- 表示每个字段的值用指定的字符包起来,只能为单个字符
fields ESCAPED BY 'char'                    -- 表示将系统默认的转移字符替换为指定字符,只能为单个字符
lines STARTING by 'string'                    -- 表示每行数据开头的字符,可以为单个或多个字符,默认没有任何字符
lines terminated by 'string'                 -- 表示每行数据结尾的字符,可以为单个或多个字符,默认没有任何字符

-- 把查询出的数据导出到指定的文本文件
select * from demo.student into outfile 'C:\Users\liufa\Desktop\student.txt' 
fields 
terminated by ','    -- 表示字段之间用逗号分隔
optionally enclosed BY '''    -- 表示每个字段用单引号引起来,加上optionally关键字表示所有的值都放在引号之间,否则只有char和varchar等字符数据类型的字段被引号引起来
escaped BY '''    
lines 
terminated by 'rn';    -- 表示每行以回车换行符结尾,保证每一条记录占一行

mysqldump -uroot -p --all-databases –skip-add-locks (取消LOCK语句)

 

--allow-keywords

使用mysql命令导出。

允许创建是关键词的列名字。这由表名前缀于每个列名做到。

-- 语法
mysql -u root -h 127.0.0.1 -p --execute="select 语句" dbname >filename.txt

mysqldump -uroot -p --all-databases --allow-keywords

 

--apply-slave-statements

使用mysql命令导出指定数据库中所查询的指定表的数据。

在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。

-- 导出数据库(demo)中表(student)的数据,导出的文件一行对应数据表中的一条记录,列与列之间以制表符(‘tab’)分割
mysql -u root -h 127.0.0.1 -p --execute="select * from student;" demo >c:UsersliufaDesktopstudent.txt

mysqldump -uroot -p --all-databases --apply-slave-statements

金沙官网线上 11

--character-sets-dir

 

字符集文件的目录

-- 导出数据库(demo)中表(student)的数据,每个字段占一行,如下图
mysql -u root -h 127.0.0.1 -p --vertical --execute="select * from student;" demo >c:UsersliufaDesktopstudent.txt

mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets

金沙官网线上 12

--comments

金沙官网线上 13

附加注释信息。默认为打开,可以用--skip-comments取消

 

mysqldump -uroot -p --all-databases (默认记录注释)

-- 导出数据库(demo)中表(student)的数据,生成html文件
mysql -u root -h 127.0.0.1 -p --html --execute="select * from student;" demo >c:UsersliufaDesktopstudent.html

mysqldump -uroot -p --all-databases --skip-comments (取消注释)

金沙官网线上 14

--compatible

 

导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,

-- 导出数据库(demo)中表(student)的数据,生成xml文件
mysql -u root -h 127.0.0.1 -p --xml --execute="select * from student;" demo >c:UsersliufaDesktopstudent.xml

要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。

金沙官网线上 15

金沙官网线上,mysqldump -uroot -p --all-databases --compatible=ansi

 

--compact

五、导入

导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys

使用load data infile命令导入。

mysqldump -uroot -p --all-databases --compact

-- load data infile语法
-- 如果指定关键字LOW_PRIORITY,那么mysql将会等到没有线程读取当前指定表的时候才导入数据
-- 如果指定关键字CONCURRENT,则读取和导入可以同时发生
-- 如果指定关键字LOCAL,则表示导入本地的文件
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'filename.txt' 
-- REPLACE和IGNORE控制对现有表的唯一键记录重复的处理,当指定REPLACE时,新行将替换有相同的唯一键值的现有行;当指定IGNORE时,跳过有唯一键的现有行的重复行的输入。
-- 如果你不指定任何一个选项,当找到重复键时,出现一个错误,并且文本文件的余下部分被忽略。
[REPLACE | IGNORE] 
INTO TABLE tablename 
[FIELDS 
    [TERMINATED BY 'string'] 
    [[OPTIONALLY] ENCLOSED BY 'char'] 
    [ESCAPED BY 'char' ] 
] 
[LINES 
    [STARTING BY 'string'] 
    [TERMINATED BY 'string'] 
] 
[IGNORE number LINES] -- 表示从开始忽略文件的行数,number表示忽略的行数
[(col_name_or_user_var,...)] 
[SET col_name = expr,...]

-- 导入数据
load data infile 'c:\Users\liufa\Desktop\student.txt' 
replace
into table test.student 
fields 
terminated by ','
optionally enclosed BY '''
escaped BY '''
lines 
terminated by 'rn';

--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,/tmp/mysqldump.trace

mysqldump -uroot -p --all-databases --debug

mysqldump -uroot -p --all-databases --debug=" d:t,/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=utf8

--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

对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。

mysqldump -uroot -p --all-databases

--dump-slave

该选项将主的binlog位置和文件名追加到导出数据的文件中(show slave status)。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,会在change前加上注释。该选项将会打开--lock-all-tables,除非--single-transaction被指定。该选项会自动关闭--lock-tables选项。默认值为0。

mysqldump -uroot -p --all-databases --dump-slave=1

mysqldump -uroot -p --all-databases --dump-slave=2

 

--master-data

该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status)。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。

mysqldump -uroot -p --host=localhost --all-databases --master-data=1;

mysqldump -uroot -p --host=localhost --all-databases --master-data=2;

--events, -E

导出事件。

mysqldump -uroot -p --all-databases --events

--extended-insert, -e

使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项。

mysqldump -uroot -p --all-databases

mysqldump -uroot -p --all-databases--skip-extended-insert (取消选项)

--fields-terminated-by

导出文件中忽略给定字段。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump -uroot -p test test --tab="/home/mysql" --fields-terminated-by="#"

--fields-enclosed-by

输出文件中的各个字段用给定字符包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump -uroot -p test test --tab="/home/mysql" --fields-enclosed-by="#"

--fields-optionally-enclosed-by

输出文件中的各个字段用给定字符选择性包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump -uroot -p test test --tab="/home/mysql" --fields-enclosed-by="#" --fields-optionally-enclosed-by ="#"

--fields-escaped-by

输出文件中的各个字段忽略给定字符。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump -uroot -p mysql user --tab="/home/mysql" --fields-escaped-by="#"

--flush-logs

开始导出之前刷新日志。

请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。

mysqldump -uroot -p --all-databases --flush-logs

--flush-privileges

在导出mysql数据库之后,发出一条FLUSH PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。

mysqldump -uroot -p --all-databases --flush-privileges

--force

在导出过程中忽略出现的SQL错误。

mysqldump -uroot -p --all-databases --force

--help

显示帮助信息并退出。

mysqldump --help

--hex-blob

使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARY、VARBINARY、BLOB。

mysqldump -uroot -p --all-databases --hex-blob

--host, -h

需要导出的主机信息

mysqldump -uroot -p --host=localhost --all-databases

--ignore-table

不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……

mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user

--include-master-host-port

在--dump-slave产生的'CHANGE MASTER TO..'语句中增加'MASTER_HOST=<host>,MASTER_PORT=<port>'

mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port

--insert-ignore

在插入行时使用INSERT IGNORE语句.

mysqldump -uroot -p --host=localhost --all-databases --insert-ignore

--lines-terminated-by

本文由金沙官网线上发布于数据库,转载请注明出处:MySQL备份与恢复【金沙官网线上】

您可能还会对下面的文章感兴趣: