jsp mysql 备份与恢复 博客园_MySQL备份与恢复

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

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

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

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

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

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

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

一、备份

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

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

mysqldeump --help

ad3db65be6208405fbacdfef65951a63.png

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

mysqldump命令备份指定数据库。

-- 备份指定数据库(demo)

mysqldump -u root -h 127.0.0.1 -p demo >c:\Users\liufa\Desktop\2018-07-10.sql

2f08d9664489f5220dd05f1b98e4c050.png

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

-- 备份指定数据库(demo)中的指定表(student)

mysqldump -u root -h 127.0.0.1 -p demo student >c:\Users\liufa\Desktop\Student_2018-07-10.sql

5baea0122f7e897cd916d0f0e0fe9d2f.png

mysqldump命令备份多个数据库。

-- 备份多个数据库(demo、sys)

mysqldump -u root -h 127.0.0.1 -p --databases demo sys >c:\Users\liufa\Desktop\2018-07-10.sql

118b05f85af48255af269258b369b443.png

mysqldump命令备份所有数据库。

-- 备份所有数据库

mysqldump -u root -h 127.0.0.1 -p --all-databases >c:\Users\liufa\Desktop\2018-07-10.sql

b6b11d586a341d5e48ca708cfe255dc1.png

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

-- 表示当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;

48304ba5e6f9fe08f3fa1abda7d326ab.png

二、恢复

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

-- 恢复至指定数据库(Test)

mysql -u root -h 127.0.0.1 -p Test

491274888b85e2f96bcd19169a8fa7b5.png

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

-- 如果已经登录mysql,则可以使用这种方式恢复至指定数据库

-- 只能在cmd界面下执行source命令,不能在mysql工具里面执行source命令

use Test;

source c:\Users\liufa\Desktop\Student_2018-07-10.sql

025ffec01aa71085a1597f08a9bbe7ff.png

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

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

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

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

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

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

-- 带有--tab=dir_name选项的备份

mysqldump -u root -h 127.0.0.1 -p test --tab=c:\Users\liufa\Desktop

0e9731861df19673acce2e9051ae2706.png

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

-- 恢复表结构

mysql -u root -h 127.0.0.1 -p test

6cde04b7bde04976b38f406d14c966b9.png

-- 恢复表中的数据

mysqlimport -u root -h 127.0.0.1 -p test c:\Users\liufa\Desktop\student.txt

5a9f09292a1c619db6bc578b0578bbc9.png

四、导出

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

48304ba5e6f9fe08f3fa1abda7d326ab.png

-- 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 '\r\n'; -- 表示每行以回车换行符结尾,保证每一条记录占一行

48304ba5e6f9fe08f3fa1abda7d326ab.png

使用mysql命令导出。

-- 语法

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

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

-- 导出数据库(demo)中表(student)的数据,导出的文件一行对应数据表中的一条记录,列与列之间以制表符(‘tab’)分割

mysql -u root -h 127.0.0.1 -p --execute="select * from student;" demo >c:\Users\liufa\Desktop\student.txt

0c9841504740ee15c1f42a371fdb45a4.png

-- 导出数据库(demo)中表(student)的数据,每个字段占一行,如下图

mysql -u root -h 127.0.0.1 -p --vertical --execute="select * from student;" demo >c:\Users\liufa\Desktop\student.txt

441231f1f512fb8b05be16db0d3a644c.png

34b700d68488432f3715bfd220ecc76f.png

-- 导出数据库(demo)中表(student)的数据,生成html文件

mysql -u root -h 127.0.0.1 -p --html --execute="select * from student;" demo >c:\Users\liufa\Desktop\student.html

5c5b5888d3d941989a9abcefd68e1249.png

-- 导出数据库(demo)中表(student)的数据,生成xml文件

mysql -u root -h 127.0.0.1 -p --xml --execute="select * from student;" demo >c:\Users\liufa\Desktop\student.xml

5f17478f396d2a8c7dd3e1f5be249ad4.png

五、导入

使用load data infile命令导入。

48304ba5e6f9fe08f3fa1abda7d326ab.png

-- 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 '\r\n';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值