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

StackOverflow https://stackoverflow.com/questions/2280465

  •  21-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

ОКРУГ КОЛУМБИЯ

Ожидайте сценарий, предоставленный Майклом Хиндсом.

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

ожидание довольно мощное и может значительно облегчить жизнь, как в этом случае.

если вы хотите запустить скрипт без вызова ожидаемого, используйте строку shebang

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

#! /usr/bin/expect

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

chmod 0744 myscript

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

./myscript

ОКРУГ КОЛУМБИЯ

Другие советы

Вы делаете это тремя разными способами:

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

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

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

Похоже, вы можете добавить его в свой ~/.my.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 хотя для каждого клиента он отключен.

Это полезно для проверки статуса автофиксации;

select @@autocommit;

Для отключения автоматической фиксации обязательно используйте приведенную ниже команду.Установить ниже в my.cnf файл:

    [mysqld]
    autocommit=0

Вместо того, чтобы вручную отключать автофиксацию во время восстановления, вы уже можете выгрузить данные 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top