国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

詳解MySQL誤操作后怎樣進行數據恢復

2024-07-24 13:10:12
字體:
來源:轉載
供稿:網友

一、開啟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 < number_2016-06-29.sql#cp /usr/local/mysql/log/mysql-bin.000002 /martin/data/#mysqlbinlog mysql-bin.000002 >bin.sql#vim bin.sql

在bin.sql找到之前的delete語句,刪除

mysql -uroot -p <bin.sql

九、確認已恢復數據

登錄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)

恢復完成!以上就是本文的全部內容,在操作數據庫時候要多加小心盡量避免誤操作,如果萬一遇到了,希望本文能夠幫助大家。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉环县| 雅江县| 安化县| 枣庄市| 鹤岗市| 象州县| 巨野县| 宁蒗| 防城港市| 香河县| 桐城市| 内乡县| 和田县| 万山特区| 曲周县| 富顺县| 交口县| 祁东县| 丘北县| 东安县| 南京市| 阿拉尔市| 大关县| 观塘区| 青岛市| 顺昌县| 舞阳县| 南川市| 页游| 同江市| 玛纳斯县| 大方县| 扎囊县| 宕昌县| 宜昌市| 张家口市| 宜黄县| 武山县| 安乡县| 盐津县| 天等县|