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)?

Foi útil?

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:

  1. Antes de fazer um INSERT, sempre emita um BEGIN; declaração. Isso desligará os autocomérsos. Você precisará fazer um COMMIT; Depois que você deseja que seus dados sejam persistidos no banco de dados.

  2. Usar autocommit=0; Toda vez que você instancia uma conexão de banco de dados.

  3. Para um ambiente global, adicione um autocommit=0 variável em seu my.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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top