1. 程式人生 > >mysql資料庫更新錯誤進行恢復

mysql資料庫更新錯誤進行恢復

MySql資料庫恢復
1、 系統說明:
資料庫版本:MySql5.6.34
作業系統:CentOS release 6.8 (Final)
資料庫編碼:utf8
資料庫故障描述:測試庫中更新某個欄位,但是沒有加where 條件,導致某個列全部更新為同一值。
select * from test
-> ;
+—-+———–+
| id | name |
+—-+———–+
| 1 | 孫立人 |
| 2 | 薛嶽 |
| 3 | 李宗仁 |
| 4 | 林彪 |
| 5 | 白崇禧 |
| 6 | 廖耀湘 |
| 7 | 巴頓 |
| 8 | 蔣介石 |
| 9 | 國民黨 |
| 10 | 胡適 |
+—-+———–+
10 rows in set (0.00 sec)

update test set name =’毛澤東’;
Query OK, 10 rows affected (0.01 sec)
Rows matched: 10 Changed: 10 Warnings: 0

mysql> select * from test;
+—-+———–+
| id | name |
+—-+———–+
| 1 | 毛澤東 |
| 2 | 毛澤東 |
| 3 | 毛澤東 |
| 4 | 毛澤東 |
| 5 | 毛澤東 |
| 6 | 毛澤東 |
| 7 | 毛澤東 |
| 8 | 毛澤東 |
| 9 | 毛澤東 |
| 10 | 毛澤東 |
+—-+———–+
10 rows in set (0.00 sec)
2、 檢視binlog日誌是否開啟:
在my.cnf中的[mysqld]域中
看到已經開啟日誌:

[mysqld]

Remove leading # and set to the amount of RAM for the most important data

cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

innodb_buffer_pool_size = 128M

Remove leading # to turn on a very important data integrity option: logging

changes to the binary log between backups.

log_bin

log_bin=mysqlbin_oldboy
3、 檢視資料庫存放位置中的日誌檔案:
cd /data/mysql
-rw-rw—-. 1 mysql mysql 56 1月 20 00:14 auto.cnf
-rw-r–r–. 1 root root 4412 2月 8 16:05 bintest.sql
-rw-rw—-. 1 mysql mysql 12582912 2月 8 16:06 ibdata1
-rw-rw—-. 1 mysql mysql 50331648 2月 8 16:06 ib_logfile0
-rw-rw—-. 1 mysql mysql 50331648 1月 20 00:13 ib_logfile1
drwx——. 2 mysql mysql 4096 1月 20 00:14 mysql
-rw-rw—-. 1 mysql mysql 3068 2月 8 16:06 mysqlbin_oldboy.000001
-rw-rw—-. 1 mysql mysql 25 2月 8 00:45 mysqlbin_oldboy.index
srwxrwxrwx. 1 mysql mysql 0 2月 8 00:45 mysql.sock
drwx——. 2 mysql mysql 4096 2月 7 22:58 oldboy
drwx——. 2 mysql mysql 4096 2月 7 22:39 oldgirl
drwx——. 2 mysql mysql 4096 1月 20 00:14 performance_schema
drwx——. 2 mysql mysql 4096 2月 8 00:17 test
-rw-r—–. 1 mysql root 44363 2月 8 15:42 web1.err
-rw-rw—-. 1 mysql mysql 7 2月 8 00:45 web1.pid

標紅地方就是我們要使用的日誌檔案。
使用mysqlbinlog命令把mysqlbin_oldboy.000001轉換成sql檔案,
mysqlbinlog -d test mysqlbin_oldboy.000001 >bin.sql
說明:-d 指定資料庫
[[email protected] mysql]# ll
總用量 110696
-rw-rw—-. 1 mysql mysql 56 1月 20 00:14 auto.cnf
-rw-r–r–. 1 root root 7707 2月 8 16:28 bin.sql
-rw-r–r–. 1 root root 4412 2月 8 16:05 bintest.sql
-rw-rw—-. 1 mysql mysql 12582912 2月 8 16:25 ibdata1
-rw-rw—-. 1 mysql mysql 50331648 2月 8 16:25 ib_logfile0
-rw-rw—-. 1 mysql mysql 50331648 1月 20 00:13 ib_logfile1
drwx——. 2 mysql mysql 4096 1月 23 22:50 mydx
drwx——. 2 mysql mysql 4096 1月 20 00:14 mysql
-rw-rw—-. 1 mysql mysql 3285 2月 8 16:25 mysqlbin_oldboy.000001
-rw-rw—-. 1 mysql mysql 25 2月 8 00:45 mysqlbin_oldboy.index
srwxrwxrwx. 1 mysql mysql 0 2月 8 00:45 mysql.sock
drwx——. 2 mysql mysql 4096 2月 7 22:58 oldboy
drwx——. 2 mysql mysql 4096 2月 7 22:39 oldgirl
drwx——. 2 mysql mysql 4096 1月 20 00:14 performance_schema
drwx——. 2 mysql mysql 4096 2月 8 00:17 test
-rw-r—–. 1 mysql root 44363 2月 8 15:42 web1.err
-rw-rw—-. 1 mysql mysql 7 2月 8 00:45 web1.pid

編輯bin.sql檔案
vim bin.sql
# at 3147

170208 16:25:52 server id 1 end_log_pos 3254 CRC32 0xa4ab5836 Query thread_id=2 exec_time=0 error_code=0

SET TIMESTAMP=1486542352/!/;

**update test set name ='毛澤東'  刪除這一行**

/!/;

at 3254

然後進行恢復:
[[email protected] mysql]# mysql -uroot -p test -e “select * from test;”
Enter password:
+—-+———–+
| id | name |
+—-+———–+
| 1 | 毛澤東 |
| 2 | 毛澤東 |
| 3 | 毛澤東 |
| 4 | 毛澤東 |
| 5 | 毛澤東 |
| 6 | 毛澤東 |
| 7 | 巴頓 |
| 8 | 蔣介石 |
| 9 | 國民黨 |
| 10 | 胡適 |
+—-+———–+

之所以看到1-6還是毛澤東,那是因為我之前沒有開啟binlog日誌,現在看到mysql開啟日誌的重要性了吧!

總結:
mysql資料更新的時候一定要帶上where條件,一定要在測試庫上測試成功之後再進行操作,資料是一個公司的最重要的檔案,請一定要重視。

相關推薦

mysql資料庫更新錯誤進行恢復

MySql資料庫恢復 1、 系統說明: 資料庫版本:MySql5.6.34 作業系統:CentOS release 6.8 (Final) 資料庫編碼:utf8 資料庫故障描述:測試庫中更新某個欄位,但是沒有加where 條件,導致某個列全部更新為同

MySQL 資料庫增量備份與恢復資料命令實戰

1. 備份單個數據庫練習 mysqldump 命令多種引數的使用 1.1 調整 MySQL 客戶端及服務端字符集為建庫建表時預設的 latin1,避免備份時的亂碼問題 [[email protected] ~]# vi /etc/my.cnf [[email protected] ~

mysql資料庫資料備份與恢復

1、通過物理拷貝備份與恢復          對MyISAM引擎的表來說:如果當前此表在拷貝過程中沒有任何寫操作時,可以直接拷貝,對單張表拷貝時只需把把表相關的三個以.frm,.MYD,.MYI結尾的檔案拷貝到另外的

mysql資料庫叢集的故障恢復

問題:伺服器宕機之後資料庫無法啟動(資料庫檔案損壞,非正常重啟導致的檔案損壞) 描述:資料庫是mycat+mysql的讀寫分離叢集 解決方式 尋找問題的過程 伺服器宕機了之後,重啟全部的mysql,mycat,keepalived,haproxy。然後通過虛擬ip訪問

Linux中MySql資料庫的備份與恢復

1、登入資料庫,並檢視已有資料庫(以root使用者登入密碼123) 2、在test下建立一個students表格(可省略) 3、為test備份(備份到當前路徑) 4、我們將原資料庫刪除並檢視資料庫是否刪除成功 5、恢復資料載入備份資料庫(備份

mysql 遠端連線 mySql資料庫10061錯誤問題

安裝完mysql後,此時只是本機訪問mysql,其他的任何機器都是無法訪問的,Navicat for mysql更是無法使用。 在服務端MySQL資料夾下找到my.ini檔案。修改bind-address=127.0.0.1 為 bind-address=0.0.0.0

MySQL 資料庫 1129錯誤

錯誤:Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 原因:   同一個ip在短時間內產生太多(超過mysql資料庫max_connect

loadrunner 連線mysql資料庫獲取資料進行引數化

  要使用loadrunner連線mysql,取資料庫中的資料進行引數,需要先安裝mysql 驅動。可在網上下載。 以下是loadrunner上連線mysql資料庫的配置: 1、選擇要替換為引數的內容,右鍵->彈出面板->選擇replace with a parameter。

在jsp中使用JDBC連線mysql資料庫出現錯誤

       這個問題又浪費了我一晚上的時間,不過值得了,終於還是讓我連上了mysql資料庫。並通過tomcat伺服器查詢到了資料庫裡的檔案資訊。所以可以往後面繼續前進了,值得了。        

diango連線MySQL資料庫常見錯誤解析

連線步驟 首先,如果我們要用django連線資料庫,大體上可分為三步: 在settings中的INSTALLED_APPS裡註冊我們的專案 INSTALLED_APPS = [ ... 'user.apps.UserConfig', .

.mysql 資料庫匯入錯誤:40101 SET @
Java備份mysql資料庫錯誤總結

今天給專案加了個數據庫自動備份功能,免得以後都要用工具手動備份挺麻煩的。沒用做過相關的,於是上網找下這種的一些解決方案,發現大都大同小異,都是使用Runtime.getRuntime().exec(command),引數傳入的是mysql的備份命令,用的是mysql自帶的

Django 操作Mysql資料庫 對錶進行增刪改查

首先說明:以下方法都是根據表已有的欄位新增資料,若想新增欄位,則需在類裡面新建靜態欄位, 可參考Django 操作資料庫建表  ,增刪改查在views.py 操作, 建表和欄位在models.py 操作 1、首先在 models.py 裡定義 任意 1個 模型類 本人定義 Asset,可自動生成對應的表 f

使用Java實現Mysql資料庫的備份與恢復

廢話不多說,直接上程式碼,如下示例: public class DatabaseUtil { public static void main(String[] args) throws Exception { //測試備份 Stri

Java 下實現對mysql資料庫的備份和恢復

在java裡面使用 Java.lang.Runtime 執行系統系統執行環境裡面的命令,從而使用mysql自帶的備份及恢復工具達到對資料庫的備份和恢復package org.hinsteny.util; import java.io.File; import java.i

mysql資料庫,使用mybatis進行批量更新

環境: db:mysql5.6.22 mybatis:3.4.5 動態拼接成: update xx set xx=xx; update xx set xx=xx; update xx set xx=xx; 這種形式的去進行批量更新操作 注:使用這種方式需要在jdbc:m

MyBatis中進行批量更新(MySQL資料庫)

一、簡介 在程式開發過程中,往往會遇到需要更新一批資料(批量更新)的情況,這種情況通常有兩種方法進行解決。這兩種方法各有優點與缺點,這就需要我們根據實際業務需要進行取捨。 二、操作 1、逐條更新(不推薦) 直接在程式上使用迴圈對資料庫進行資料更新

如何使用救援模式進行恢復錯誤刪除的程序或者庫文件所以以來的共享庫

光盤 測試 過程 tin 自用 term 讀寫 sha 生產 1.為了實驗先進行刪除。。例如。。ls的依賴庫是。。我們把。libacl.so.1進行刪除了。在使用ls就會進行相應的報錯 2.重啟系統。在載入中讀條中 esc (註意 只能點一次。點多了。進入救援模式的選

恢復 MySQL 資料庫人為誤操作丟失的資料

1. 全量備份與增量備份理論基礎 1.1 全量備份 全量資料就是資料庫中的所有資料,全量備份就是把資料庫中所有的資料進行備份。 1.2 增量備份 增量資料就是從上次全量備份之後,到下一次全備之前時間段更新的新資料。對於 MySQL 來說,binlog 日誌就是 MySQL 的增量資料。 1.3 按天

mysql 操作資料庫(備份與恢復

一、直接把建立資料庫的語句放到sql 檔案中: php 寫法: <?php    $mysql_port = get_mysql_port();   $cmd = US_MYSQL_BIN."/mysql.exe --port=".