久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql誤修改全表記錄怎么辦

共計(jì) 4337 個(gè)字符,預(yù)計(jì)需要花費(fèi) 11 分鐘才能閱讀完成。

這篇文章給大家分享的是有關(guān) mysql 誤修改全表記錄怎么辦的內(nèi)容。丸趣 TV 小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨丸趣 TV 小編過(guò)來(lái)看看吧。

#添加數(shù)據(jù)

insert into testdb1.student(id,name,class,score) value(a, a ,1,45),(2, b ,1,46),(3, c ,2,89),(4, d ,2,90),(5, e ,3,67),(6, f ,3,87),(7, g ,4,77),(8, h ,4,91);

mysql select * from testdb1.student;

+——+——+——-+——-+

| id | name | class | score |

+——+——+——-+——-+

| 1 | a | 1 | 45 |

| 2 | b | 1 | 46 |

| 3 | c | 2 | 89 |

| 4 | d | 2 | 90 |

| 5 | e | 3 | 67 |

| 6 | f | 3 | 87 |

| 7 | g | 4 | 77 |

| 8 | h | 4 | 91 |

+——+——+——-+——-+

8 rows in set (0.00 sec)

#修改數(shù)據(jù)

update student set score=100;

commit;

mysql select * from testdb1.student;

+——+——+——-+——-+

| id | name | class | score |

+——+——+——-+——-+

| 1 | a | 1 | 100 |

| 2 | b | 1 | 100 |

| 3 | c | 2 | 100 |

| 4 | d | 2 | 100 |

| 5 | e | 3 | 100 |

| 6 | f | 3 | 100 |

| 7 | g | 4 | 100 |

| 8 | h | 4 | 100 |

+——+——+——-+——-+

8 rows in set (0.00 sec)

mysql set global read_only=1

mysql show master status\G

*************************** 1. row ***************************

 File: ray-bin.000004

 Position: 1992

 Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

# at 2192 是在 binlog 日志中查到的  

[root@localhost ~]# mysqlbinlog /data/3306/logs/ray-bin.000004 -v -v -S /data/3306/soket/mysql.sock –base64-output=decode-rows | grep -A 15 student | sed -n /# at 2192/,/COMMIT/p | sed -n s\### \\p | sed s/\/\*.*\*\///g | sed s/`//g /tmp/1.txt

[root@localhost ~]# cat /tmp/1.txt

UPDATE testdb1.student

WHERE

 @1=1

 @2= a

 @3= 1

 @4=45

SET

 @1=1

 @2= a

 @3= 1

 @4=100

UPDATE testdb1.student

WHERE

 @1=2

 @2= b

 @3= 1

 @4=46

SET

 @1=2

 @2= b

 @3= 1

 @4=100

UPDATE testdb1.student

WHERE

 @1=3

 @2= c

 @3= 2

 @4=89

SET

 @1=3

 @2= c

 @3= 2

 @4=100

UPDATE testdb1.student

WHERE

 @1=4

 @2= d

 @3= 2

 @4=90

SET

 @1=4

 @2= d

 @3= 2

 @4=100

UPDATE testdb1.student

WHERE

 @1=5

 @2= e

 @3= 3

 @4=67

SET

 @1=5

 @2= e

 @3= 3

 @4=100

UPDATE testdb1.student

WHERE

 @1=6

 @2= f

 @3= 3

 @4=87

SET

 @1=6

 @2= f

 @3= 3

 @4=100

UPDATE testdb1.student

WHERE

 @1=7

 @2= g

 @3= 4

 @4=77

SET

 @1=7

 @2= g

 @3= 4

 @4=100

UPDATE testdb1.student

WHERE

 @1=8

 @2= h

 @3= 4

 @4=91

SET

 @1=8

 @2= h

 @3= 4

 @4=100

[root@localhost ~]# cat column.txt

id

name

class

score

[root@localhost ~]# cat getSQL.sh

#!/bin/bash

# by ray

iswhere=1 # 判斷循環(huán)的行的位置,1 表示在 where 后,0 表示不再 where 后

colNum=0 # 計(jì)算列數(shù),一般在 binlog 日志內(nèi)第一列為 @1, 第二列為 @2 一次類推

whereNum=0 # 判斷 where 后面字段出現(xiàn)的次數(shù),便于拼接字符串,第一次出現(xiàn)不適用都會(huì),第二次以后使用逗號(hào)拼接

setNum=0 #判斷 set 后面字段出現(xiàn)的次數(shù),便于拼接字符串,第一次出現(xiàn)不適用都會(huì),第二次以后使用逗號(hào)拼接

replaceColumn(){ # 把 @開(kāi)頭的列替換為列配置文件內(nèi)的列,安配置文件的順序執(zhí)行

 cat $1 | while read line

 do

 colNum=$[${colNum}+1]

 sed -i s/@${colNum}/${line}/g ./execSQL.sql # 替換列

 done

}

getSQL(){ # 獲取 sql

 sql1=

 sql_result=

 sql_condition=

 while read line #讀取處理過(guò)的 binlog 日志

 do

 if [[${line} =~ UPDATE ]];then # 匹配是否 update

 if [${sql1} != ];then

 echo ${sql1} ${sql_result} ${sql_condition} ./execSQL.sql # 打印 sql

 sql1=

 sql_result=

 sql_condition=

 whereNum=0

 setNum=0

 fi

 sql1=${line} # 拼接 sql 字符串,獲取 update

 elif [[${line} =~ WHERE ]];then

 sql_condition=${line} # 拼接字符串,把 binlog 日志內(nèi) where 后面內(nèi)容

 iswhere=1 # 判斷是否為 where,因?yàn)橐?where 和 set 后面的內(nèi)容互換

 elif [[${line} =~ SET ]];then

 sql_result= SET ${sql_result} #拼接字符串

 iswhere=0

 elif [[${iswhere} -eq 1 ]];then #1 為 where 后面,把 binlog 日志 where 后面的內(nèi)容拼接到 sql 的 set 后

 if [[${whereNum} -eq 0 ]];then # 判斷 where 字符串后的字符串是否一次出現(xiàn)

 sql_result=${sql_result} ${line}

 whereNum=1 # 設(shè)置為 1,表示不是第一次出現(xiàn)

 elif [[${whereNum} -eq 1 ]];then

 sql_result=${sql_result} , ${line}

 fi

 elif [[${iswhere} -eq 0 ]];then # 判斷是否為 set 后面的字符串

 if [[${setNum} -eq 0 ]];then # 判斷 set 字符串后的字符串是否一次出現(xiàn)

 sql_condition=${sql_condition} ${line}

 setNum=1 # 設(shè)置為 1,表示不是第一次出現(xiàn)

 elif [[${setNum} -eq 1 ]];then

 sql_condition=${sql_condition} and ${line}

 fi

 fi

 done $1 # 把文件用 while 循環(huán)讀取每一行

 echo ${sql1} ${sql_result} ${sql_condition} ./execSQL.sql # 最后一行退出循環(huán),所以要打印最后一行

 echo commit; ./execSQL.sql

 replaceColumn $2

}

#腳本的入口,調(diào)用函數(shù)獲取內(nèi)容

if [-e $1];then # 判斷第一個(gè)參數(shù)是否為文件

 getSQL $1 $2

else

 echo $1 is not a file!!

fi

[root@localhost ~]# bash getSQL.sh /tmp/1.txt ./column.txt

mysql select * from testdb1.student;

+——+——+——-+——-+

| id | name | class | score |

+——+——+——-+——-+

| 1 | a | 1 | 100 |

| 2 | b | 1 | 100 |

| 3 | c | 2 | 100 |

| 4 | d | 2 | 100 |

| 5 | e | 3 | 100 |

| 6 | f | 3 | 100 |

| 7 | g | 4 | 100 |

| 8 | h | 4 | 100 |

+——+——+——-+——-+

8 rows in set (0.00 sec)

[root@localhost ~]# mysql -uroot -p123456 -S /data/3306/soket/mysql.sock /root/execSQL.sql

mysql: [Warning] Using a password on the command line interface can be insecure.

mysql select * from testdb1.student;

+——+——+——-+——-+

| id | name | class | score |

+——+——+——-+——-+

| 1 | a | 1 | 45 |

| 2 | b | 1 | 46 |

| 3 | c | 2 | 89 |

| 4 | d | 2 | 90 |

| 5 | e | 3 | 67 |

| 6 | f | 3 | 87 |

| 7 | g | 4 | 77 |

| 8 | h | 4 | 91 |

+——+——+——-+——-+

8 rows in set (0.00 sec)

感謝各位的閱讀!關(guān)于“mysql 誤修改全表記錄怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-27發(fā)表,共計(jì)4337字。
轉(zhuǎn)載說(shuō)明:除特殊說(shuō)明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請(qǐng)注明出處。
評(píng)論(沒(méi)有評(píng)論)
主站蜘蛛池模板: 开阳县| 东乌| 葫芦岛市| 平塘县| 石门县| 忻州市| 濮阳市| 兴山县| 武穴市| 石台县| 乐山市| 阳信县| 松滋市| 光山县| 昭通市| 宜都市| 墨江| 同德县| 东平县| 拜城县| 洪江市| 呼伦贝尔市| 红河县| 上杭县| 陇川县| 龙江县| 沾益县| 东至县| 怀宁县| 平潭县| 阆中市| 名山县| 台南市| 汽车| 寻甸| 普安县| 城口县| 巨野县| 依兰县| 石狮市| 博客|