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


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

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

7 29

7 ответов:

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

Linux поставляется с приложением под названием "expect". он взаимодействует с оболочкой таким образом, чтобы имитировать ваши ключевые удары. он может быть установлен для запуска MySQL, ждать для вас, чтобы ввести ваш пароль. выполните дальнейшие команды, такие как SET autocommit = 0;, Затем перейдите в интерактивный режим, чтобы вы могли выполнить любую команду, которую хотите.

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

Я использую expect для входа в утилиту командной строки в моем случае он запускает 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

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

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

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

#! /usr/bin/expect

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

chmod 0744 myscript

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

./myscript

DC

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

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

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

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

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

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

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

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

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

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

init_connect='set autocommit=0'

Это установило бы autocommit, чтобы быть выключенным для каждого клиента, хотя.

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

select @@autocommit;

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

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

    [mysqld]
    autocommit=0