首页 > 代码库 > mysql数据备份与还原
mysql数据备份与还原
备份的不同分类:
热备份、温备份和冷备份
热备份:读、写不受影响;
温备份:仅可以执行读操作;
冷备份:离线备份;读、写操作均中止;
物理备份和逻辑备份
物理备份:复制数据文件;原始数据在操作系统上呈什么样,备份出来也是什么样,适用
于比较大型、重要、出现故障时要快速恢复的场景
逻辑备份:备份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表
查看/tmp/test2目录
例2:备份整个数据库
然后查看/tmp/test目录
可以发现,数据库中的每张表都生成两个同名文件,.txt存储表中的实际数据,.sql存储的是sql语句(建表语句)
查看一下tutors.txt这个文件
可以看到,每条记录输出到一行上,列值之间用tab符隔开,如果希望自己能自定义输出的格式,可以使用下面的选项
--fields-terminated-by=‘,‘ | 列值之间用逗号隔开 |
--fields-enclosed-by=‘"‘ | 列值使用双引号引起来 |
--lines-terminated-by=‘\‘ | 指定\为行结束符,默认为换行符 |
可以看到,导出的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
2、在数据库中通过LOAD DATA INFILE语句来导入.txt文件到表中
mysql>LOAD DATA INFILE ‘/path/to/tb.txt‘ INTO TABLE tb_name [参数]
创建冷备份
1、查看正在使用的二进制日志
mysql>show master status;
2、进行二进制日志滚动
mysql>flush logs
3、关闭mysql,备份数据目录,开启mysql即可
创建增量备份
1、进行二进制日志滚动
2、使用mysqlbinlog进行备份
mysqlbinlog /path/to/binlog/mysql-bin.0000xx > /path/to/backup/0000xx.sql
(恢复时可以直接source或mysql命令(上面还原时有讲到))
说白了增量备份就是使用mysqlbinlog将上次备份后新生成的二进制日志备份到指定目录
本文出自 “90后” 博客,请务必保留此出处http://lzs66.blog.51cto.com/9607068/1845574
mysql数据备份与还原