内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

mysql回滾腳本怎么寫(xiě),mysql的回滾

mysql如何快速回滾

我們經(jīng)常會(huì)遇到操作一張大表,發(fā)現(xiàn)操作時(shí)間過(guò)長(zhǎng)或影響在線(xiàn)業(yè)務(wù)了,想要回退大表操作的場(chǎng)景。在我們停止大表操作之后,等待回滾是一個(gè)很漫長(zhǎng)的過(guò)程,盡管你可能對(duì)知道一些縮短時(shí)間的方法,處于對(duì)生產(chǎn)環(huán)境數(shù)據(jù)完整性的敬畏,也會(huì)選擇不做介入。最終選擇不作為的原因大多源于對(duì)操作影響的不確定性。實(shí)踐出真知,下面針對(duì)兩種主要提升事務(wù)回滾速度的方式進(jìn)行驗(yàn)證,一種是提升操作可用內(nèi)存空間,一種是通過(guò)停實(shí)例,禁用 redo 回滾方式進(jìn)行進(jìn)行驗(yàn)證。

成都創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、平潭網(wǎng)絡(luò)推廣、成都微信小程序、平潭網(wǎng)絡(luò)營(yíng)銷(xiāo)、平潭企業(yè)策劃、平潭品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供平潭建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):18982081108,官方網(wǎng)址:m.rwnh.cn

仔細(xì)閱讀過(guò)官方手冊(cè)的同學(xué),一定留意到了對(duì)于提升大事務(wù)回滾效率,官方提供了兩種方法:一是增加 innodb_buffer_pool_size 參數(shù)大小,二是合理利用 innodb_force_recovery=3 參數(shù),跳過(guò)事務(wù)回滾過(guò)程。第一種方式比較溫和,innodb_buffer_pool_size 參數(shù)是可以動(dòng)態(tài)調(diào)整的,可行性也較高。第二種方式相較之下較暴力,但效果較好。

兩種方式各有自己的優(yōu)點(diǎn),第一種方式對(duì)線(xiàn)上業(yè)務(wù)系統(tǒng)影響較小,不會(huì)中斷在線(xiàn)業(yè)務(wù)。第二種方式效果更顯著,會(huì)短暫影響業(yè)務(wù)連續(xù),回滾所有沒(méi)有提交的事務(wù)。

mysql rollback怎么用

好像不支持事務(wù)回滾

mysql

Max版支持

mysql_query('BEGIN');//開(kāi)始事務(wù)

mysql_query('..........');//中間執(zhí)行其他sql語(yǔ)句

mysql_query('COMMIT');//成功后提交事務(wù)

//mysql_query('ROLLBACK');//失敗后回滾

上面不是php代碼嗎

就是用mysql_query執(zhí)行而已

在當(dāng)前mysql中雖然出現(xiàn)了事務(wù)的支持,但它還很不成熟,所以,呵呵,先觀(guān)望事務(wù)吧,采取其他手段達(dá)到事務(wù)的效果

比如你想刪除或更新一些記錄,你可以創(chuàng)建一個(gè)臨時(shí)表或者使用預(yù)先建立的備份表,將要將要操作的數(shù)據(jù)備份下來(lái),當(dāng)其他操作失敗時(shí)將這些數(shù)據(jù)恢復(fù)回去。當(dāng)然實(shí)際情況可能更復(fù)雜一些。這樣做看起來(lái)很麻煩,而且效率值得懷疑,不過(guò)需要事務(wù)處理的地方應(yīng)該不會(huì)很多,所以麻煩一次兩次還是可以忍受的。

事務(wù)處理本身就不是一個(gè)高效的、百分百安全的手段,我們完全可以通過(guò)優(yōu)化表的結(jié)構(gòu)、編寫(xiě)有效的腳本而避免使用事務(wù)。關(guān)注我也關(guān)注

mysql命令行下怎樣實(shí)現(xiàn)數(shù)據(jù)的回滾操作

當(dāng)啟動(dòng)Binlog后,事務(wù)會(huì)產(chǎn)生Binlog Event,這些Event被看做事務(wù)數(shù)據(jù)的一部分。因此要保證事務(wù)的Binlog Event和InnoDB引擎中的數(shù)據(jù)的一致性。所以帶Binlog的CrashSafe要求MySQL宕機(jī)重啟后能夠保證:

- 所有已經(jīng)提交的事務(wù)的數(shù)據(jù)仍然存在。

- 所有沒(méi)有提交的事務(wù)的數(shù)據(jù)自動(dòng)回滾。

- 所有已經(jīng)提交了的事務(wù)的Binlog Event也仍然存在。

- 所有沒(méi)有提交事務(wù)沒(méi)有記錄Binlog Event。

這些要求很好理解,如果重啟后數(shù)據(jù)還在,但是Binlog Event沒(méi)有了,就沒(méi)辦法復(fù)制到其他節(jié)點(diǎn)上了。如果重啟后,數(shù)據(jù)沒(méi)了,但是Binlog Event還在,那么不存在的數(shù)據(jù)就會(huì)被復(fù)制到其他節(jié)點(diǎn)上,從而導(dǎo)致主從的不一致。

為了保證帶Binlog的CrashSafe,MySQL內(nèi)部使用的兩階段提交(Two Phase Commit)。

2 - MySQL的Two Phase Commit(2PC)

在開(kāi)啟Binlog后,MySQL內(nèi)部會(huì)自動(dòng)將普通事務(wù)當(dāng)做一個(gè)XA事務(wù)來(lái)處理:

- 自動(dòng)為每個(gè)事務(wù)分配一個(gè)唯一的ID

- COMMIT會(huì)被自動(dòng)的分成Prepare和Commit兩個(gè)階段。

- Binlog會(huì)被當(dāng)做事務(wù)協(xié)調(diào)者(Transaction Coordinator),Binlog Event會(huì)被當(dāng)做協(xié)調(diào)者日志。

想了解2PC,可以參考文檔:【?!?/p>

- 分布式事務(wù)ID(XID)

使用2PC時(shí),MySQL會(huì)自動(dòng)的為每一個(gè)事務(wù)分配一個(gè)ID,叫XID。XID是唯一的,每個(gè)事務(wù)的XID都不相同。XID會(huì)分別被Binlog和InnoDB記入日志中,供恢復(fù)時(shí)使用。MySQ內(nèi)部的XID由三部分組成:

- 前綴部分

前綴部分是字符串"MySQLXid"

- Server ID部分

當(dāng)前MySQL的server_id

- query_id部分

為了保證XID的的唯一性,數(shù)字部分使用了query_id。MySQL內(nèi)部會(huì)自動(dòng)的為每一個(gè)語(yǔ)句分配一個(gè)query_id,全局唯一。

參考代碼:sql/xa。h的struct xid_t結(jié)構(gòu)。

- 事務(wù)的協(xié)調(diào)者Binlog

Binlog在2PC中充當(dāng)了事務(wù)的協(xié)調(diào)者(Transaction Coordinator)。由Binlog來(lái)通知InnoDB引擎來(lái)執(zhí)行prepare,commit或者rollback的步驟。事務(wù)提交的整個(gè)過(guò)程如下:

1. 協(xié)調(diào)者準(zhǔn)備階段(Prepare Phase)

告訴引擎做Prepare,InnoDB更改事務(wù)狀態(tài),并將Redo Log刷入磁盤(pán)。

2. 協(xié)調(diào)者提交階段(Commit Phase)

2.1 記錄協(xié)調(diào)者日志,即Binlog日志。

2.2 告訴引擎做commit。

注意:記錄Binlog是在InnoDB引擎Prepare(即Redo Log寫(xiě)入磁盤(pán))之后,這點(diǎn)至關(guān)重要。

在MySQ的代碼中將協(xié)調(diào)者叫做tc_log。在MySQL啟動(dòng)時(shí),tc_log將被初始化為mysql_bin_log對(duì)象。參考sql/binlog.cc中的init_server_components():

if (opt_bin_log) tc_log= mysql_bin_log;

而在事務(wù)提交時(shí),會(huì)依次執(zhí)行:

tc_log-prepare();

tc_log-commit();

參考代碼:sql/binlog.cc中的ha_commit_trans()。當(dāng)mysql_bin_log是tc_log時(shí),prepare和commit的代碼在sql/binlog.cc中:

MYSQL_BIN_LOG::prepare();

MYSQL_BIN_LOG::commit();

-協(xié)調(diào)者日志Xid_log_event

作為協(xié)調(diào)者,Binlog需要將事務(wù)的XID記入日志,供恢復(fù)時(shí)使用。Xid_log_event有以下幾個(gè)特點(diǎn):

- 僅記錄query_id

因?yàn)榍熬Y部分不變,server_id已經(jīng)記錄在Event Header中,Xid_log_event中只記錄query_id部分。

- 標(biāo)志事務(wù)的結(jié)束

在Binlog中相當(dāng)于一個(gè)事務(wù)的COMMIT語(yǔ)句。

一個(gè)事務(wù)在Binlog中看起來(lái)時(shí)這樣的:

Query_log_event("BEGIN");DML產(chǎn)生的events; Xid_log_event;

- DDL沒(méi)有BEGIN,也沒(méi)有Xid_log_event 。

- 僅InnoDB的DML會(huì)產(chǎn)生Xid_log_event

因?yàn)镸yISAM不支持2PC所以不能用Xid_log_event ,但會(huì)有COMMIT Event。

Query_log_event("BEGIN");DML產(chǎn)生的events;Query_log_event("COMMIT");

問(wèn)題:Query_log_event("COMMIT")和Xid_log_event 有不同的影響嗎?

- Xid_log_event 中的Xid可以幫助master實(shí)現(xiàn)CrashSafe。

- Slave的CrashSafe不依賴(lài)Xid_log_event

事務(wù)在Slave上重做時(shí),會(huì)重新產(chǎn)生XID。所以Slave服務(wù)器的CrashSafe并不依賴(lài)于Xid_log_event 。Xid_log_event 和Query_log_event("COMMIT"),只是作為事務(wù)的結(jié)尾,告訴Slave Applier去提交這個(gè)事務(wù)。因此二者在Slave上的影響是一樣的。

3 - 恢復(fù)(Recovery)

這個(gè)機(jī)制是如何保證MySQL的CrashSafe的呢,我們來(lái)分析一下。這里我們假設(shè)用戶(hù)設(shè)置了以下參數(shù)來(lái)保證可靠性:

- 恢復(fù)前事務(wù)的狀態(tài)

在恢復(fù)開(kāi)始前事務(wù)有以下幾種狀態(tài):

- InnoDB中已經(jīng)提交

根據(jù)前面2PC的過(guò)程,可知Binlog中也一定記錄了該事務(wù)的的Events。所以這種事務(wù)是一致的不需要處理。

- InnoDB中是prepared狀態(tài),Binlog中有該事務(wù)的Events。

需要通知InnoDB提交這些事務(wù)。

- InnoDB中是prepared狀態(tài),Binlog中沒(méi)有該事務(wù)的Events。

因?yàn)锽inlog還沒(méi)記錄,需要通知InnoDB回滾這些事務(wù)。

- Before InnoDB Prepare

事務(wù)可能還沒(méi)執(zhí)行完,因此InnoDB中的狀態(tài)還沒(méi)有prepare。根據(jù)2PC的過(guò)程,Binlog中也沒(méi)有該事務(wù)的events。 需要通知InnoDB回滾這些事務(wù)。

- 恢復(fù)過(guò)程

從上面的事務(wù)狀態(tài)可以看出:恢復(fù)時(shí)事務(wù)要提交還是回滾,是由Binlog來(lái)決定的。

- 事務(wù)的Xid_log_event 存在,就要提交。

- 事務(wù)的Xid_log_event 不存在,就要回滾。

恢復(fù)的過(guò)程非常簡(jiǎn)單:

- 從Binlog中讀出所有的Xid_log_event

- 告訴InnoDB提交這些XID的事務(wù)

- InnoDB回滾其它的事務(wù)

求救數(shù)據(jù)庫(kù)回滾腳本怎么寫(xiě)

CREATE PROC [dbo].[notice_Delete] --- 同時(shí)刪除該通知書(shū)和對(duì)應(yīng)的節(jié)點(diǎn)

@tbl VARCHAR(30),

@pid INT

AS

BEGIN

DECLARE @tblname VARCHAR(30) ;

DECLARE @sql VARCHAR(1000) ;

SET @tblname = @tbl

SET @sql = 'delete ' + @tblname + ' where id ='

+ CONVERT(VARCHAR(10), @pid)

BEGIN TRAN --開(kāi)始事務(wù)

EXEC ( @sql

)

IF ( @@rowcount = 0 ) --執(zhí)行結(jié)果影響行數(shù)為0

BEGIN

ROLLBACK TRAN --回滾

END

ELSE

BEGIN

DELETE FROM tbl_treenotice

WHERE purposeid = @pid

IF ( @@rowcount = 0 ) --執(zhí)行結(jié)果影響行數(shù)為0

BEGIN

ROLLBACK TRAN --回滾

END

ELSE

BEGIN

COMMIT TRAN --提交事務(wù)

END

END

END

標(biāo)題名稱(chēng):mysql回滾腳本怎么寫(xiě),mysql的回滾
URL分享:http://m.rwnh.cn/article22/dsdhhjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈網(wǎng)站策劃、Google搜索引擎優(yōu)化、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
华蓥市| 安吉县| 南澳县| 高青县| 博兴县| 高雄县| 诸暨市| 商洛市| 博爱县| 卫辉市| 齐齐哈尔市| 周口市| 安平县| 宝坻区| 青州市| 黄梅县| 全椒县| 油尖旺区| 长兴县| 荆门市| 南和县| 增城市| 汝城县| 广水市| 满洲里市| 宜兰县| 武强县| 正定县| 永川市| 鲜城| 兖州市| 凤城市| 大安市| 大荔县| 龙游县| 邳州市| 巴中市| 北川| 东乡族自治县| 新乡市| 固阳县|