Mysql

我可以為 SQL_SAFE_UPDATES 和 INNODB_FLUSH_LOG_AT_TRX_COMMIT 設置我的 InnoDB MySQL 伺服器會話狀態嗎?

  • February 6, 2016

我可以為SQL_SAFE_UPDATESINNODB_FLUSH_LOG_AT_TRX_COMMIT使用 MySQL Workbench 的 SQL Query 視窗或 MySQL Connection Navigator 而不是在 Ubuntu Linux 15.10 上的 ac# Mono、.NET 4.5 MySQLCommand 建構子中設置我的 InnoDB MySQL 伺服器會話狀態嗎?

如果沒有,我可以設置我的 InnoDB MySQL 伺服器會話狀態SQL_SAFE_UPDATESINNODB_FLUSH_LOG_AT_TRX_COMMIT使用 MySQL 伺服器啟動腳本嗎?它位於 Ubuntu Linux 15.10 的什麼位置,我應該在 MySQL 伺服器啟動腳本中放入哪些 mysql 命令行參數?

這是我希望在 SQL 查詢視窗中執行的 SQL 腳本:

-- Current Database: `scdvr`
--

CREATE DATABASE IF NOT EXISTS `scdvr` 

USE `scdvr`;

SET SQL_SAFE_UPDATES = 0;

SET GLOBAL INNODB_FLUSH_LOG_AT_TRX_COMMIT = 2;
--
-- Table structure for table `ActionSequence`
--

DROP TABLE IF EXISTS `ActionSequence`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ActionSequence` (
 `ASID` varchar(64) NOT NULL,
 `EAID` varchar(64) NOT NULL,
 `SequenceOrder` smallint(6) NOT NULL DEFAULT '0',
 `Enabled` tinyint(1) NOT NULL DEFAULT '1',
 `Toast` tinyint(1) NOT NULL DEFAULT '0',
 `SendToCentral` tinyint(1) NOT NULL DEFAULT '0',
 `LogAsEvent` tinyint(1) NOT NULL DEFAULT '0',
 `CameraGroupID` int(11) DEFAULT NULL,
 `AudioAlertFile` varchar(800) DEFAULT NULL,
 `EmailAddresses` varchar(1500) DEFAULT NULL,
 PRIMARY KEY (`ASID`),
 UNIQUE KEY `ASID` (`ASID`),
 UNIQUE KEY `EAID` (`EAID`),
 KEY `IX_ActionSequence_EAID` (`EAID`),
 KEY `FK_ActionSequence_CameraGroups` (`CameraGroupID`),
 CONSTRAINT `FK_ActionSequence_CameraGroups` FOREIGN KEY (`CameraGroupID`) REFERENCES `CameraGroups` (`CameraGroupID`) ON DELETE SET NULL ON UPDATE NO ACTION,
 CONSTRAINT `FK_ActionSequence_EventAction` FOREIGN KEY (`EAID`) REFERENCES `EventAction` (`EAID`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

你執行的是什麼版本? 5.6 doc給出了詳細資訊:

innodb_flush_log_at_trx_commit可以設置 (1) 在命令行上,(2) inmy.cnf或 (3) via SET GLOBAL

sql_safe_updates只能通過SET SESSION或設置SET GLOBAL

請注意,SET GLOBAL這不會影響目前連接的任何人(包括您自己)。它將影響稍後連接的任何人,但在下次關閉 mysqld 之前。

my.cnf影響下次重新啟動後連接的使用者。

您的問題詢問如何設置它們,但沒有說明最終目標是什麼,所以我不能推荐一種特定的方法。(你關心 Workbench 嗎?你的 C# 連接?其他目前連接?未來的連接?什麼?)

我不知道 Workbench 是否在動作之間重新連接。它可能會。這意味著SET SESSION可能不會有任何影響。

更新(基於對問題的更新)

SET GLOBAL INNODB_FLUSH_LOG_AT_TRX_COMMIT = 2;
Note: that SET will affect other users.
Now disconnect and reconnect.
SET SQL_SAFE_UPDATES = 0;
and do the rest of your task.

但是……這些設置都不會影響CREATE TABLE. 我假設你會繼續做INSERTsUPDATEs

旁注:這兩個索引是多餘的,應該刪除:

UNIQUE KEY `ASID` (`ASID`),
KEY `IX_ActionSequence_EAID` (`EAID`),

一個PRIMARY KEY是一個UNIQUE KEY是一個KEY

為什麼兩者都有ASIDEAID?兩者都是UNIQUE;兩者都是VARCHAR(64);要麼是PRIMARY KEY.

引用自:https://dba.stackexchange.com/questions/128485