Pregunta

Tengo una aplicación web que ha sido escrito con el supuesto de que el compromiso automático está activada en la base de datos, por lo que no quiero hacer ningún cambio allí. Sin embargo toda la documentación ido solo parece hablar sobre el uso de init_connect en la base de datos, es decir, una configuración global para todas las conexiones de cliente.

¿Hay una manera de establecer el compromiso automático = 0 para cuando se ejecuta mysql en una línea de comandos de Linux (sin tener que escribir en cada tiempo)?

¿Fue útil?

Solución

Tal vez la mejor manera es escribir un script que inicia el cliente de línea de comandos mysql y luego automáticamente se ejecuta SQL lo que quiere antes de que entregue el control para usted.

Linux viene con una aplicación llamada 'esperar'. interactúa con la cáscara de una manera tal que imitan sus pulsaciones de teclas. se puede configurar para iniciar MySQL, esperar a que introduzca su contraseña. ejecutar otros comandos tales como SET autocommit = 0; Entonces entra en modo interactivo para que pueda ejecutar cualquier comando que desee.

Para más información sobre el comando SET autocommit = 0; ver .. http : //dev.mysql.com/doc/refman/5.0/en/innodb-transaction-model.html

Yo uso esperar para conectarse a una utilidad de línea de comandos en mi caso se inicia ssh, se conecta al servidor remoto, se inicia la aplicación entra en mi nombre de usuario y contraseña a continuación, vuelve el control a mí. me ahorra un montón de mecanografía:)

http://linux.die.net/man/1/expect

CC

Esperar secuencia de comandos proporcionada por Michael Hinds

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

esperar es muy potente y puede hacer la vida mucho más fácil, como en este caso.

si quiere hacer funcionar el script sin llamar a esperar utilizar la línea shebang

insertar esta como la primera línea en el script (pista: el uso which expect para encontrar la ubicación de su esperar ejecutable)

#! /usr/bin/expect

a continuación, cambiar los permisos de su guión con ..

chmod 0744 myscript

a continuación, llamar a la secuencia de comandos

./myscript

CC

Otros consejos

Esto se hace en 3 maneras diferentes:

  1. Antes de hacer una INSERT, siempre emitir una declaración BEGIN;. Esto desactivará autocommits. Usted tendrá que hacer una vez COMMIT; desea que sus datos sean persistieron en la base de datos.

  2. Uso autocommit=0; cada vez que se ejemplariza una conexión de base de datos.

  3. En un entorno global, agregar una variable autocommit=0 en el archivo de configuración my.cnf en MySQL.

Parece que puedes añadir a tu ~ / .my.cnf, pero tiene que ser añadido como un argumento a la bandera init-comando en la sección [cliente], así:

[client]
init-command='set autocommit=0'

¿Se refiere a la consola de texto MySQL? A continuación:

START TRANSACTION;
  ...
  your queries.
  ...
COMMIT;

es lo que recomiendo.

Sin embargo, si desea evitar tener que escribir esto cada vez que necesita para ejecutar este tipo de consulta, añada lo siguiente a la sección [mysqld] de su archivo my.cnf.

init_connect='set autocommit=0'

Esto establece autocommit estar apagado para cada cliente sin embargo.

Esto es útil para comprobar el estado de confirmación automática;

select @@autocommit;

Para cometer automático fuera a continuación, utilizar el siguiente comando para asegurarse. Situado por debajo en el archivo my.cnf:

    [mysqld]
    autocommit=0

En lugar de cambiar manualmente la confirmación automática en el momento de la restauración ya se puede volcar sus datos de MySQL de una manera que incluye todas las declaraciones necesarias a la derecha en su archivo SQL.

El parámetro de línea de comandos para mysqldump es --no-autocommit. También puede considerar añadir --opt que establece una combinación de otros parámetros para acelerar las operaciones de restauración.

A continuación se muestra un ejemplo de una línea de comando mysqldump completo como lo uso, que contiene --no-autocommit y --opt:

mysqldump -hlocalhost -uMyUser -p'MyPassword' --no-autocommit --opt --default-character-set=utf8 --quote-names  MyDbName  >  dump.sql

Para más detalles de estos parámetros ver la de mysqldump

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top