物理备份和恢复:
物理备份分为热备和冷备份,较逻辑备份,物理备份的备份和恢复的速度快,原理基于cp命令。
冷备:备份MySQL数据库的共享表空间、.frm、独立表空间(.ibd)、重做日志文件。- 优点:备份简单、恢复简单、备份的速度快
- 缺点:不是那么的容易跨平台、备份的文件比较大
- 冷备份的备份步骤:停掉MySQL服务,在操作系统级别备份MySQL的数据文件和日志文件到备份目录
- 冷备份的恢复步骤:停掉MySQL服务,在操作系统级别恢复MySQL的数据文件,然后重启MySQL服务,使用mysqlbinlog
逻辑备份:
a. mysqldump备份:
语法:mysqldump [arguments] >file_name
mysqldump -uuser -p --all-databases >file_name.sql #备份所有的数据库
mysqldump -uuser -p --databases db1 db2 db3 >file_name.sql #备份数据库db1,db2,db3
mysqldump -uuser -p --single-transaction test > file_name.sql #保证一致性的情况下备份test架构
#一致性备份在备份开始时开启一个事务,这个样可以达到不锁表锁库的情况下进行备份,如果不加--single-transaction的话备份就会锁库锁表
mysqldump -uuser -p --where='a<100' --single-transaction Nums Nums >file.sql #备份Nums架构下的Nums中a字段小于100的
mysqldump -uuser -p --single-transaction sakila --tab="/var/lib/mysql-files" #以csv的格式备份sakila数据库到/var/lib/mysql-files目录
b. select ... into outfile
语法:select column1,column2 ... into outfile 'file_name' where condition from table ;
fields
terminated by '\t' :表示每个字段的间隔符
enclosed by '' :表示对于字符串的包含符
escaped by '\\' :表示转义字符
lines
starting by '' :表示行开始符号
terminated by '\n' :表示行结束符号
例如:
select * into outfile '/var/lib/mysql-files/city.txt' fields terminated by '\t' enclosed by '' escaped by '\\' lines starting by '' terminated by '\n' from city limit 10;
要求:
文件所在路径的权限必须是mysql:mysql
该文件不能已经存在
mysqldump 和select ... into outfile的区别:
mysqldump可以一次备份多个表且保证数据的一致性而select into outfile只能一次备份一个表,且不能保证数据的一致性
mysqldump的导入:
source 文件路径+文件名
load data infile :
语法:load data infile '文件路径+文件名' into table table_name;
例如:
set @@foreign_key_checks=0; #关闭外键检查
load data infile '/var/lib/mysql-files/city.txt' into table city;
set @@foreign_key_checks=1; #开启外键检查
#在load data infile前关闭外键检查,可以提高导入数据的效率
mysqlimport 工具:
语法:mysqlimport -uuser -p [参数] file_name
mysqlimport -uuser -p --use-threads /var/lib/mysql-files/t.txt /var/lib/mysql-files/city.txt
mysqlimport和load data infile的联系和区别:
mysqlimport 是load data infile的接口,由一个或者多个load data infile 组成,也就是说load data infile一次只能导入一张表,但是mysqlimport可以导入一张或者多张表
二进制日志备份和恢复:
备份日志步骤:
1.flush logs; #刷新日志
2.备份之前的日志
#恢复日志的方式:
mysqlbinlog lzg-Lenovo-G40-70m-bin.000001 |mysql -uuser -p db_name
#可以同时恢复两个日志,效率更高:
mysqlbinlog lzg-Lenovo-G40-70m-bin.000001 lzg-Lenovo-G40-70m-bin.000002|mysql -uuser -p db_name
mysqlbinlog的参数:
--start-position :开始位置
--stop-position :结束位置
--start-datetime :开始时间
--stop-datetime :结束时间
有一点不解:
就是删了一张表中的数据是可以恢复的,但是删除一个表就不能恢复
解jue:后来百度了一下解决了,原因是二进制恢复分为完全恢复、基于时间点的恢复和基于位置点的恢复。对于有删表操作的恢复,日志中保存有删表的sql语句,所以我们要基于时间或者位置点进行恢复点
mysqlbinlog --start-position=560 --stop-position=650 lzg-Lenovo-G40-70m-bin.000001 | mysql -uuser -p
mysqlbinlog --start-datetime="2017-07-10 08:00:00" --stop-datetime="2017-07-10 09:00:00" lzg-Lenovo-G40-70m-bin.000001 | mysql -uuser -p
xtrabackup的用法在下面的文章中记录
今天衡阳阴天。。