亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql innodb的行鎖(6) --不安全語句加鎖

發布時間:2020-08-07 22:07:22 來源:ITPUB博客 閱讀:162 作者:xchui702 欄目:MySQL數據庫
一般情況下select 使用mvcc的技術,是不加行鎖的,但是對于insert ... select , create table .. select 等不安全語句,會自動對源表加共享鎖
當然是否加鎖還受到下面參數控制, 因為這個加鎖不是隔離級別的原因,而是為了復制安全。

root@sakila 11:03:59>show variables like '%unsafe%';
+--------------------------------+-------+
| Variable_name                  | Value |
+--------------------------------+-------+
| innodb_locks_unsafe_for_binlog | OFF   |
+--------------------------------+-------+
1 row in set (0.00 sec)

會話1:
root@sakila 11:02:28>insert into target select * from tab_no_index;
Query OK, 7 rows affected (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 0

會話2:
root@sakila 11:03:02>update tab_no_index set name=name where name='1';
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

*************************************************************************************
如果修改變量,則不會對上面的select 的源表加鎖,但是在statement 的復制模式下,復制會出現問題
set global innodb_locks_unsafe_for_binlog=1;
mysqlbinlog mysql-bin.000039 | more 結果分析如下: 因為記錄bin log是按提交順序記錄的,所以在執行insert ... select 語句前,已經執行了update了,而主庫是先執行insert.. select ,再執行update. 所以兩者的結果是不一樣的,所以是不安全的。

#170312 23:18:14 server id 2552763370  end_log_pos 328 CRC32 0x6262bb7c         Query   thread_id=2     exec_time=0     error_code=0
use `sakila`/*!*/;
SET TIMESTAMP=1489331894/*!*/;
update tab_no_index set name='8' where name='1'
/*!*/;
# at 328
#170312 23:18:32 server id 2552763370  end_log_pos 359 CRC32 0xebeef64e         Xid = 20
COMMIT/*!*/;
# at 359
#170312 23:17:41 server id 2552763370  end_log_pos 442 CRC32 0xae75ad5e         Query   thread_id=3     exec_time=0     error_code=0
SET TIMESTAMP=1489331861/*!*/;
BEGIN
/*!*/;
# at 442
#170312 23:17:41 server id 2552763370  end_log_pos 580 CRC32 0x3368f120         Query   thread_id=3     exec_time=0     error_code=0
SET TIMESTAMP=1489331861/*!*/;
insert into target select * from tab_no_index where name='1'
/*!*/;
# at 580
#170312 23:18:48 server id 2552763370  end_log_pos 611 CRC32 0x1b39b7d7         Xid = 19
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;


綜述:
避免上鎖又不影響復制的最優方式是:
innodb_locks_unsafe_for_binlog =1 (允許不安全的語句)
同時把
binlog_format=row
 (避免不安全的語句)



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木萨尔县| 安图县| 太白县| 阜新| 两当县| 甘泉县| 邵东县| 乐安县| 盐山县| 平安县| 石楼县| 兴国县| 昌图县| 新巴尔虎左旗| 如皋市| 镇雄县| 宁阳县| 理塘县| 容城县| 华宁县| 洛川县| 富源县| 临桂县| 鄄城县| 泗水县| 上栗县| 三河市| 威信县| 利辛县| 曲周县| 石渠县| 桦川县| 麦盖提县| 延川县| 崇阳县| 阳原县| 宜兰县| 新泰市| 吴堡县| 朝阳市| 余江县|