备份的不同分类:

                热备份、温备份和冷备份

                        热备份:读、写不受影响;

                        温备份:仅可以执行读操作;

                        冷备份:离线备份;读、写操作均中止;


                物理备份和逻辑备份

                        物理备份:复制数据文件;原始数据在操作系统上呈什么样,备份出来也是什么样,适用

                                          于比较大型、重要、出现故障时要快速恢复的场景

                        逻辑备份:备份sql语句,恢复的时候执行一遍备份的sql语句,较为灵活,但恢复速度较

                                          慢,适用于小型、便于在其他服务器上进行恢复的场景

                        

                完全备份、增量备份和差异备份;

                        完全备份:备份全部数据;

                        增量备份:仅备份上次完全备份或增量备份以后变化的数据;

                        差异备份:仅备份上次完全备份以来变化的数据;


备份工具:

    1、通过复制对象相关文件的方式创建备份

        一般适用于myisam引擎表,只要将.frm、.MYD、.MYI这些文件复制保存就相当于进行了备份

        步骤:

    mysql>FLUSH TABLES tb_name WITH READ LOCK    #备份前对表进行只读锁定
    [root@localhost /]cp /the/path/to/data /the/path/to/backup
    mysql>UNLOCK TABLES         #释放锁

        这种备份方法不适用于Innodb表,当innodb_file_per_table设置为1时,复制表对象的相关文件.ibd不能达到备份的目的,因为表结构、所属数据库等信息仍存在于Innodb的系统表空间中。


    2、使用sql语句进行备份

mysql>SELECT * INTO OUTFILE '/path/to/somefile.txt' FROM tb_name [WHERE clause];

    3、使用mysqldump进行逻辑备份

        备份单个数据库/表

mysqldump -uUSERNAME -p PASSWORD db_name [tb_name]> /path/to/backup/db_name.sql

        备份多个数据库

mysqldump -uUSERNAME -p PASSWORD --databases db1 db2 > /path/to/backup/db1_db2.sql

        使用--tab输出txt文件和sql文件,将数据和建表语句分开

mysqldump -uUSERNAME -p PASSWORD --tab=/path/to/backup db_name [tb_name]    #将数据库的全部对象或特定的表导出到backup目录下

    例1:备份数据库jiaowu下的tutors表

wKiom1fJA7LyU_inAAARD41U0nk403.png

    查看/tmp/test2目录

wKioL1fJA-7RV0BpAAAO0JkSAkA914.png

    例2:备份整个数据库

wKioL1fI74-T-TF-AAAPbIOlE0g940.png

    然后查看/tmp/test目录

wKiom1fI8m2zvQDyAAAKQs06oso347.png

    可以发现,数据库中的每张表都生成两个同名文件,.txt存储表中的实际数据,.sql存储的是sql语句(建表语句)

    查看一下tutors.txt这个文件

mysql数据备份与还原_第1张图片

可以看到,每条记录输出到一行上,列值之间用tab符隔开,如果希望自己能自定义输出的格式,可以使用下面的选项

--fields-terminated-by=','

列值之间用逗号隔开

--fields-enclosed-by='"' 列值使用双引号引起来
--lines-terminated-by=‘\' 指定\为行结束符,默认为换行符

wKiom1fJABXB-vjyAAATPV39slg540.png

mysql数据备份与还原_第2张图片

可以看到,导出的tutors.txt列值之间以逗号分开,并使用双引号引住,这样可以方便以后数据导入回数据库中


注意要点:

    当mysqldump没有使用--tab时,其导出的sql文件中既有操作语句又有建表语句;当使用--tab时,其中txt文件保存数据,sql文件仅有建表语句。


数据库的还原

  1、mysqldump没使用--tab选项    

mysql>use db_name
mysql>source /path/to/backup/tb.sql     #这样即可导入

   2、mysqldump使用--tab选项    

    1、使用.sql文件将表创建好

    mysql -uUSERNAME -p PASSWORD db_name < /path/to/backup/tb.sql

wKiom1fJEAqDAxDvAAAQjb3NCu4425.png

    2、在数据库中通过LOAD DATA INFILE语句来导入.txt文件到表中

mysql>LOAD DATA INFILE '/path/to/tb.txt' INTO TABLE tb_name [参数]

wKioL1fJE6uQUjiMAAAUaOzW5bs198.png


创建冷备份

    1、查看正在使用的二进制日志

mysql>show master status;

mysql数据备份与还原_第3张图片

    2、进行二进制日志滚动

mysql>flush logs

   mysql数据备份与还原_第4张图片

 3、关闭mysql,备份数据目录,开启mysql即可


创建增量备份

    1、进行二进制日志滚动

    2、使用mysqlbinlog进行备份

mysqlbinlog /path/to/binlog/mysql-bin.0000xx > /path/to/backup/0000xx.sql

    (恢复时可以直接source或mysql命令(上面还原时有讲到))

    说白了增量备份就是使用mysqlbinlog将上次备份后新生成的二进制日志备份到指定目录