为了防止数据丢失、被盗、误操作等,我们需要保护数据记录,要进行相应的备份。
mysql数据的备份就是将当前已有的数据或者记录保留下来,mysql数据的还原就是将已经保留的数据恢复到对应的库表中。
一、数据表备份
直接进入到数据库文件夹复制对应的表结构以及数据文件,以后还原的时候,直接将备份的内容放进去即可。数据表备份根据不同的存储引擎有不同的区别。
Innodb:只有表结构,数据全部存储到ibdata1文件中。
Myisam:表、数据和索引全部单独分开存储(.rfm结构、.MYD数据、.MYI索引)。
这种文件备份通常适用于myisam存储引擎,直接复制三个文件,然后直接放到对应的数据库下即可以使用。
二、单表备份
每次只能备份一张表,只能备份数据(表结构不能备份),通常将表中的数据进行导出到文件。
基本备份:
select */字段列表 into outfile 文件所在路径 from 数据源; -- 前提是外部文件不存在
-- 单表数据备份,基本备份
select * into outfile '/home/sqlbackup/student.txt' from student;
select * into outfile '/home/sqlbackup/class.txt' from class;
高级备份:
自己指定字段和行的处理方式。
select */字段列表 into outfile 文件所在路径 fields 字段处理 lines 行处理 from 数据源;
- fields:字段处理
- enclosed by:字段使用什么内容包裹, 默认是''(空字符串)
- terminated by:字段以什么结束, 默认是"\t"( tab)
- escaped by:特殊符号用什么方式处理,默认是'\\'( 使用反斜杠转义)
- lines:行处理
- starting by:每行以什么开始,默认是''(空字符串)
- terminated by:每行以什么结束,默认是"\r\n"(换行符)
-- 指定备份处理方式
select * into outfile '/home/sqlbackup/class1.txt'
fields -- 字段处理
enclosed by '"' -- 数据使用双引号包裹
terminated by '|' -- 使用竖线分隔字段数据
lines -- 行处理
starting by 'START:'
from class;
数据还原:
--怎么备份的怎么还原
load data infile 文件所在路径 into table 表名[(字段列表)] fields 字段处理 lines 行处理;
-- 还原数据
load data infile '/home/sqlbackup/class1.txt'
into table class
fields -- 字段处理
enclosed by '"' -- 数据使用双引号包裹
terminated by '|' -- 使用竖线分隔字段数据
lines -- 行处理
starting by 'START:';
三、SQL备份
备份的是SQL语句,系统会对表结构以及数据进行处理,变成对应的SQL语句,然后进行备份。还原的时候只要执行SQL指令。
备份:
mysqldump -uUSER_NAME -pPASSWORD [其他选项] DB [其他数据库库表] > 文件路径
- --default-character-set:设置字符集
- --single-transaction:将导出设置成事务
- --no-data:导出的SQL脚本中,将只包含创建表的create 语句
- --add-drop-table:导出的脚本中,包含 drop table if exists
- --routines:导出存储过程及函数
- --events:导出事件
- --triggers:导出触发器
- --skip-lock-tables:表不会被锁定,但是表数据备份不一定完整
-- 单表备份
mysqldump -uroot -p123456 mydb student > /home/sqlbk/student.sql
-- 单库备份
mysqldump -uroot -p123456 mydb > /home/sqlbk/database.sql
-- 备份指定的多个数据库
mysqldump -uroot -p123456 --databases db1 db2 > /home/sqlbk/db1db2.sql
-- 备份所有的数据库
mysqldump -uroot -p123456 --all-databases > roverliang.sql
还原:
-- 还原数据,mysql客户端还原
mysql -uroot -p123456 mydb < /home/sqlbk/student.sql
-- SQL指令还原SQL备份
source /home/sqlbk/student.sql;
四、增量备份
不是针对数据或者SQL指令进行备份,是针对mysql服务器的日志文件进行备份。
指定时间段开始进行备份,备份数据不会重复,而且所有的操作都会备份(大项目都用增量备份)。