欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年08月09日 17:45:22   作者:Martin  
在大家日常操作數據庫時候難免會因為“大意”而誤操作,那么誤操作后怎樣進行數據恢復呢,下面跟著小編一起來學習學習。

一、開啟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-bin
log-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.7
import MySQLdb
import time
def 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,方便恢復時操作。

四、模擬寫入增量數據

繼續(xù)執(zhí)行程序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;

七、再次寫入增量數據

執(zhí)行程序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)

八、恢復

此時發(fā)現之前的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 index
mysql-bin.000001
mysql-bin.000002
mysql-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' backup
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 |
| 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仿asp的數據庫操作類

    mysql仿asp的數據庫操作類

    本文通過實例代碼給大家介紹了mysql仿asp的數據庫操作類,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2008-04-04
  • Express連接MySQL及數據庫連接池技術實例

    Express連接MySQL及數據庫連接池技術實例

    數據庫連接池是程序啟動時建立足夠數量的數據庫連接對象,并將這些連接對象組成一個池,由程序動態(tài)地對池中的連接對象進行申請、使用和釋放,本文重點給大家介紹Express連接MySQL及數據庫連接池技術,感興趣的朋友一起看看吧
    2022-02-02
  • mysql函數拼接查詢concat函數的使用方法

    mysql函數拼接查詢concat函數的使用方法

    下面小編就為大家?guī)硪黄猰ysql函數拼接查詢concat函數的使用方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 3種高效的Tags標簽系統(tǒng)數據庫設計方案分享

    3種高效的Tags標簽系統(tǒng)數據庫設計方案分享

    這篇文章主要介紹了3種高效的Tags標簽系統(tǒng)數據庫設計方案分享,現在主流的博客、CMS系統(tǒng)都有一個標簽系統(tǒng),本文就探討它的數據庫設計方式,需要的朋友可以參考下
    2014-07-07
  • MySQL group by和left join并用解決方式

    MySQL group by和left join并用解決方式

    這篇文章主要介紹了MySQL group by和left join并用解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL常用慢查詢分析工具詳解

    MySQL常用慢查詢分析工具詳解

    這篇文章主要介紹了MySQL常用慢查詢分析工具詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • MySQL如何讓一個表中可以有多個自增列

    MySQL如何讓一個表中可以有多個自增列

    這篇文章主要介紹了MySQL如何讓一個表中可以有多個自增列,自增列可使用?auto_increment?來實現,當一個列被標識為?auto_increment?之后,在添加時如果不給此列設置任何值,或給此列設置?NULL?值時,那么它會使用自增的規(guī)則來填充此列
    2022-06-06
  • 選擇MySQL數據庫的命令以及PHP腳本下的操作方法

    選擇MySQL數據庫的命令以及PHP腳本下的操作方法

    這篇文章主要介紹了選擇MySQL數據庫的命令以及PHP腳本下的操作方法,此外文中還對MySQL的基本數據類型作了介紹,需要的朋友可以參考下
    2015-11-11
  • mysql 數據庫中my.ini的優(yōu)化 2G內存針對站多 抗壓型的設置

    mysql 數據庫中my.ini的優(yōu)化 2G內存針對站多 抗壓型的設置

    mysql數據庫中my.ini的優(yōu)化,2G內存,針對站多,抗壓型的設置.大家可以借鑒下。
    2009-08-08
  • InnoDB引擎中的事務詳解

    InnoDB引擎中的事務詳解

    這篇文章主要介紹了InnoDB引擎中的事務詳解,事務Transaction是訪問和更新數據庫的程序執(zhí)行單元;事務中可能包含一個或多個sql語句,這些語句要么都執(zhí)行,要么都不執(zhí)行,需要的朋友可以參考下
    2023-09-09

最新評論