Lado mestre.
No MySQL 8 para a replicação, é possível especificar uma porta específica do lado mestre para replicação e apenas uma replicação diferente do 3306 padrão ao qual os clientes regulares se conectam?
Lado mestre.
No MySQL 8 para a replicação, é possível especificar uma porta específica do lado mestre para replicação e apenas uma replicação diferente do 3306 padrão ao qual os clientes regulares se conectam?
No nome do host do MySQL, o %
in %.exemple.com
cobre o domínio principal exemple.com
também ou apenas seus subdomínios?
Por exemplo neste
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'rep'@'%.exemple.com';
o exemple.com
domínio também será permitido?
A tabela T tem este campo
+---------------+--------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+-------------------+-----------------------------+
| updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+---------------+--------------+------+-----+-------------------+-----------------------------+
No MySQL 5.7, fazer uma atualização de um registro e configuração updated=null
era definir automaticamente updated
a data e hora atual
UPDATE T SET ...,updated=null WHERE k=123
==>
+---------------------+
| updated |
+---------------------+
| 2022-01-05 22:52:05 |
+---------------------+
Mas fazer o mesmo no MySQL 8.0, dá
+---------------------+
| updated |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
Como posso corrigir isso, isso é um bug do MySQL ou uma nova configuração (ou uma mudança de comportamento)?
A updated
coluna foi criada como
| updated | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
um simples SELECT
dá
+---------------------+
| updated |
+---------------------+
| 2021-12-25 00:15:47 |
+---------------------+
Infelizmente, updated
não foi criado como timestamp(3)
.
Existe alguma maneira de extrair mais precisão de updated
? (o MySQL armazena mais precisão do que o segundo, mesmo que mostre apenas segundos?)
Eu encontrei uma consulta semelhante a
INSERT INTO mytable (id, Created, Updated) VALUES (null, NOW(), NOW())
tendo definições de coluna
| Created | datetime |
| Updated | datetime |
Neste caso, o MySQL definirá o valor NOW() para a hora atual e retornará os mesmos valores para ambas as chamadas, ou essa consulta correrá o risco (improvável) de ter dois horários ligeiramente diferentes para Created e Updated?
Observação : não consigo alterar os tipos de campo.
4 anos atrás, respondi uma pergunta no SO , "como definir um UUID para cada linha em massa".
Eu respondi, depois de tentar,
UPDATE table SET uuidcol = UUID();
Funcionou para mim, mas cerca de metade (ao que parece) das pessoas relatam que não funciona, dizendo que o ID é idêntico em todas as linhas.
Então, hoje, tentei novamente, descartando a cada vez a coluna e criando uma nova com um novo tipo, como
text, char(36), varchar(36)
e funcionou novamente, criando um UUID exclusivo por linha, a cada vez.
O que poderia fazer que não funcione para outras pessoas?
O motor por exemplo? (usando InnoDB no MySQL 5.7)
editar
Fez outro teste por
t
deuu varchar(36)
uu
comnull
UPDATE t SET uu=UUID();
e todas as linhas de 10 milhões têm um UUID diferente e exclusivo .
As tabelas ainda não foram criadas, mas para simplificar existem as tabelas a groups
e an . items
Um grupo contém um id de item (e um id de grupo). E vários grupos podem conter o mesmo id de item.
Por exemplo
CREATE TABLE groups (
gid int,
iid int,
primary key(gid,iid)
);
CREATE TABLE items (
iid int primary key,
label char(5)
);
e vamos colocar alguns dados neles, para ajudar a visualizar o próximo problema
insert into items values (1,"pen"),(2,"gum"),(3,"cat"),(4,"dog"),
(5,"hug"),(6,"art"),(7,"fun");
insert into groups values(1,1),(1,2),(1,3),(2,4),(2,5),(2,6),(3,1),
(3,4),(4,2),(4,3),(4,5),(4,6),(4,7);
Recuperar itens de vários grupos (por exemplo, grupos 1,2,3,4) usa a DISTINCT
para remover duplicatas
(1) SELECT DISTINCT i.iid,i.label FROM groups g JOIN items i ON g.iid=i.iid
WHERE g.gid in (1,2,3,4) ORDER BY i.iid;
Mas como as tabelas eventualmente conterão mais dados, essa consulta usando uma subconsulta seria mais eficiente
(2) SELECT i.iid,i.label FROM items i
JOIN (SELECT DISTINCT iid FROM groups WHERE gid IN (1,2,3,4)) AS s
ON i.iid=s.iid ORDER BY i.iid;
já que distinct
se aplica apenas aos ids dos itens, apesar da sobrecarga de usar uma subconsulta?
Ou este sugerido por @hypercube (ver comentários):
(3) SELECT i.iid,i.label FROM items AS i
WHERE EXISTS
(SELECT * FROM groups AS g WHERE g.gid IN (1,2,3,4) AND i.iid=g.iid)
ORDER BY i.iid
Para informação, eventualmente
Eu queria saber como determinar quando foi a última alteração ( ALTER TABLE...
) feita em uma determinada tabela.
Uma resposta antiga está disponível, mas infelizmente isso não funciona para tabelas InnoDB.
Isso funcionaria, olhando para a frm
data e hora do arquivo?
-rw-r----- 1 mysql mysql 18622 Oct 24 21:07 mysql/data/mydb/mytable.frm
-rw-r----- 1 mysql mysql 2114688 Oct 28 06:26 mysql/data/mydb/mytable.ibd
Oct 24 21:07
parece corresponder aproximadamente à última vez que uma mudança na estrutura foi realizada.
Essa informação é confiável?