Dump de triggers, functions e procedures no MySQL

Dump de triggers, functions e procedures no MySQL

Databases

E aí pessoal,

Essa semana me deparei com um problema que rolou durante uma virada de migração de dados de um cliente novo aqui na empresa. O que aconteceu e que realmente eu acho um pé no saco é o fato do MySQL não exportar alguns caras que eu julgo bem importante, no caso as triggers, functions e procedures por padrão no momento do dump (mysqldump).

O nosso migrador por ventura esqueceu do parâmetro –routines depois de mergir as bases de dados, então quando o pessoal foi usar a aplicação logo pipocou uma exception dando falta de uma função para formatar telefones lá num relatório.

Para resolver esse caso para o cliente seguir com a sua vida, eu acabei fazendo um dump do nosso snapshot de referência:

O arquivo out.sql contém apenas o create de todas as triggers, functions e procedures que há na base de dados informada, porém fico atento a um detalhe, ele não adiciona nenhum comando de DROP, então vale a pena prestar atenção na execução do script para ver se tudo ficou correto.

Abraços.

Never forget to use aliases in your SQL queries

Never forget to use aliases in your SQL queries

Blog Databases

Newest frameworks does all hard work for us, I known a lot of programmers, most commonly Java developers, that don’t know anything about SQL, they only know about what can do with their preferred persistence framework. EclipseLink, Hibernate and others, have a solid implementations to the most known databases. These implementations always use columns and tables aliases due framework mapping.

When we are working with reports using SQL, and not Java objects, is our responsibility to know about SQL ANSI and database specifics, like PostgreSQL schemas, PSQL on Oracle, etc. It’s in this time that many developers fall down. Generally they only know to write something like that:

Don’t be like those guys!

The query below doesn’t have problems, except if ‘bar’ is a giant table with a lot of row (millions or billions). But, the problem is when we need to join many tables, ambiguous columns are the first problem, followed by wrong columns on our select.

In the query above, is so easy to identify possible errors:

  1. ‘id’ can be a primary key on product table and in category too;
  2. ‘description’ follows the same principle, where is it from?

When you name you tables, you don’t have these headaches.

Another important point is about database scope, like on many programming languages, scopes delimit variables’ visibility. Sometimes, when you have sub queries, you’ll pay attention to it.

Sometimes MySQL can run correctly, another one, it cannot, its just lose internally and doesn’t match the correct ‘id’ fields. One more time, aliases can save them:

Follow these principles even when you have more than one nested sub query.

Believe, aliases can save you from a tons of problems.

How to fix the big guy called ‘ibdata1’

How to fix the big guy called ‘ibdata1’

Blog Databases Linux

The file ibdata1 is the system tablespace for InnoDB infrastructure, and it contains several informations about InnoDB such as table data pages, index pages, data dictionary, rollback segments, etc. This file is always growing, then, it’s easy to reach to giant sizes.

The size of this file commonly affects development and test machines, because many drops and imports with databases inflate this one. Then, to fix this problem, I have some steps to ends this problem.

Backup all your databases

Do a full dump of your databases.

Drop all your databases

Now, you’ll need remove all your databases, except for mysql and information_schema databases, because they are used by MySQL to control users and data information about managed databases.

Stop MySQL service

For the next step, you will need stop the MySQL service.

Configurations

Now, you’ll need change in MySQL how it’s manage InnoDB data, in this case using one file per table. Locate the my.cnf file on your server and putt this parameter at [mysqld] section:

Save with ‘Esc + :wq!’, then go to MySQL data folder:

The ls -alh command in this folder will print something like this:

Delete this file:

Finally, start MySQL service and import your databases again:

Resolvendo o boot lento do MySQL em ambientes Debian based

Resolvendo o boot lento do MySQL em ambientes Debian based

Blog Databases Linux

Buenas pessoal,

Nos últimos dias coloquei diversas bases de dados na minha estação de trabalho, algo em torno de umas 15 bases de dados com aproximadamente 10gb de dados em umas 5000 tabelas. Tudo andava normal com exceção do boot que estava bem demorado e com um alto processamento sendo executado no início da sessão do usuário.

Depois de investigar a árvore de processos através do comando top, percebi que o fanfarrão era o MySQL. Acessando o console do MySQL durante o boot do sistema era possível ver que havia uma query sendo executada à um bom tempo, algo em torno de uns 2 minutos mais ou menos. A dita query era esta: Continue reading

Comparando views entre bancos no MySQL

Comparando views entre bancos no MySQL

Blog Databases

Bom dia pessoal,

Esses dias tive que sincronizar duas bases de dados porque uma delas havia sido importada faltando algumas views, e como não tinha o código fonte delas na hora, bolei esta query pra me ajudar a ver quais estava faltando…embora mesmo que no fim deixei um arquivo SQL com o DROP e create de todas mesmo.

Fica a dica aí ; )

Procurando todas as referências de uma coluna dentro de um banco de dados MySQL

Blog Databases

Boa tarde a todos,

Recentemente tive que procurar todas as referências de uma coluna (chave primária) de uma determinada tabela em todas as outras tabelas do banco de dados, por exemplo:

Na tabela tb_produto a chave primária é a coluna ‘id_produto’ e esta coluna está nas tabelas ‘tb_item_venda’, ‘tb_item_venda_cancelado’, ‘tb_outra_operacao_com_produto’, etc…

Daí pensei se não existia alguma marotagem que eu poderia usar, daí lembrei do famoso information schema do MySQL. Esse cara contém informação sobre todo o que imaginar dos bancos, tabelas, colunas, índices, etc. Pesquisando um pouco achei uma forma marota de fazer por SQL: Continue reading

Configurando uma layer style dinâmica no Geoserver 2

Configurando uma layer style dinâmica no Geoserver 2

Blog Databases Java

Boa noite pessoal,

Hoje eu e o pessoal aqui da empresa se batemos um tempo para conseguir fazer uma layer que tivesse a projeção de diversas propriedades (pontos XY de localização) e que a cor dos pontos fosse determinada por algum atributo que gerasse uma cor de acordo com a instituição pertencente, exemplo: as propriedades da instituição Exemplo 01 teriam o ponto no mapa na cor amarela, as propriedades da instituição Exemplo 02 teriam os pontos vermelhos, etc. Continue reading