AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / 问题

All perguntas(dba)

Martin Hope
Isaac Sutherland
Asked: 2023-10-04 00:11:39 +0800 CST

backup quente do mysql com suporte de atualização

  • 5

Eu executo um backup dinâmico de um banco de dados MySQL de produção usando um instantâneo LVM e, em seguida, tento restaurar esse backup em uma máquina de desenvolvimento. No entanto, o devbanco de dados mysql não inicia e reclama que[InnoDB] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 5.7.33, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html

On prode dev, mysql> SELECT @@datadir;dá /data/mysql( /dataé um volume lvm).

Em prode dev, mysql> SELECT @@innodb_fast_shutdowndá 1.

informações da versão do mysql:

prod$ mysql --version
mysql  Ver 14.14 Distrib 5.7.33, for Linux (x86_64) using  EditLine wrapper

dev$ mysql --version
mysql  Ver 8.0.34-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

Parece que devmeu backup ativo é o resultado de uma falha. Talvez seja porque estou usando FLUSH TABLES WITH READ LOCK;para obter um instantâneo consistente, mas isso não resulta em uma imagem datadir compatível com atualização.

Se eu substituir os comandos FLUSH TABLES WITH READ LOCK/ UNLOCK TABLESpor comandos systemctl stop mysql/ systemctl start mysql, a devmáquina não reclamará do estado de travamento. No entanto, não quero fazer isso porque não quero perder conexões de banco de dados existentes ou negar conexões de entrada durante o breve período em que estou criando meu instantâneo na máquina prod. Como posso criar um instantâneo consistente que funcione para atualizações sem desligar o daemon mysql?

Detalhes essenciais sobre como criar e restaurar o backup:

Para sua informação prod, está executando o Ubuntu 16.04 e devo Ubuntu 20.04.

Meu procedimento de backup é assim:

  1. Bloqueie todas as tabelas:

    prod mysql> FLUSH TABLES WITH READ LOCK;
    
  2. Crie um instantâneo:

    prod# lvcreate --extents 100%FREE --snapshot --name mysql-backup /dev/myvg/mylv
    
  3. Desbloqueie todas as mesas:

    prod mysql> UNLOCK TABLES;
    
  4. Monte o snapshot e crie um arquivo tar dos dados:

    prod# mount /dev/myvg/mysql-backup /mnt/bkup
    prod# tar -C /mnt/bkup -aczf ~/bkup.tar.gz mysql
    
  5. Limpar

    prod# umount /mnt/bkup
    prod# lvremove --yes /dev/myvg/mysql-backup
    
  6. Mova o arquivo tar para a máquina de desenvolvimento. Descompacte os dados em /data/mysql.

  7. Inicie o daemon mysql:

    dev# systemctl start mysql
    Job for mysql.service failed because the control process exited with error code.
    See "systemctl status mysql.service" and "journalctl -xe" for details.
    
  8. Examinar /var/log/mysql/error.log:

    2023-10-03T14:21:47.688509Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.34-0ubuntu0.20.04.1) starting as process 79121
    2023-10-03T14:21:47.746245Z 1 [System] [MY-011012] [Server] Starting upgrade of data directory.
    2023-10-03T14:21:47.747076Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
    2023-10-03T14:21:48.125425Z 1 [ERROR] [MY-012526] [InnoDB] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 5.7.33, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html
    2023-10-03T14:21:48.125480Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
    2023-10-03T14:21:48.404686Z 1 [ERROR] [MY-011013] [Server] Failed to initialize DD Storage Engine.
    2023-10-03T14:21:48.405086Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
    2023-10-03T14:21:48.406142Z 0 [ERROR] [MY-010119] [Server] Aborting
    2023-10-03T14:21:48.407096Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.34-0ubuntu0.20.04.1)  (Ubuntu).
    
mysql
  • 1 respostas
  • 16 Views
Martin Hope
Capacytron
Asked: 2023-10-03 21:27:26 +0800 CST

Função agregada definida pelo usuário para somar valores jsonb

  • 5

Eu tenho uma função agg que soma decimais. Lógica de negócios omitida por questões de brevidade

CREATE OR REPLACE FUNCTION calculate_snapshot_internal_decimal(_this_value DECIMAL,
                                                               _next_value DECIMAL
                                                               OUT _code DECIMAL)
    LANGUAGE plpgsql AS
$func$
BEGIN

    _code = _this_value + _next_value;

END
$func$;

Agora preciso do mesmo para JSONB onde a chave é string e o valor é sempre BigDecimal

_este_valor:

{"weight": "50", "height":"170", "size": "2"}

_próximo_valor

{"weight": "40", "height":"20"}

resultado agregado:

{"weight": "90", "height":"190", "size": "2"}

O que eu poderia tentar?

postgresql
  • 1 respostas
  • 16 Views
Martin Hope
Marek
Asked: 2023-10-03 19:49:22 +0800 CST

As linhas mais recentes para cada tipo/agente

  • 5

Tenho uma tabela (ainda no MySQL 5.7) com muitos dados. Esta tabela é escrita por alguns scripts. Funciona como um “checkin”, onde cada agente faz o check-in em algum período de tempo. Parece abaixo.

eu ia agente status carimbo de data/hora
1 Tom OK 16/03/2023 12:27:03
2 Jeff degradado 31/08/2023 00:01:13
100 Tom OK 03/10/2023 12:00:00
101 Jeff OK 03-10-2023 11:59:00

Eu gostaria de escolher a linha mais recente de cada agente. Portanto, no exemplo acima, gostaria de obter as linhas 100 e 101.

Eu uso o seguinte script, mas acontece apenas as duas primeiras linhas. Tentei alterar a ordem por id ou carimbo de data/hora ASC/DESC.

SELECT * FROM (SELECT * FROM db_table ORDER BY timestamp ASC) as agnt GROUP BY agent

Como fazer funcionar?

mysql
  • 1 respostas
  • 34 Views
Martin Hope
User 19826
Asked: 2023-10-03 18:17:08 +0800 CST

Como exportar arquivo db do SQLLite

  • 5

Carreguei meu arquivo csv para https://sqliteonline.com/ e ele está atualmente disponível como uma tabela. Preciso exportar esses dados para um arquivo .db para usá-los em outro lugar. Tentei exportar a tabela, mas só tenho opções de exportar como jason, sql, etc, e não db.

Eu tentei executar o comando

  create database test;

tentar mover a tabela abaixo dela e exportar, mas criar teste de banco de dados; erros gerados. Você poderia me ajudar a exportar isso como um arquivo db? Como alternativa, se você recomendar outras ferramentas que possam fazer isso, também seria ótimo.

export
  • 1 respostas
  • 21 Views
Martin Hope
John Marston
Asked: 2023-10-03 10:14:28 +0800 CST

Obtenha pontos de outra tabela com base na categoria e faixa de valores

  • 5

Estou tentando obter uma coluna que especifique os pontos comparando o valor da tabela original com os valores mínimo e máximo de outra tabela. Tenho uma tabela principal, que consiste em algumas colunas de valores e a respectiva coluna de pontos a serem inseridos. Aqui está o exemplo:

Main table
--------------------------------------------------------------------------------
| User   | Department |  BU  |  Revenue | Revenuepoint | Profit |  Profitpoint |
--------------------------------------------------------------------------------
| A      | 1000000    | 101  |  400     |              | 200    |              |
| B      | 1000001    | 101  |  300     |              | 100    |              |
| C      | 1000000    | 102  |  350     |              | 150    |              |
--------------------------------------------------------------------------------


Point table
----------------------------------------------------------------
| Category| Department |  BU  |  Fromvalue  | Tovalue | Point  |
----------------------------------------------------------------
| Revenue | 1000000    | 101  |  0          | 200     | 1      |
| Revenue | 1000000    | 101  |  201        | 400     | 2      |
| Revenue | 1000000    | 102  |  0          | 300     | 1      |
| Revenue | 1000000    | 102  |  301        | 400     | 2      |
| Revenue | 1000001    | 101  |  0          | 200     | 1      |
| Revenue | 1000001    | 101  |  201        | 400     | 2      |
| Profit  | 1000000    | 101  |  0          | 100     | 1      |
| Profit  | 1000000    | 101  |  101        | 300     | 2      |
| Profit  | 1000000    | 102  |  0          | 50      | 1      |
| Profit  | 1000000    | 102  |  51         | 200     | 2      |
| Profit  | 1000001    | 101  |  0          | 50      | 1      |
| Profit  | 1000001    | 101  |  51         | 200     | 2      |
----------------------------------------------------------------


Expected table
--------------------------------------------------------------------------------
| User   | Department |  BU  |  Revenue | Revenuepoint | Profit |  Profitpoint |
--------------------------------------------------------------------------------
| A      | 1000000    | 101  |  400     |       2      | 200    |       2      |
| B      | 1000001    | 101  |  300     |       2      | 40     |       1      |
| C      | 1000000    | 102  |  350     |       2      | 150    |       2      |
--------------------------------------------------------------------------------

Departamento e BU precisam corresponder e o RevenuePoint precisa pegar os registros onde Categoria = Receita, igual ao ProfitPoint.

Tentei algumas maneiras que encontrei aqui, mas a maioria não é tão complexa quanto a minha, então não tenho ideia de como sair daqui.

Este é o código que eu tentei

SELECT 
a.User, 
a.Department, 
a.BU, 
a.Revenue, 
(SELECT MAX(b.Point) from Point b WHERE a.Revenue BETWEEN b.fromvalue and b.tovalue) as Revenuepoint,
b.Point as Revenuepoint,
a.Profit, 
(SELECT MAX(b.Point) from Point b WHERE a.Profit BETWEEN b.fromvalue and b.tovalue) as Profitpoint
FROM Sales a
sql-server
  • 1 respostas
  • 33 Views
Martin Hope
Morgeth888
Asked: 2023-10-03 01:16:05 +0800 CST

Por que o SQL Server não pode executar um TOP N SORT entre uma busca de índice e uma pesquisa de chave?

  • 6

Estou analisando um pequeno problema de desempenho, em que uma ferramenta otimizadora está basicamente dizendo: "ei, vá em frente e inclua todas as colunas desta tabela neste índice", o que é uma solução horrível na minha opinião.

Meu processo de pensamento me levou a pensar "por que não vou em frente e dou tudo neste índice existente para fazer sua classificação e operação TOP(N) e cortar essa enorme operação de pesquisa de chave de 100k, certamente o SQL Server pode fazer isso e mude de pesquisas de chave de 100 mil para N."

Não foi isso que eu vi, o que vi foi que nada mudou, ele ainda fazia todas as principais pesquisas e classificava depois disso. Como abaixo

insira a descrição da imagem aqui

Simplesmente remover a seleção das outras colunas que não estão no índice faz com que ele não precise de nenhuma pesquisa de chave, é claro.

Já vi muitas soluções alternativas usando CTE para contornar isso, mas estou usando o Entity Framework para esta consulta e simplesmente brincar com a consulta não é tão fácil assim.

Eu gostaria que o objetivo principal desta pergunta fosse POR QUE isso acontece? Parece uma operação trivial fazer a cláusula sort e top antes do loop de pesquisa de chave, se você puder. Não fazer isso parece uma fraqueza gritante na plataforma.

Estou perguntando por que esse comportamento existe, e não como posso melhorar o desempenho dessa consulta.

sql-server
  • 2 respostas
  • 91 Views
Martin Hope
QueryQuirk
Asked: 2023-10-02 21:57:49 +0800 CST

Compare duas tabelas para discrepâncias

  • 5

Estou tentando comparar duas tabelas em dois bancos de dados separados (mesma instância) para uma nova extração de dados. As tabelas têm cerca de 4 milhões de linhas e devido à forma como foram extraídas não estão na mesma ordem em cada tabela, pois são apenas tabelas de teste (não há PKs).

Eu tentei usar (selecionar * da tabela 1, exceto selecionar * da tabela 2) UNION ALL (selecionar * da tabela 2, exceto selecionar * da tabela 1), mas isso resulta em cerca de 10 milhões de linhas, portanto não está funcionando conforme o esperado.

Eu acho que os resultados deveriam ficar em torno de alguns milhares.

sql-server-2016
  • 2 respostas
  • 38 Views
Martin Hope
Daniel Benzie
Asked: 2023-10-02 21:09:41 +0800 CST

Bloqueio/Isolamento - MariaDB

  • 6

No MariaDB, o nível de isolamento padrão é leitura repetível. Entendo que isso significa que quando abro uma transação não verei nenhuma gravação simultânea no banco de dados.

Também tenho uma situação em que preciso garantir que alterações simultâneas não sejam feitas nas linhas. Para isso posso adquirir um cadeado exclusivo. Minha pergunta é realmente sobre como os dois funcionam em conjunto.

Se eu adquirir o bloqueio dentro da minha transação de atualização, significa que é possível que eu abra a transação e seja bloqueado porque outro processo possui o bloqueio exclusivo, quando eu obtiver o bloqueio, alterações podem ter sido feitas na linha que eu não veria, mas poderia precisar estar ciente de.

Estou hesitante em alterar o nível de isolamento, pois este é um cenário específico.

No momento, decidi adquirir o bloqueio antes de iniciar minha transação de atualização, mas isso torna a liberação do bloqueio mais problemática, pois ele não seria liberado depois que minha transação fosse confirmada. Estou perdendo algo óbvio? Então basicamente eu abro uma transação SELECT FOR UPDATE. Em seguida, abra uma segunda transação para fazer a atualização.

Semi-relacionado: O que foi dito acima significa que o bloqueio otimista quando o nível da transação é de leitura repetível é algo impossível? O bloqueio otimista envolve a verificação de uma versão/timestamp para garantir que nenhuma outra transação o tenha modificado desde que foi lido inicialmente. Com leituras repetíveis, não teríamos visibilidade de outras transações até que nossa transação fosse concluída, o que vai contra o propósito. Ou significa apenas que devo adquirir bloqueios fora das transações?

mysql
  • 2 respostas
  • 41 Views
Martin Hope
FranS
Asked: 2023-10-02 19:40:53 +0800 CST

Coluna aceitando mais caracteres do que o definido

  • 5

Eu tenho uma coluna definida como caractere variável (20). Mas está aceitando mais de 20 caracteres. Já procurei mas não encontrei nada a respeito (talvez esteja pesquisando errado). Alguém já passou por esse problema e sabe a causa e/ou solução?

sqlite
  • 1 respostas
  • 34 Views
Martin Hope
Evan Carroll
Asked: 2023-10-02 03:50:31 +0800 CST

SQL Lite está apresentando erro de "índice fora do intervalo"

  • 6

Quando executo este código em Rust

statement.read::<i64, _>("creation_utc").unwrap(),

Eu recebo,

Erro {código: Nenhum, mensagem: Some("o índice está fora do intervalo ( creation_utc)") }

Mas verifiquei que a coluna está na tabela várias vezes. Que problema causa isso e como posso resolver esse erro?

sqlite
  • 1 respostas
  • 48 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve