Executar arquivos SQL em lista ordenada

No TrinityCore há muitos arquivos SQL para executar durante as atualizações, então gostaria de saber se há algum modo de executá-lo em uma certa ordem, algum programa que possamos por grandes quantidades de arquivos SQL, organizá-los em uma devida ordem e logo depois o programa automaticamente executá-los no banco de dados de acordo com a ordem ordenada, alguém pode me ajudar nisso?

Abraços,

bigCheat.

Para Linux:


for file in /world/*.sql; do mysql --database=world < $file; done

for file in /auth_char/*_characters_*.sql; do mysql --database=characters < $file; done

Para Windows:


for /f %a in ('dir /b *world*.sql') do mysql --database=world < %a

Claro que tens de adaptar as linhas para cada base de dados (world, chars ou auth)


for /f %a in ('dir /b *world*.sql') do mysql --database=world < %a

Devo executar este código no console do MySQL? Tem alguma forma de apenas digitar em um arquivo para importá-lo do console para ficar mais fácil?

Executas o código na linha de comandos normal. Não no MySQL.

Entendi. Consegui fazer exatamente o que eu queria, muito obrigado pela ajuda, pela resposta, pela atenção. E desculpas pelo post duplo. Agora uma perguntinha fora do assunto, poderia dar uma olhada no meu script, que criei é um utilitário em PHP, gostaria que me dissesse se está bom, se está ruim, se está sem utilidade, e no que posso melhorar. Obrigado.

Link do Script:

Abraços,

bigCheat.

Bem… ao olhar a primeira vista para o código que tens no subversion…

Tens de colocar as descrições em inglês (válido também para o código que forneces-te no link acima) se queres ter visibilidade. Estares a disponibilizar 1 script que está noutra língua que não seja o inglês, é o 1º passo para que o script não tenha apreciação.

A nível de SQL devias trocar os campos onde tens data e hora, pelo timestamp. Porque pode funcionar muito bem em portugal ou no brazil, mas nas partes do mundo onde a data é invertida, já terás problemas e fazer funcionar o teu script. Penso também que na base de dados do TrinityCore encontras já uma associação dos reagentes às profissões… agora de cabeça não te sei dizer a string de SQL, mas se fizeres 1 procura encontras de certeza.

Para terminar com o SQL, cuidado com as SQL INJECTIONS.

Relativo ao código PHP…

Eu prefiro o método do $_POST ao $_GET. A meu ver é mais seguro.

Nota relativa à ligação do MySQL. Eu usaria:


<?php


$SERVIDOR = "localhost";

$USUARIO = "root";

$SENHA = "";


$CONEXAO = mysql_connect($SERVIDOR, $USUARIO, $SENHA);

?>

Em vez de:


<?php


$SERVIDOR = "localhost";

$USUARIO = "root";

$SENHA = "";

$DATABASE_W = "world";

$DATABASE_C = "characters";


$CONEXAO_W = mysql_connect (

$SERVIDOR,

$USUARIO,

$SENHA

);


$CONEXAO_C = mysql_connect (

$SERVIDOR,

$USUARIO,

$SENHA

);


$W = mysql_select_db ($DATABASE_W,$CONEXAO_W);

$C = mysql_select_db ($DATABASE_C,$CONEXAO_C);


?>

Assim nas strings SQL incluía a DB (o que já o fazes em algumas das strings SQL). (Claro que o nome de utilizador, password e servidor tem de ser os mesmos nas 3 bases de dados)

Eu dividiria também esse código por vários ficheiros php, e usaria sessions para seleccionar que ficheiro usar.

De resto, é um projecto interessante… só é pena ninguém te dar atenção porque está tudo em português.

Cumprimentos.

Fiz um script pra ajudar na importação dos SQLs, pode ser útil pra alguém:

[CODE]DB_NAME=$1

DB_USER=root

DB_PASS=

FIRST_FILE=$2 # starts importing from this file

STARTED=0

if [ -z $DB_NAME ]

then

echo “No database given.”

exit

fi

if FIRST_FILE is empty then start from beginning

if [ -z $FIRST_FILE ]

then

STARTED=1

else

if [ ! -f $FIRST_FILE ]

then

echo "$FIRST_FILE doesn't exist."

exit

fi

fi

for file in *.sql

do

if [ $STARTED -eq 0 ]

then

if [ $file = $FIRST_FILE ]

then

  STARTED=1

fi

fi

if [ $STARTED -eq 1 ]

then

echo $file

mysql -u $DB_USER -p$DB_PASS $DB_NAME < $file

fi

done[/CODE]

Salve como “importsqls” ou qualquer outro nome desejado na pasta dos SQLs e seta como executável:

$ chmod +x importsqls

Obs.: Edite o arquivo para setar o usuário e senha do mysql

Formas de execução:

Importa todos os sqls da pasta para a DB “world”


$ ./importsqls world

Importa somente a partir de um determinado arquivo sql na pasta:


$ ./importsqls world 2011_05_30_01_world_spell_script_names.sql

Ele da um echo no nome do arquivo sendo importado para o caso de ocorrer algum erro na importação.

Valeu!

Isto é para Linux?

sim.

Está usando o script?


[CODE]for /f %a in ('dir /b *world*.sql') do mysql --database=world < %a[/CODE]Ao executar isso o meu prompt retorna o erro: 
[CODE]error 1045 access denied for user 'ODbc'@'localhost'[/code][/CODE]O que poderia ser?

Obrigado, funcionou perfeitamente /emoticons/default_biggrin.png

Com uma pequena correção de digitação /emoticons/default_biggrin.png

for /f %a in ('dir /b *world*.sql) do mysql -u root -p --database=world < %a

for /f %a in ('dir /b *world*.sql') do mysql -u root -p --database=world < %a[/CODE]