Как отключить autocommit для клиента MySQL?

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

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

Ответ 1

Возможно, лучший способ - написать script, который запускает клиент командной строки 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

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

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

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

если вы хотите запустить script без вызова, используйте строку shebang

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

#! /usr/bin/expect

затем измените разрешения вашего script на..

chmod 0744 myscript

затем вызовите script

./myscript

DC

Ответ 2

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

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

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

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

Ответ 3

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

[client]
init-command='set autocommit=0'

Ответ 4

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

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

Я рекомендую.

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

init_connect='set autocommit=0'

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

Ответ 5

Это полезно для проверки состояния autocommit;

select @@autocommit;

Ответ 6

Вместо того, чтобы автоматически отключать автоматическую сборку во время восстановления, вы уже можете сбросить данные 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