mysql在SBR下恢复误删除的表
2016-05-22 22:16
344 查看
(system@localhost) [zeng]> select * from t;
+------+--------------------------+----------------------------------+
| id | context | hash_value |
+------+--------------------------+----------------------------------+
| 1 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 2 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 3 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 4 | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
将表备份一下:
mysqldump -usystem -psafe2016 -S /mysql/server/conf/mysql.sock zeng t >/mysql/backup/t.sql
(system@localhost) [zeng]> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000016 | 235 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
(system@localhost) [zeng]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000014 | 3253595 |
| mysql-bin.000015 | 167 |
| mysql-bin.000016 | 235 |
+------------------+-----------+
错误更新操作:
(system@localhost) [zeng]> update t set context='shanghai' where id=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
后面又增加了记录:
(system@localhost) [zeng]> insert into t values (5,'chongqing','');
Query OK, 1 row affected (0.01 sec)
查看表的记录数:
(system@localhost) [zeng]> select * from t;
+------+--------------------------+----------------------------------+
| id | context | hash_value |
+------+--------------------------+----------------------------------+
| 1 | shanghai | 09746eef633dbbccb7997dfd795cff17 |
| 2 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 3 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 4 | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
| 5 | chongqing | |
+------+--------------------------+----------------------------------+
5 rows in set (0.00 sec)
如何恢复该表,跳过错误?
先把表备份一份:
create table t_bak as select * from t;
然后drop 表t:
drop table t;
利用前面备份的表t,用mysql命令恢复回去:
mysql -usystem -psafe2016 -S /mysql/server/conf/mysql.sock zeng </mysql/backup/t.sql
(system@localhost) [zeng]> desc t;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id | varchar(100) | YES | | NULL | |
| context | blob | YES | | NULL | |
| hash_value | varchar(40) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
(system@localhost) [zeng]> select * from t;
+------+--------------------------+----------------------------------+
| id | context | hash_value |
+------+--------------------------+----------------------------------+
| 1 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 2 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 3 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 4 | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
+------+--------------------------+----------------------------------+
4 rows in set (0.00 sec)
需要将更新误操作后面插入的记录恢复回去,且要跳过误操作,需要先查看binlog,确认误操作前后的时间点或位置及所有对t表操作过的命令。
(system@localhost) [zeng]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000014 | 3253595 |
| mysql-bin.000015 | 167 |
| mysql-bin.000016 | 1929 |
+------------------+-----------+
(system@localhost) [zeng]> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000016 | 1929 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
分析mysql-bin.000016确认时间点或位置:2015-08-07 16:05:46或314及操作命令。
314位置的SQL就是误操作的SQL:
# at 314
#150807 16:05:46 server id 2433306 end_log_pos 430 CRC32 0xb3ed1fbe Query thread_id=43 exec_time=0 error_code=0
use `zeng`/*!*/;
SET TIMESTAMP=1438934746/*!*/;
update t set context='shanghai' where id=1
540位置的SQL是需要重新执行的SQL:
/*!*/;
# at 540
#150807 16:07:57 server id 2433306 end_log_pos 653 CRC32 0xbf542069 Query thread_id=43 exec_time=0 error_code=0
SET TIMESTAMP=1438934877/*!*/;
insert into t values (5,'chongqing','')
/*!*/;
再执行如下:
(system@localhost) [zeng]> insert into t values (5,'chongqing','')
-> ;
Query OK, 1 row affected (0.01 sec)
再查看一下,需要的记录找回来了。
(system@localhost) [zeng]> select * from t;
+------+--------------------------+----------------------------------+
| id | context | hash_value |
+------+--------------------------+----------------------------------+
| 1 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 2 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 3 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 4 | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
| 5 | chongqing | |
+------+--------------------------+----------------------------------+
5 rows in set (0.00 sec)
+------+--------------------------+----------------------------------+
| id | context | hash_value |
+------+--------------------------+----------------------------------+
| 1 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 2 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 3 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 4 | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
将表备份一下:
mysqldump -usystem -psafe2016 -S /mysql/server/conf/mysql.sock zeng t >/mysql/backup/t.sql
(system@localhost) [zeng]> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000016 | 235 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
(system@localhost) [zeng]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000014 | 3253595 |
| mysql-bin.000015 | 167 |
| mysql-bin.000016 | 235 |
+------------------+-----------+
错误更新操作:
(system@localhost) [zeng]> update t set context='shanghai' where id=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
后面又增加了记录:
(system@localhost) [zeng]> insert into t values (5,'chongqing','');
Query OK, 1 row affected (0.01 sec)
查看表的记录数:
(system@localhost) [zeng]> select * from t;
+------+--------------------------+----------------------------------+
| id | context | hash_value |
+------+--------------------------+----------------------------------+
| 1 | shanghai | 09746eef633dbbccb7997dfd795cff17 |
| 2 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 3 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 4 | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
| 5 | chongqing | |
+------+--------------------------+----------------------------------+
5 rows in set (0.00 sec)
如何恢复该表,跳过错误?
先把表备份一份:
create table t_bak as select * from t;
然后drop 表t:
drop table t;
利用前面备份的表t,用mysql命令恢复回去:
mysql -usystem -psafe2016 -S /mysql/server/conf/mysql.sock zeng </mysql/backup/t.sql
(system@localhost) [zeng]> desc t;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id | varchar(100) | YES | | NULL | |
| context | blob | YES | | NULL | |
| hash_value | varchar(40) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
(system@localhost) [zeng]> select * from t;
+------+--------------------------+----------------------------------+
| id | context | hash_value |
+------+--------------------------+----------------------------------+
| 1 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 2 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 3 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 4 | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
+------+--------------------------+----------------------------------+
4 rows in set (0.00 sec)
需要将更新误操作后面插入的记录恢复回去,且要跳过误操作,需要先查看binlog,确认误操作前后的时间点或位置及所有对t表操作过的命令。
(system@localhost) [zeng]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000014 | 3253595 |
| mysql-bin.000015 | 167 |
| mysql-bin.000016 | 1929 |
+------------------+-----------+
(system@localhost) [zeng]> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000016 | 1929 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
分析mysql-bin.000016确认时间点或位置:2015-08-07 16:05:46或314及操作命令。
314位置的SQL就是误操作的SQL:
# at 314
#150807 16:05:46 server id 2433306 end_log_pos 430 CRC32 0xb3ed1fbe Query thread_id=43 exec_time=0 error_code=0
use `zeng`/*!*/;
SET TIMESTAMP=1438934746/*!*/;
update t set context='shanghai' where id=1
540位置的SQL是需要重新执行的SQL:
/*!*/;
# at 540
#150807 16:07:57 server id 2433306 end_log_pos 653 CRC32 0xbf542069 Query thread_id=43 exec_time=0 error_code=0
SET TIMESTAMP=1438934877/*!*/;
insert into t values (5,'chongqing','')
/*!*/;
再执行如下:
(system@localhost) [zeng]> insert into t values (5,'chongqing','')
-> ;
Query OK, 1 row affected (0.01 sec)
再查看一下,需要的记录找回来了。
(system@localhost) [zeng]> select * from t;
+------+--------------------------+----------------------------------+
| id | context | hash_value |
+------+--------------------------+----------------------------------+
| 1 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 2 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 3 | beijingbeijing | 09746eef633dbbccb7997dfd795cff17 |
| 4 | beijing 2008beijing 2008 | 1c0ddb82cca9ed63e1cacbddd3f74082 |
| 5 | chongqing | |
+------+--------------------------+----------------------------------+
5 rows in set (0.00 sec)
相关文章推荐
- mysql使用传输表空间迁移大表测试
- MYSQL系列-MYSQL基础增强(Myql函数)
- .Net初使用MySql数据库生成Model类并与SqlServer简单对比
- Spark将计算结果写入到Mysql中
- MySQL索引背后的之使用策略及优化
- mysqldump详细了解
- MySQL基本操作
- 安装MySQL样本数据库Sakila
- MySQL 5.7启动失败
- MySql中启用InnoDB数据引擎的方法
- MySQL数据库MyISAM和InnoDB存储引擎的比较
- mysql 导入excel
- 安装MYSQL出现的问题
- mysql基本操作
- MySQL - ERROR 1839
- 为什么你的MySQL跑得很慢?
- MySQL - ERROR 1406
- MySQL基本操作SQL语句
- MySQL - ERROR 1235 (42000)
- MySQL - ERROR 1062 (23000)