Duvida MySql

Boa tarde colegas !

Tenho o MySql instalado numa maquina Windows e em um servidor Linux.

A maquina Windows uso como servidor de desenvolvimento, com o banco local.

A maquina Linux uso como servidor de produção.

Não sei como se é alguma configuração no momento da instalação ou que pode ser feita no próprio MySql, mas as tabelas que crio no Windows ficam com essa DDL:


CREATE TABLE `modulo` (
  `mo_moID` int(11) NOT NULL auto_increment,
  `mo_moDescricao` varchar(50) default NULL,
  PRIMARY KEY  (`mo_moID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

E a mesma tabela no Linux, fica assim:

CREATE TABLE `modulo` (
  `mo_moID` int(11) NOT NULL auto_increment,
  `mo_moDescricao` varchar(50) default NULL,
  PRIMARY KEY  (`mo_moID`)
) ENGINE=MyISAM

Note que o parametro ENGINE mudou e o DEFAULT CHARSET sumiu…

Alguem sabe o que é isso ?
Posso ter problemas por causa dessa diferença ?
E como posso deixar os dois servidores iguais ?

Obrigado a todos.

Abraços.

Problemas você vai ter com certeza; não use MyISAM a menos que essa tabela seja usada apenas para leitura e nunca seja usada com fins transacionais (é o método mais rápido de acesso, mas é o mais inseguro).

Deixe as tabelas do Linux como estão no Windows ( ENGINE=InnoDB DEFAULT CHARSET=latin1 ).

Acho que há alguma configuração padrão para que o padrão de criação de tabelas seja InnoDB em vez de MyISAM, mas não sei onde fica isso. Prefiro mencionar isso explicitamente na hora de criar as tabelas.

thingol:

Antes de mais nada muito obrigado pela resposta.

Copiei o script de criação de uma tabela do Windows

-- Table "equipamento" DDL

CREATE TABLE `equipamento` (
  `eq_eqIdEquipamento` int(10) NOT NULL auto_increment,
  `eq_eqDescricao` varchar(100) default NULL,
  PRIMARY KEY  (`eq_eqIdEquipamento`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

E tentei executar no Linux, no entando ele esta dando erro no DEFAULT CHARSET=latin1, se eu tiro essa informação ele cria a tabela como ENGINE=InnoDB.

Ou seja, fica assim:

CREATE TABLE `equipamento` (
  `eq_eqIdEquipamento` int(10) NOT NULL auto_increment,
  `eq_eqDescricao` varchar(100) default NULL,
  PRIMARY KEY  (`eq_eqIdEquipamento`)
) TYPE=InnoDB

Você tem idéia do que isso significa e se pode causar algum problema ?

[]s

existe diferença de versão entre os mysql? pode ser isso ou a sua configuração do mysql no linux (ver o my.cnf)

Permitam-me uma carona na pergunta do colega. Tendo duas bases de dados distintas é possível criar um select em tabelas das duas direto no MySql, por exemplo:

Select * from SERVIDOR1.BANCO.TABELA T1, SERVIDOR2.BANCO.TABELA T2;

Antes que alguém sugira já googlei bastante este assunto e não encontrei nada.

Se for duas bases de dados no mesmo servidor, faz-se assim:

Se for duas bases sem servidores separados, terás que fazer isso: http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html

Cara, só por curiosidade, você procurou pelo que? Apesar de já saber as respostas, fiz as buscas baseadas nos seus questionamentos.

  • busca por “select different databases mysql” ( sem as aspas ) : logo no primeiro link;
  • busca por “select different servers mysql” ( sem as aspas ) : segundo link.

:?

Até!

As duas opções citadas por maquiavelbona, ao qual já fica público meu agradecimento, já testado mais não atende pelo seguintes motivos:

  1. Federated exige a reinstalação do mysql com opções especificas (por hora não posso fazer isto);
  2. A primeira sugestão não é o caso, as tabelas estão em base separadas.

Por favor alguém diga que tenho uma terceira opção.

[quote=Zeed01]thingol:

Antes de mais nada muito obrigado pela resposta.
(…)code
ENGINE=InnoDB DEFAULT CHARSET=latin1
[/code]
E tentei executar no Linux, no entando ele esta dando erro no DEFAULT CHARSET=latin1, se eu tiro essa informação ele cria a tabela como ENGINE=InnoDB.
Ou seja, fica assim:

(...)
) TYPE=InnoDB

Você tem idéia do que isso significa e se pode causar algum problema ?
[]s[/quote]

Zeed,

Se a sua aplicação for web, vale a pena fazer testes com o conjunto UTF-8 (tem um link muito bom aqui no guj, sbore os porques:
http://www.guj.com.br/posts/list/12456.java

Se estiver utilizando o mysqldump: http://www.sitepoint.com/article/backing-up-mysqldump
ou ssh: http://www.vbulletin.com/docs/html/main/manual_database_backup

outra referência:

[quote]Its not possible that you backed up from a server running 4.0.x if you are getting the ‘DEFAULT CHARSET’ bit in your backup. You had to be running 4.1.x
You will either need to edit the sql file and remove the occurences of
DEFAULT CHARSET = latin1
Or redump issuing the version command.[/quote]
Uso o parâmetro de compatibilidade (nos links acima tem maiores detalhes).

fw

Então senta e chora. Não há como fazer um sql acessar dois dbs diferentes no MySQL sem as opções relacionadas, aliás, elas existem para isso. Se houvesse outra maneira que não precisasse disso, porque iam fazer?

Até!

[quote=renatoamorim]
As duas opções citadas por maquiavelbona, ao qual já fica público meu agradecimento, já testado mais não atende pelo seguintes motivos:

  1. Federated exige a reinstalação do mysql com opções especificas (por hora não posso fazer isto);
  2. A primeira sugestão não é o caso, as tabelas estão em base separadas.

Por favor alguém diga que tenho uma terceira opção.[/quote]

Renato,

o h2 database possui linked table que são semelhantes as tabelas vinculadas do access, se a sua aplicação estiver em java, você pode fazer com que as tabelas dos diferentes bancos sejam ligadas pelo h2. A performance desse recurso é muito boa, a única coisa chata é que ele cria uma conexão como banco alvo para cada tabela.

fw

Então senta e chora. Não há como fazer um sql acessar dois dbs diferentes no MySQL sem as opções relacionadas, aliás, elas existem para isso. Se houvesse outra maneira que não precisasse disso, porque iam fazer?

Até![/quote]

Obrigado pela atenção mais não tenho tempo para chorar… Soluções sempre aparecem novas para atender novas exigências. Viva a esperança!

Dieval Guizelini,

Obrigado pela atenção. Vou testar a solução apresentada. Posto minhas opiniões.