Как отключить автокоммит для клиента 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