物理备份与逻辑备份

来源:互联网 发布:const java 编辑:程序博客网 时间:2024/05/16 00:43

  1. 物理备份和恢复:
    物理备份分为热备和冷备份,较逻辑备份,物理备份的备份和恢复的速度快,原理基于cp命令。
    冷备:备份MySQL数据库的共享表空间、.frm、独立表空间(.ibd)、重做日志文件。

    • 优点:备份简单、恢复简单、备份的速度快
    • 缺点:不是那么的容易跨平台、备份的文件比较大
    • 冷备份的备份步骤:停掉MySQL服务,在操作系统级别备份MySQL的数据文件和日志文件到备份目录
    • 冷备份的恢复步骤:停掉MySQL服务,在操作系统级别恢复MySQL的数据文件,然后重启MySQL服务,使用mysqlbinlog
  2. 逻辑备份:
    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的用法在下面的文章中记录

今天衡阳阴天。。

原创粉丝点击