Как отключить 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