Como faço para desligar o AutoComit para um cliente MySQL?
-
21-09-2019 - |
Pergunta
Eu tenho um aplicativo da Web que foi escrito com a suposição de que o AutoComit está ligado ao banco de dados, para que não quero fazer alterações lá. No entanto, toda a documentação que encontro só parece falar sobre o uso do init_Connect no banco de dados, ou seja, uma configuração global para todas as conexões do cliente.
Existe uma maneira de definir o AutoCommit = 0 apenas ao executar o MySQL em uma linha de comando Linux (sem precisar digitá -la todas as vezes)?
Solução
Talvez a melhor maneira seja escrever um script que inicie o cliente da linha de comando MySQL e, em seguida, execute automaticamente o SQL que desejar antes que ele entregue o controle para você.
O Linux vem com um aplicativo chamado 'espera'. Ele interage com a concha de forma a imitar seus golpes principais. Ele pode ser configurado para iniciar o MySQL, aguarde sua senha. executar outros comandos como SET autocommit = 0;
Em seguida, entre no modo interativo para que você possa executar qualquer comando desejar.
Para mais informações sobre o comando SET autocommit = 0;
Vejo.. http://dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html
Eu uso que espero fazer login em um utilitário de linha de comando No meu caso, ele inicia o SSH, conecta -se ao servidor remoto, inicia o aplicativo insere meu nome de usuário e senha e depois gira o controle para mim. me salva montes de digitação :)
http://linux.die.net/man/1/expect
DC
Espere script fornecido por Michael Hinds
spawn /usr/local/mysql/bin/mysql
expect "mysql>"
send "set autocommit=0;\r"
expect "mysql>" interact
Espere é bastante poderoso e pode facilitar muito a vida, como neste caso.
Se você quiser fazer o script funcionar sem ligar para esperar, use a linha shebang
Insira isso como a primeira linha em seu script (dica: use which expect
para encontrar a localização do seu expectativa executável)
#! /usr/bin/expect
Em seguida, altere as permissões do seu script com ..
chmod 0744 myscript
Em seguida, ligue para o script
./myscript
DC
Outras dicas
Você faz isso de três maneiras diferentes:
Antes de fazer um
INSERT
, sempre emita umBEGIN;
declaração. Isso desligará os autocomérsos. Você precisará fazer umCOMMIT;
Depois que você deseja que seus dados sejam persistidos no banco de dados.Usar
autocommit=0;
Toda vez que você instancia uma conexão de banco de dados.Para um ambiente global, adicione um
autocommit=0
variável em seumy.cnf
Arquivo de configuração no MySQL.
Parece que você pode adicioná-lo ao seu ~/.my.cnf, mas ele precisa ser adicionado como um argumento à bandeira init-command na sua seção [cliente], como assim:
[client]
init-command='set autocommit=0'
Você quer dizer o console de texto MySQL? Então:
START TRANSACTION;
...
your queries.
...
COMMIT;
É o que eu recomendo.
No entanto, se você deseja evitar digitá -lo cada vez que precisar executar esse tipo de consulta, adicione o seguinte à seção [MySQLD] do seu arquivo My.cnf.
init_connect='set autocommit=0'
Isso definiria autocommit
estar fora para todos os clientes.
Isso é útil para verificar o status da AutoComit;
select @@autocommit;
Para se comprometer automaticamente, use o comando abaixo com certeza. Defina abaixo em my.cnf
Arquivo:
[mysqld]
autocommit=0
Em vez de desligar o AutoComit off manualmente no momento da restauração, você já pode despejar seus dados MySQL de uma maneira que inclua todas as instruções necessárias diretamente no seu arquivo SQL.
O parâmetro da linha de comando para mysqldump é --no-autocommit
. Você também pode considerar adicionar --opt
que define uma combinação de outros parâmetros para acelerar as operações de restauração.
Aqui está um exemplo para uma linha de comando completa do MySqldump como eu a uso, contendo --no-autocommit
e --opt
:
mysqldump -hlocalhost -uMyUser -p'MyPassword' --no-autocommit --opt --default-character-set=utf8 --quote-names MyDbName > dump.sql
Para detalhes desses parâmetros, consulte o Referência de MySqldump