您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

详解MySQL误操作后怎样进行数据恢复_MySQL

2025/11/28 4:06:56发布11次查看
一、开启binlog。
首先查看binlog是否开启
mysql> show variables like log_bin;+---------------+-------+|variable_name | value +---------------+-------+| log_bin off +---------------+-------+1 row in set (0.00 sec)
值为off,需开启,开启binlog方式如下:
#vim /etc/my.cnf
在[mysqld]中加入
log-bin = mysql-binlog-bin = /usr/local/mysql/log/mysql-bin.log
重启mysql服务
#service mysqld stop#service mysqld start
二、模拟数据写入
建库
create database backup;
建表
create table `number` ( `id` int(11) not null auto_increment comment '编号', `updatetime` timestamp not null default '0000-00-00 00:00:00', primary key (`id`)) engine=innodb default charset=utf8;
写入数据
程序2-1
#coding:utf8#python2.7import mysqldbimport timedef connect_mysql(db_host=192.168.11.169,user=martin,passwd=martin,db=backup,charset=utf8): conn = mysqldb.connect(host=db_host,user=user,passwd=passwd,db=db,charset=charset) conn.autocommit(true)return conn.cursor()#数据插入for i in range(0,10):#time=time.strftime(%y-%m-%d %h:%m:%s)sql = 'insert into number(updatetime) values(%s)'values = [(time.strftime(%y-%m-%d %h:%m:%s))] db1 = connect_mysql()print db1.executemany(sql,values)
查询数据
mysql> select * from number;+-------+------------------------+| id | updatetime +--------------------------------+| 1 | 2016-06-29 23:27:15 || 2 | 2016-06-29 23:27:15 || 3 | 2016-06-29 23:27:15 || 4 | 2016-06-29 23:27:15 || 5 | 2016-06-29 23:27:15 || 6 | 2016-06-29 23:27:15 || 7 | 2016-06-29 23:27:15 || 8 | 2016-06-29 23:27:15 || 9 | 2016-06-29 23:27:15 || 10 | 2016-06-29 23:27:15 |+-------+------------------------+10 rows in set (0.00 sec)
三、全量备份
mysqldump -uroot -p -f --master-data=2 backup |gzip> /martin/data/backup_$(date +%f).sql.gz
注:加-f能刷新binlog,方便恢复时操作。
四、模拟写入增量数据
继续执行程序2-1。
查询数据
mysql> select * from number;+----+---------------------------+| id | updatetime |+----+---------------------------+| 1 | 2016-06-29 23:27:15 || 2 | 2016-06-29 23:27:15 || 3 | 2016-06-29 23:27:15 || 4 | 2016-06-29 23:27:15 || 5 | 2016-06-29 23:27:15 || 6 | 2016-06-29 23:27:15 || 7 | 2016-06-29 23:27:15 || 8 | 2016-06-29 23:27:15 || 9 | 2016-06-29 23:27:15 || 10 | 2016-06-29 23:27:15 || 11 | 2016-06-29 23:31:03 || 12 | 2016-06-29 23:31:03 || 13 | 2016-06-29 23:31:03 || 14 | 2016-06-29 23:31:03 || 15 | 2016-06-29 23:31:03 || 16 | 2016-06-29 23:31:03 || 17 | 2016-06-29 23:31:03 || 18 | 2016-06-29 23:31:03 || 19 | 2016-06-29 23:31:03 || 20 | 2016-06-29 23:31:03 |+-------+---------------------+20 rows in set (0.00 sec)
五、增量备份
保留mysql-bin.000002及之后的binlog即可。
六、模拟误操作
delete from number;
七、再次写入增量数据
执行程序2-1
select * from bumber;
+------+------------------------+| id | updatetime |+------+------------------------+| 21 | 2016-06-29 23:41:06 || 22 | 2016-06-29 23:41:06 || 23 | 2016-06-29 23:41:06 || 24 | 2016-06-29 23:41:06 || 25 | 2016-06-29 23:41:06 || 26 | 2016-06-29 23:41:06 || 27 | 2016-06-29 23:41:06 || 28 | 2016-06-29 23:41:06 || 29 | 2016-06-29 23:41:06 || 30 | 2016-06-29 23:41:06 |+------+------------------------+10 rows in set (0.00 sec)
八、恢复
此时发现之前的delete操作为误操作,急需恢复,恢复过程如下
给该表加上读锁
lock table number read;
将全量备份的数据导入
#cd /martin/data/#gzip -d number_2016-06-29.sql.gz#grep -i change *.sql-- change master to master_log_file='mysql-bin.000002', master_log_pos=107;
刷新日志
#mysqladmin -uroot -p'martin' flush-logs#cd /usr/local/mysql/log#ls|grep mysql-bin|grep -v indexmysql-bin.000001mysql-bin.000002mysql-bin.000003
可确定mysql-bin.000002为增量数据binlog
导入全量备份
#cd /martin/data/#mysql -uroot -p backup bin.sql#vim bin.sql
在bin.sql找到之前的delete语句,删除
mysql -uroot -p 九、确认已恢复数据
登录mysql
#mysql -uroot -p'martin' backupselect * from number;
+----+---------------------+| id | updatetime |+----+---------------------+| 1 | 2016-06-29 23:27:15 || 2 | 2016-06-29 23:27:15 || 3 | 2016-06-29 23:27:15 || 4 | 2016-06-29 23:27:15 || 5 | 2016-06-29 23:27:15 || 6 | 2016-06-29 23:27:15 || 7 | 2016-06-29 23:27:15 || 8 | 2016-06-29 23:27:15 || 9 | 2016-06-29 23:27:15 || 10 | 2016-06-29 23:27:15 || 11 | 2016-06-29 23:31:03 || 12 | 2016-06-29 23:31:03 || 13 | 2016-06-29 23:31:03 || 14 | 2016-06-29 23:31:03 || 15 | 2016-06-29 23:31:03 || 16 | 2016-06-29 23:31:03 || 17 | 2016-06-29 23:31:03 || 18 | 2016-06-29 23:31:03 || 19 | 2016-06-29 23:31:03 || 20 | 2016-06-29 23:31:03 || 21 | 2016-06-29 23:41:06 || 22 | 2016-06-29 23:41:06 || 23 | 2016-06-29 23:41:06 || 24 | 2016-06-29 23:41:06 || 25 | 2016-06-29 23:41:06 || 26 | 2016-06-29 23:41:06 || 27 | 2016-06-29 23:41:06 || 28 | 2016-06-29 23:41:06 || 29 | 2016-06-29 23:41:06 || 30 | 2016-06-29 23:41:06 |+----+---------------------+30 rows in set (0.00 sec)
恢复完成!以上就是本文的全部内容,在操作数据库时候要多加小心尽量避免误操作,如果万一遇到了,希望本文能够帮助大家。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product