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

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

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

7 ответов


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

Linux поставляется с приложением под названием "ожидать". он взаимодействует с оболочкой таким образом, чтобы имитировать нажатие клавиш. его можно настроить на запуск 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

ожидать сценарий предоставлен Michael Hinds

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

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

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

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

#! /usr/bin/expect

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

chmod 0744 myscript

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

./myscript

DC


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

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

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

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


похоже, вы можете добавить его в свой~/.мой.cnf, но его нужно добавить в качестве аргумента к флагу init-command в разделе [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;

вместо переключения 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


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

    [mysqld]
    autocommit=0