数据恢复:
root@bogon:/usr/local/mysql/bin# ./mysql -e "create database t2" root@bogon:/usr/local/mysql/bin# ./mysql t2 < t2.dmp*******************************************************************MySQL [t2]> select * from test;+------+------+| id | name |+------+------+| 1 | a || 2 | b |+------+------+2 rows in set (0.00 sec)4. 使用 mysqlbinlog 恢复自 mysqldump 备份以来的 binglog
根据前面操作的内容,可知从备份的时间点到删库的时间点之间的操作被记录到了 mysql-bin.000002 文件中
root@bogon:/usr/local/mysql/bin# ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000002 | ./mysql t2*******************************************************MySQL [t2]> select * from test;+------+------+| id | name |+------+------+| 1 | a || 2 | b || 3 | c || 4 | d |+------+------+4 rows in set (0.00 sec)至此,数据恢复成功 。
3. 基于时间点恢复由于误操作,比如误删除了一张表,这时使用完全恢复时没有用的,因为日志里面还存在误操作的语句,我们需要的是恢复到误操作之前的状态,然后跳过误操作语句,再恢复后面执行的语句,完成恢复 。这种恢复叫不完全恢复,在 MySQL 中,不完全恢复分为 基于时间点的恢复和基于位置的恢复 。基于时间点恢复的操作步骤:
(1) 如果是上午 10 点发生了误操作,可以用以下语句用备份和 binlog 将数据恢复到故障前:
shell>mysqlbinlog --stop-date="2017-09-30 9:59:59" /data/mysql/mysql-bin.123456 | mysql -uroot -ppassword(2) 跳过故障时的时间点,继续执行后面的 binlog,完成恢复 。
shell>mysqlbinlog --start-date="2017-09-30 10:01:00" /data/mysql/mysql-bin.123456 | mysql -uroot -ppassword4. 基于位置恢复和基于时间点的恢复类似,但是更精确,因为同一个时间点可能有很多条 sql 语句同时执行 。恢复的操作步骤如下:
(1) 在 shell 下执行命令:
shell>mysqlbinlog --start-date="2019-09-30 9:59:59" --stop-date="2019-09-30 10:01:00"/data/mysql/mysql-bin.123456 > /tmp/mysql_restore.sql该命令将在 /tmp 目录创建小的文本文件,编辑此文件,知道出错语句前后的位置号,例如前后位置号分别为 368312 和 368315 。
(2) 恢复了以前的备份文件后,应从命令行输入下面的内容:
shell>mysqlbinlog --stop-position="368312" /data/mysql/mysql-bin.123456 | mysql -uroot -ppassword shell>mysqlbinlog --start-position="368315" /data/mysql/mysql-bin.123456 | mysql -uroot -ppassword上面的第一行将恢复到停止位置为止的所有事务 。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务 。因为 mysqlbinlog 的输出包括每个 sql 语句记录之前的 set timestamp 语句,因此恢复的数据和相关的 mysql 日志将反映事务执行的 原时间 。
三、 表的导入导出在数据库的日常维护中,表的导入导出时很频繁的一类操作 。
1. 导出
在某些情况下,为了一些特定的目的,经常需要将表里的数据导出为某些符号分割的纯数据文本,而不是 sql 语句:
1、用来作为 Excel 显示;2、单纯为了节省备份空间;3、为了快速的加载数据,load data 的加载速度比普通 sql 加载要快 20 倍以上 。
使用 select ...into outfile ... 命令来导出数据,具体语法如下:
mysql> select * from tablename into outfile 'target_file' [option];其中 option 参数可以是以下选项:
fields terminated by 'string' // 字段分隔符,默认为制表符't'fields [optionally] enclosed by 'char' // 字段引用符,如果加 optionally 选项则只用在 char、varchar 和 text 等字符型字段上,默认不使用引用符 fields escaped by ‘char’ // 转移字符、默认为 '' lines starting by 'string' // 每行前都加此字符串,默认'' lines terminated by 'string' // 行结束符,默认为'n' # char 表示此符号只能是单个字符,string表示可以是字符串 。例如,将 test 表中数据导出为数据文本,其中,字段分隔符为“,”,字段引用符为“"”,记录结束符为回车符:
推荐阅读
- MySQL还能实现分布式锁?
- 运维新人如何快速管理服务器
- 粉丝怎么做好吃?
- 常用的10种MySQL函数,数据处理一定用得上
- Index MySQL查询合理使用索引:别让你的数据库负重前行
- MySQL底层的存储结构
- MySQL分组查询后如何获取每组的前N条数据,你会吗?
- 5大常用MySQL客户端工具,入门数据库必备收藏
- MySQL递归查询上下级菜单
- 这些 MySQL 调优配置,你都知道吗?
