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