Как отключить автокоммит для клиента MySQL? - PullRequest
31 голосов
/ 17 февраля 2010

У меня есть веб-приложение, написанное с предположением, что в базе данных включен автокоммит, поэтому я не хочу вносить в него какие-либо изменения. Однако вся документация, которую я могу найти, говорит только об использовании init_connect в базе данных, то есть о глобальной настройке для всех клиентских подключений.

Есть ли способ установить autocommit = 0 только при запуске mysql в командной строке Linux (без необходимости вводить его каждый раз)?

Ответы [ 7 ]

25 голосов
/ 22 февраля 2010

Возможно, лучший способ - написать скрипт, который запускает клиент командной строки mysql, а затем автоматически запускает любой SQL, который вы хотите, прежде чем он передаст вам управление.

linux поставляется с приложением под названием «ожидаем». он взаимодействует с оболочкой таким образом, чтобы имитировать нажатия клавиш. можно установить запуск mysql, подождите, пока вы введете свой пароль. выполните другие команды, такие как SET autocommit = 0;, затем перейдите в интерактивный режим, чтобы вы могли выполнить любую команду, какую захотите.

Подробнее о команде SET autocommit = 0; см. http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html

Я использую ожидаем, чтобы войти в утилиту командной строки, в моем случае она запускает ssh, подключается к удаленному серверу, запускает приложение, вводит мое имя пользователя и пароль, затем передает управление мне. спасает меня куча набрав:)

http://linux.die.net/man/1/expect

DC

Ожидайте сценарий, предоставленный Майклом Хиндсом

spawn /usr/local/mysql/bin/mysql 
expect "mysql>" 
send "set autocommit=0;\r" 
expect "mysql>" interact

Ожидайте, что это довольно сильно и может сделать жизнь намного проще, как в этом случае.

если вы хотите, чтобы скрипт выполнялся без вызова ожидаемого, используйте строку shebang

вставьте это в качестве первой строки в вашем скрипте (подсказка: используйте which expect, чтобы найти местоположение ожидаемого исполняемого файла)

#! /usr/bin/expect

затем измените разрешения вашего скрипта с помощью ..

chmod 0744 myscript

затем вызвать скрипт

./myscript

DC

20 голосов
/ 21 февраля 2010

Вы делаете это 3 разными способами:

  1. Перед тем как выполнить INSERT, всегда выполняйте оператор BEGIN;. Это отключит автокоммиты. Вам нужно будет сделать COMMIT;, как только вы захотите сохранить ваши данные в базе данных.

  2. Используйте autocommit=0; каждый раз, когда вы создаете экземпляр подключения к базе данных.

  3. Для глобальной настройки добавьте переменную autocommit=0 в файл конфигурации my.cnf в MySQL.

9 голосов
/ 31 июля 2012

Похоже, вы можете добавить его в ваш ~ / .my.cnf, но его нужно добавить в качестве аргумента флага init-command в вашем разделе [client], например:

[client]
init-command='set autocommit=0'
4 голосов
/ 18 февраля 2010

Вы имеете в виду текстовую консоль mysql? Тогда:

START TRANSACTION;
  ...
  your queries.
  ...
COMMIT;

Это то, что я рекомендую.

Однако, если вы не хотите вводить это каждый раз, когда вам нужно выполнить запрос такого рода, добавьте следующее в раздел [mysqld] вашего файла my.cnf.

init_connect='set autocommit=0'

Это установит autocommit для каждого клиента.

2 голосов
/ 27 октября 2016

Это полезно для проверки статуса автоматической фиксации;

select @@autocommit;
1 голос
/ 20 марта 2018

Для автоматической фиксации затем обязательно используйте приведенную ниже команду.Установите ниже в my.cnf файл:

    [mysqld]
    autocommit=0
0 голосов
/ 30 сентября 2016

Вместо того, чтобы автоматически отключать автокоммит во время восстановления, вы уже можете выгружать данные MySQL таким образом, чтобы все необходимые операторы были включены прямо в ваш файл SQL.

Параметр командной строки для mysqldump - --no-autocommit. Вы также можете добавить --opt, который устанавливает комбинацию других параметров для ускорения операций восстановления.

Вот пример полной командной строки mysqldump, которую я использую, содержащей --no-autocommit и --opt:

mysqldump -hlocalhost -uMyUser -p'MyPassword' --no-autocommit --opt --default-character-set=utf8 --quote-names  MyDbName  >  dump.sql

Подробнее об этих параметрах см. Справку mysqldump

...