Как отключить автокоммит для клиента MySQL?
У меня есть веб-приложение, которое было написано с предположением, что autocommit включен в базе данных, поэтому я не хочу вносить какие-либо изменения. Однако вся документация, которую я могу найти, похоже, говорит только об использовании init_connect в базе данных, то есть глобальной настройки для всех клиентских подключений.
Есть ли способ установить autocommit=0 только при запуске mysql в командной строке Linux (без необходимости вводить его каждый раз)?
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
Вы делаете это тремя различными способами:
Перед выполнением операции
INSERT
всегда следует выполнить инструкциюBEGIN;
. Это будет отключить autocommits. Вам нужно будет сделатьCOMMIT;
, как только вы захотите, чтобы ваши данные были сохранены в базе данных.Используйте
autocommit=0;
каждый раз при создании экземпляра подключения к базе данных.Для глобальной настройки добавьте переменную
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
, чтобы быть выключенным для каждого клиента, хотя.
Вместо того, чтобы отключать автокоммит вручную во время восстановления, вы уже можете сбросить свои данные 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