Fórum Ubuntu Linux - PT

Suporte Técnico => Servidores => Tópico iniciado por: maurov em 02 de Janeiro de 2017, 15:33

Título: MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 02 de Janeiro de 2017, 15:33
Boa tarde, pessoal.

Tenho um sistema que roda em MySQL e funcionava normalmente. Ao atualizar o servidor para Ubuntu 16.04, algumas perguntas foram feitas pelo processo automático da atualização e por não saber o resultado prático de cada pergunta, quando parecia aconselhável, optava por atualizar o arquivo que era pedido.

Verifico agora que algumas operações foram bloqueadas no uso.
A principal delas, no momento é: Ao criar um novo registro, o campo "id" que está configurado como AI (auto-increment) não consegue realizar a ação. Já desmarquei e marquei de novo, salvando. Parece algo de permissão.

Nao foi possivel fazer a query insert into.
Incorrect integer value: '' for column 'id' at row 1

Alguém conhece MySQL para ajudar?
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 02 de Janeiro de 2017, 15:42
Quando o sistema pergunta se pode atualizar alguma coisa, é pq ele encontrou algum arquivo que está diferente do original, o que, via de regra, significa que você o alterou. Normalmente o processo de atualização deixa uma cópia do arquivo original no lugar; veja nos diretórios de configuração do mysql se vc encontra essas cópias, e consegue ver o que mudou de um pro outro.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 02 de Janeiro de 2017, 17:16
Não saberia onde procurar estes arquivos sobrepostos.

Mas segue o que consegui identificar.
- Consigo me logar no sistema. Aceita meu usuário e minha senha.
- Consigo abrir páginas, (As páginas iniciam um include_conexao.php)
- Consigo efetuar consultas.
- Não consigo inserir registros. Incorrect integer value: '' for column 'id' at row 1 (é autoincrement)
- Não consigo atualizar alguns registros. Incorrect integer value: '' for column 'pjur' at row 1
- Consigo atualizar outros registros.

Em suma, não identifico o problema exato, muito menos onde corrigir.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 02 de Janeiro de 2017, 17:53
Citar
Não saberia onde procurar estes arquivos sobrepostos.
Não são arquivos sobrepostos, são backups do arquivo antes da atualização. Ficam no mesmo local onde ficariam os arquivos originais, e sendo arquivos que você pode ter modificado, a princípio ficariam em "/etc/mysql".
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 02 de Janeiro de 2017, 18:58
A pasta /etc/mysql tem dois arquivos com nome parecido, my.conf e mycnf.fallback.

Em my.conf
Código: [Selecionar]
!include /etc/mysql/conf.d
!include /etc/mysql/mysql.conf.d
Em my.cnf.fallback
Código: [Selecionar]
!include /etc/mysql/conf.d
Não há outros arquivos com terminações do tipo .bkp ou .old.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 02 de Janeiro de 2017, 20:13
vc consegue abrir essa base com o phpMyAdmin?
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 03 de Janeiro de 2017, 08:06
Sim, consigo.
Foi a primeira coisa que fiz. Só movimento o SQL pelo phpmyadmin. Nunca usei command line para nada nele, só para testar acesso com o mysql -u root -p.
No phpmyadmin, desmarquei a opção auot-increment do campo 'id' e depois ativei de novo, para ver se funcionava. Neste campo achei uma opção que não me recordo de ter visto antes, um checkbox chamado Adjust Privileges, que vou copiar abaixo. Mas não sei se o problema se refere a isso.

Citar
6.39 What is the “Adjust privileges” option when renaming, copying, or moving a database, table, column, or procedure?

When renaming/copying/moving a database/table/column/procedure, MySQL does not adjust the original privileges relating to these objects on its own. By selecting this option, phpMyAdmin will adjust the privilege table so that users have the same privileges on the new items.

For example: A user 'bob'@'localhost‘ has a ‘SELECT’ privilege on a column named ‘id’. Now, if this column is renamed to ‘id_new’, MySQL, on its own, would not adjust the column privileges to the new column name. phpMyAdmin can make this adjustment for you automatically.

Notes:

    While adjusting privileges for a database, the privileges of all database-related elements (tables, columns and procedures) are also adjusted to the database’s new name.
    Similarly, while adjusting privileges for a table, the privileges of all the columns inside the new table are also adjusted.
    While adjusting privileges, the user performing the operation must have the following privileges:
        SELECT, INSERT, UPDATE, DELETE privileges on following tables: mysql.`db`, mysql.`columns_priv`, mysql.`tables_priv`, mysql.`procs_priv`
        FLUSH privilege (GLOBAL)

Thus, if you want to replicate the database/table/column/procedure as it is while renaming/copying/moving these objects, make sure you have checked this option.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 03 de Janeiro de 2017, 08:54
Não parece que o problema seja de privilégio, mas sim de manutenção da integridade da base.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 03 de Janeiro de 2017, 09:06
É uma hipótese, mas não considero provável.
A base ficou intocada, não houve restauração nem reinstalação. Foi uma atualização do OS da máquina da versão 14 para a 16, sempre LTS.
E lembro que houveram perguntas no processos automático do upgrade, mas eu não sabia exatamente no que cada coisa iria acarretar. Agora precso descobrir o que tem que ser reajustado.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 03 de Janeiro de 2017, 10:21
Para ir atualizando:
A versão do MySQL foi atualizada para 5.7.16 quando da atualização do Ubuntu.

Criei registros direto pelo phpmyadmin, obviamente logando como root, e percebi que:

1) Fez a query INSERT INTO ('id', 'nome') VALUES ('NULL', 'joao'). A query que operava no script php consta como INSERT INTO ('id', 'nome') VALUES ('','$nome'), sendo $nome='joao' no form.
O campo id é autoincrement.

2) Os campos que ficavam em branco no form (não sei se são trazidos como zero para o DB), precisaram ter valores digitados no phpmyadmin, mesmo que fossem zero.

3) Os campos de data não aceitaram ser digitados no phpmyadmin como 0000-00-00. Pediu data válida. No form, os campos ainda não usados, como datadequitacao normalmente estão em branco.

Que nó.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 03 de Janeiro de 2017, 10:58
Se o campo é autoincrement, pq vc está atribuindo valores a ele? Eu faria só "INSERT INTO ('nome') VALUES ('joao')", sem passar um valor pra "id".
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 03 de Janeiro de 2017, 11:14
Aprendi daquele jeito e funcionava.
Mas achei também essa sugestão de fazer sem especificar o id num forum de mysql na web.
Vou testar e atualizo aqui os resultados.

Acho que temos um norte.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 03 de Janeiro de 2017, 15:39
O que mudou quando da atualização para a versão 5.7 foi que o DB não aceita mais campos vazios. Então:
- Ao gerar um novo registro, não aceita mais a condição de ter INSERT INTO ('id', 'nome') VALUES ('','$nome'), sendo $nome='joao' no form e com o campo id é autoincrement no MySQL.
- Ao gerar um novo registro, caso o form mantenha algum dado vazio, tipo uma checkbox qualquer, a qual é Integer ou TinyInteger, tem que marcar a opção NULL no MySQL.
- Ao alterar um determinado campo pré-existente que possua uma condição citada no ítem anterior,  NULL tem que estar marcado no DB.

Valeu  mais esta parceria.

Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 03 de Janeiro de 2017, 16:20
Pra mim, um campo autoincrement que aceita valores NULL é uma incongruência, não? Vc define o campo como autoincrement justamente para que ele assuma um valor a partir do último registro inserido, como (ou por qual motivo) você vai aceitar que ele vire nulo?
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 03 de Janeiro de 2017, 22:37
Concordo. O campo id, que tem autoincrement, não é NULL. Mas num form, nem todos os campos são preenchidos. Estes últimos que devem poder aceitar a opção NULL.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 04 de Janeiro de 2017, 09:58
Quando o campo não é preenchido, o form pode fornecer valores padrão. Aliás, a própria base pode fornecer valores padrão. P.ex., com campos de data, vc pode configurar a base para preenchê-los com a hora automaticamente.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 06 de Janeiro de 2017, 16:20
Não funciona a contento.
Então, resumindo:

Num campo tipo checkbox:
<input type="checkbox" name="quitacao" id="quitacao"
 value="<?php echo $quitacao; ?>" <?php if ($quitacao=='1') { echo ' checked '; } ?> />

No PHP:
$query = "INSERT INTO mytable (quitacao, dataquit) VALUES ('$quitacao','$dataquit')";

No DB
Name: quitacao
Type: tinyint(4)
NULL: Yes
Default: 0

Resposta no navegador:
Incorrect integer value: '' for column 'quitacao' at row 1

Onde a falha?
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 06 de Janeiro de 2017, 16:57
Texto vazio não é um número válido.
Em tempo... se vc tem um campo numérico, o correto seria você lê-lo em uma entrada de texto, não num checkbox.
Checkboxes são pra você ler campos booleanos, verdadeiro ou falso, ligado ou desligado, aceso ou apagado, selecionado ou não selecionado, zero ou um...
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 06 de Janeiro de 2017, 17:04
Mas é isso, ou, é para ser isso.
Pago ou não pago, marca zero ou um.
E entendo que tinyint é um número inteiro pequeno, de 0 a 255 se não me engano.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 06 de Janeiro de 2017, 17:30
Então esse campo deveria ser booleano, não um tinyint.
De qualquer forma, garanta que esse valor receba um valor numérico, não um "vazio".
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 06 de Janeiro de 2017, 17:52
Boa dica. Fiz por dentro do phpmyadmin, que executa no MySQL o comando:

Código: [Selecionar]
ALTER TABLE 'mytable' CHANGE 'quitacao' 'quitacao' BOOLEAN NULL DEFAULT FALSE;
Feito isso, é apresentado como tinyint(1).
Nota: Quando seleciona a opção tinyint, ele coloca automaticamente tinyint(4).

Como continua tratando o campo como um número inteiro, repete-se a mensagem de erro.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 06 de Janeiro de 2017, 18:08
fecha a sessão do phpMyAdmin e carrega de novo, pra limpar a visualização.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 09 de Janeiro de 2017, 09:26
Mesmo erro...

Acho que as perguntas no momento são:

1) Quando um campo está marcado como NULL no db, significa que ele o valor a ele atribuído pode ser nulo?
2) O tipo de dado (VAR, INT, etc) interfere na questão de ser nulo?
3) O valor default selecionado como 0 (zero), não deveria ser atribuído na inserção, excluindo a condição de nulo?

Um teste:
Marquei o campo 'datavenc' no db como NULL e tentei fazer a inclusão. Mesagem de erro:
Código: [Selecionar]
Incorrect date value: '' for column 'datavenc' at row 1É como se o NULL não mudasse nada.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 09 de Janeiro de 2017, 10:19
Você ainda não pegou o tchan do problema...
Acontece que '' (string vazia) não é NULL!!!

NULL é um campo que não foi preenchido.

String vazia é uma string de comprimento zero.

São valores diferentes...
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 09 de Janeiro de 2017, 11:48
Hmmm, como permitir salvar o seguinte form enquanto apenas a 'datavenc' é  preenchida?

<input type="date" name="datavenc" value="<?php echo $datavenc; ?>" >
<input type="checkbox" name="quitacao" id="quitacao"
 value="<?php echo $quitacao; ?>" <?php if ($quitacao=='1') { echo ' checked '; } ?> />
<input type="date" name="dataquit" value="<?php echo $dataquit; ?>" >

$query = "INSERT INTO mytable (datavenc, quitacao, dataquit) VALUES ('$datavenc','$quitacao','$dataquit')";

Name: datavenc
Type: date
NULL: Yes

Name: quitacao
Type: tinyint(1)
NULL: Yes
Default: 0

Name: dataquit
Type: date
NULL: Yes
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 09 de Janeiro de 2017, 12:28
Quando vc quer que um registro seja inserido mantendo alguns campos como NULL, omita esses campos da instrução de inserção. Ou seja, em vez de

INSERT INTO mytable (datavenc, quitacao, dataquit) VALUES ('$datavenc','$quitacao','$dataquit')

faça:

INSERT INTO mytable (datavenc) VALUES ('$datavenc')
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 09 de Janeiro de 2017, 17:49
Acredito que funcione, Evita-se passar pelo NULL. Se não conseguir resolver, vou ver se tem como mudar o script.

Mas imagina um prontuário médico onde tem que salvar o nome do paciente e uma checkbox indicando se ele é cardíaco. Não seria possível salvar um registro do não-cardíaco, né?
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 09 de Janeiro de 2017, 17:57
Você passa o valor "FALSE" para "cardíaco", não "" (vazio).
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 09 de Janeiro de 2017, 18:10
Como, onde? Vou tentar
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 10 de Janeiro de 2017, 11:12
Tentei, mas não consegui entender.
Se eu usar FALSE como nestes exemplos da web, não tenho como atualizar a variável :
INSERT INTO first VALUES (NULL, 'G22', TRUE);
INSERT INTO first VALUES (NULL, 'G23', FALSE);
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 10 de Janeiro de 2017, 11:52
Vc está fazendo isso de forma diferente da que fez antes. Se não mantiver alguma coerência nos testes, vai ficar difícil entender (e se fazer entender).
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 10 de Janeiro de 2017, 12:14
Tens razão, sorry. Estava lendo outros tópicos e postei rápido sem adaptar.
O questionamento sobre o uso do FALSE, da forma como achei, dentro de VALUES, não permitiria a atualização da variável, como em:

INSERT INTO mytable (datavenc, quitacao, dataquit) VALUES ('$datavenc',FALSE,'$dataquit')

A questão do NULL é ainda o ponto crítico, uma vez que dá o mesmo erro na variável que estiver primeiro (já inverti a ordem no php para ver se acontecia isso), como em:

INSERT INTO mytable (datavenc, quitacao, dataquit) VALUES ('$datavenc','$quitacao','$dataquit')
INSERT INTO mytable (quitacao, dataquit, datavenc) VALUES ('$quitacao','$dataquit','$datavenc')
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 10 de Janeiro de 2017, 13:29
O valor NULL é usado quando você cria o registro e não fornece um valor para o campo. Você nessas linhas está fornecendo um valor para o campo.

Se você quer que o campo não receba nenhum valor, você não pode citá-lo na operação de INSERT.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 10 de Janeiro de 2017, 16:31
Um formato que consigo imaginar é:
- O campo deverá ter um valor inicial (default value=0 pelo db) e não estar como NULL.
- Constar no INSERT INTO do script php como uma variável ($quitacao, por exemplo).

Desta forma creio que não constaria como nulo e permitiria edição no form html.
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: zekkerj em 10 de Janeiro de 2017, 18:01
Então... estamos rodando em torno de uma questão que não é do Ubuntu, é do MySQL, e, talvez, até, do projeto da base, em si.
O que eu observo... me parece que na entrada dessa nova versão, o MySQL passou a ser mais exigente com a integridade dos dados sendo inseridos na base.
Talvez você tenha mais progresso se levar o caso à comunidade do MySQL ou mesmo do PHP (que também foi atualizado nessa versão).
Título: Re:MySQL limita uso após atualização para Ubuntu 16.04
Enviado por: maurov em 11 de Janeiro de 2017, 08:46
É verdade.
Após os testes e trocas de experiências, a questão não se mostrou como problema causado pela atualização do Ubuntu em si, mas por exigências (gostei do termo) da versão 5.7 do MySQL que acaba sendo atualizada junto.

De qualquer forma, fica e experiência para outros colegas do fórum.