物理备份与逻辑备份


  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的用法在下面的文章中记录

今天衡阳阴天。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章