Как отключить автокоммит для клиента 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 различными способами:
прежде чем делать
INSERT
, всегда выдаетBEGIN;
заявление. Это отключит автокоммиты. Вам нужно будет сделатьCOMMIT;
после того, как вы хотите, чтобы ваши данные сохранялись в базе данных.использовать
autocommit=0;
каждый раз, когда вы создать подключение к базе данных.для глобальной настройки, добавьте
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 вручную во время восстановления вы уже можете сбросить свои данные 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