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 / Perguntas / 344746
Accepted
FromLake
FromLake
Asked: 2025-01-16 11:42:00 +0800 CST2025-01-16 11:42:00 +0800 CST 2025-01-16 11:42:00 +0800 CST

Instância extra do MariaDB ou mysql no Debian Linux não funciona quando altero um nome durante a configuração

  • 772

-- EDITAR -- Conclua a configuração na resposta abaixo. -- EDITAR --

Quando sigo um artigo (link abaixo) sobre como configurar um MariaDB ou Mysql extra no Linux, e funciona. No entanto, não gosto dos nomes "mysql1" e "mysql2" para nomes de instância. Mas quando altero apenas esse aspecto do código, o servidor não instala quando executo o comando start.

Eu escrevi ambas as configurações aqui abaixo para facilitar a comparação: A que funciona onde 2 instâncias estão sendo feitas, e a que no final das contas não funciona. Eu adoraria muito descobrir como fazer a que não funciona, funcionar. Sua ajuda é muito apreciada!

- 1) Datadir (configuração que funciona):

sudo mkdir -p -v /var/lib/mysql{1..2}
sudo chown mysql:mysql -v /var/lib/mysql{1..2}

- 1) Datadir (configuração que não funciona):

sudo mkdir -p -v /var/lib/mysqlTest
sudo chown mysql:mysql -v /var/lib/mysqlTest

- 2) Diretório de soquetes (configuração que funciona):

sudo mkdir -p -v /usr/local/mysql/mdb{1..2}
sudo chown -v -R mysql:mysql /usr/local/mysql/mdb{1..2}

- 2) Diretório de soquete (configuração que não funciona):

sudo mkdir -p -v /usr/local/mysql/mdbTest
sudo chown -v -R mysql:mysql /usr/local/mysql/mdbTest

- 3) Diretório de log (configuração que funciona):

sudo mkdir -p -v /var/log/mysql{1..2}
sudo chown -v -R mysql:mysql /var/log/mysql{1..2}

- 3) Diretório de log (configuração que não funciona):

sudo mkdir -p -v /var/log/mysqlTest
sudo chown -v -R mysql:mysql /var/log/mysqlTest

- 4) Eu crio o seguinte arquivo

"mysqld_multi_cls.cnf"

Localizado em: /etc/mysql/

- 5) conteúdo (configuração que funciona):

# Configuration Settings for mysqld_multi , as well as separate instances. 
#
[mysqld_multi]
mysqld       = /usr/bin/mysqld_safe
mysqladmin   = /usr/bin/mysqladmin

[mysqld1]
socket          = /tmp/mysql.sock1
port            = 3307
pid-file        = /usr/local/mysql/mdb1/ansible-host1.pid1
datadir         = /var/lib/mysql1
log-error       = /var/log/mysql1/error.log
log_bin         = /var/lib/mysql1/mdb1-mysql-bin.log
server-id       = 1
expire_logs_days = 72
sync_binlog     = 1
innodb_flush_log_at_trx_commit = 1
innodb_flush_method = O_DIRECT      
binlog_format       = mixed
gtid_strict_mode    = 1

[mysqld2]
socket          = /tmp/mysql.sock2
port            = 3308
pid-file        = /usr/local/mysql/mdb2/ansible-host1.pid2
datadir         = /var/lib/mysql2
log-error       = /var/log/mysql2/error.log
log-bin         = /var/lib/mysql2/mdb2-mysql-bin.log
server-id       = 2
expire_logs_days = 64
sync_binlog     = 1
innodb_flush_log_at_trx_commit  = 1
innodb_flush_method             = O_DIRECT  
binlog_format                   = mixed
gtid_strict_mode                = 1

- 5) conteúdo (configuração que, no final das contas, não funciona):

# Configuration Settings for mysqld_multi , as well as separate instances. 
#
[mysqld_multi]
mysqld       = /usr/bin/mysqld_safe
mysqladmin   = /usr/bin/mysqladmin

[mysqlTest]
socket          = /tmp/mysql.sock3
port            = 3309
pid-file        = /usr/local/mysql/mdbTest/ansible-host1.pid3
datadir         = /var/lib/mysqlTest
log-error       = /var/log/mysqlTest/error.log
log_bin         = /var/lib/mysqlTest/mdbTest-mysql-bin.log
server-id       = 3
expire_logs_days = 72
sync_binlog     = 1
innodb_flush_log_at_trx_commit  = 1
innodb_flush_method             = O_DIRECT      
binlog_format                   = mixed
gtid_strict_mode                = 1

-6) E agora iniciamos o servidor:

sudo mysqld_multi --defaults-file=/etc/mysql/mysqld_multi_cls.cnf --log=/etc/mysql/multi_ins.log start      
  • Se feito da primeira vez, o banco de dados agora está sendo instalado e todos ficam felizes.
  • Mas se feito no 2º solar, onde eu apenas alterei o nome e criei uma única instância (extra), nada acontece.

O que estou perdendo?

Abraços e muito obrigado!

Aqui está o artigo no Linkedin por Michael Amadi: https://www.linkedin.com/pulse/running-multiple-instances-mariadb-single-server-different-amadi

mysql
  • 1 1 respostas
  • 32 Views

1 respostas

  • Voted
  1. Best Answer
    FromLake
    2025-02-03T07:56:51+08:002025-02-03T07:56:51+08:00

    Tudo bem, vamos responder a essa pergunta do bad boy.

    Você não pode mudar o nome das instâncias extras mysql ou mariadb. Ele será mysql# ou mariadb#. O motivo é que mariadb e mysql percorrem por ele pelo seu GNR, o número ($i). Mas podemos dar às instâncias do servidor um nome diferente no phpMyAdmin com a opção "verbose".

    Neste exemplo, faremos 3 instâncias. Poderíamos dar à nossa 1ª instância o #1. Mas isso pode criar algumas dificuldades mais tarde com o phpmyadmin. Então, identificamos nossa primeira instância como #2 E aqui está como fazemos isso. : Primeiro, precisamos criar algumas pastas para as novas instâncias mariadb ou mysql.

    1: crie diretórios:

    sudo mkdir -p -v /var/lib/mysql{2..4} /usr/local/mysql/mdb{2..4} /var/log/mysql{2..4} /var/log/mysql 
    

    2: defina as permissões:

    sudo chown mysql:mysql -v /var/lib/mysql{2..4} /usr/local/mysql/mdb{2..4} /var/log/mysql{2..4} /var/log/mysql
    

    3: Vamos criar um arquivo de configuração mysqld_multi_cls.cnf para mariadb/mysql. Podemos fazer isso ao mesmo tempo em que abrimos o arquivo.

    sudo mousepad /etc/mysql/conf.d/mysqld_multi_cls.cnf
    

    4: Adicione o seguinte código:

    # Configuration Settings for mysqld_multi , as well as separate instances. 
    #
    [mysqld_multi]
    mysqld      = /usr/bin/mariadbd-safe
    mysqladmin  = /usr/bin/mariadb-admin
    User        = multi_admin
    Password    = multi_admin-password
    
    # InstanceA
    [mysqld2]
    socket              = /tmp/mysql.sock2
    port                = 3307
    pid-file            = /usr/local/mysql/mdb2/ansible-host1.pid2
    datadir             = /var/lib/mysql2
    general_log         = 1
    general_log_file    = /var/log/mysql2/general_ID2.log
    log-error           = /var/log/mysql2/error_ID2.log
    server-id           = 2
    expire-logs-days    = 72
    sync_binlog         = 1
    innodb_flush_log_at_trx_commit  = 1
    innodb_flush_method = O_DIRECT      
    binlog_format       = mixed
    gtid_strict_mode    = 1
    
    # InstanceB
    [mysqld3]
    socket              = /tmp/mysql.sock3
    port                = 3308
    pid-file            = /usr/local/mysql/mdb3/ansible-host1.pid3
    datadir             = /var/lib/mysql3
    general_log         = 1
    general_log_file    = /var/log/mysql3/general_ID3.log
    log-error           = /var/log/mysql3/error_ID3.log
    server-id           = 3
    expire-logs-days    = 64
    sync_binlog         = 1
    innodb_flush_log_at_trx_commit  = 1
    innodb_flush_method = O_DIRECT  
    binlog_format       = mixed
    gtid_strict_mode    = 1
    
    # InstanceC
    [mysqld4]
    socket              = /tmp/mysql.sock4
    port                = 3309
    pid-file            = /usr/local/mysql/mdb4/ansible-host1.pid4
    datadir             = /var/lib/mysql4
    general_log         = 1
    general_log_file    = /var/log/mysql4/general_ID4.log
    log-error           = /var/log/mysql4/error_ID4.log
    server-id           = 4
    expire-logs-days    = 64
    sync_binlog         = 1
    innodb_flush_log_at_trx_commit  = 1
    innodb_flush_method = O_DIRECT  
    binlog_format       = mixed
    gtid_strict_mode    = 1
    

    5: No terminal, inicie as novas instâncias do servidor. A primeira vez vai demorar um pouco, pois o mariadbd-multi vai instalá-las:

    sudo mariadbd-multi --defaults-file=/etc/mysql/conf.d/mysqld_multi_cls.cnf start 
    

    6: Depois de verificar se eles funcionam:

    sudo mariadbd-multi --defaults-file=/etc/mysql/conf.d/mysqld_multi_cls.cnf report
    

    Ou você pode usar:

    sudo mariadbd-multi report
    

    7: Essas instâncias não serão iniciadas quando seu computador inicializar. Não consegui encontrar uma maneira limpa e agradável de fazer isso por meio do próprio mariadbd/mysql. Mas podemos dar ao Linux um script para executar após a inicialização para iniciar as instâncias. E podemos fazer isso com o arquivo /etc/rc.local. Você pode não ver esse arquivo no seu explorer, mas podemos abri-lo pelo terminal:

    sudo nano /etc/rc.local
    

    Antes/Acima de "exit 0" adicione o seguinte:

    sudo mariadbd-multi --defaults-file=/etc/mysql/conf.d/mysqld_multi_cls.cnf --log=/var/log/mysql/multi_ins.log start
    

    Pressione "CTRL S" para salvar e "CTRL X" para fechar.

    Configurar a nova instância Queremos fazer o servidor salvar. Isso significa que precisamos excluir a conta root, pois é isso que os "hackers" vão tentar primeiro. Renomeá-la para "admin" também não é o que você chama de "segurança de alta classe". Mas você pode pular esta parte se quiser.

    1: No Terminal:

    sudo mariadb -A -S /tmp/mysql.sock2
    

    2: vamos verificar o número da porta apenas para ter certeza de que abrimos a instância correta:

    select @@port;
    

    3: Criar um usuário com autoridade total não é algo seguro, é claro. Mas vamos criar um de qualquer maneira :D

    CREATE USER 'NewUser'@'localhost' IDENTIFIED BY 'Super-Duper-Complicated-Password' ;
    

    4: Conceder "todos os privilégios" dará a ele o privilégio de criar, excluir, escrever, ler e tudo mais. O "With Grand Option" permite que esse novo usuário crie/dê a outros usuários certos privilégios.

    GRANT ALL PRIVILEGES ON *.* TO 'NewUser'@'localhost' WITH GRANT OPTION;
    

    5: Transfira as novas configurações para o sistema e feche.

    FLUSH PRIVILEGES;
    
    \q
    

    6: Agora entramos na instância mariadb novamente, mas dessa vez com nosso novo superusuário. E digitamos a Super-Duper-Complicated-Password quando solicitado.

    mariadb -A -u NewUser -p -S /tmp/mysql.sock2
    

    7: Vamos dar uma olhada nessa conta e criar um banco de dados:

    CREATE DATABASE testDB_instance07;
    
    
    show databases;
    

    8: Funcionou? Se sim, vamos continuar e excluir o usuário root.

    DROP USER 'root'@localhost;
    

    9: Uma coisa boa é ter uma conta separada que pode fechar um servidor. Vamos criar essa conta.

    CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multi_admin-password';
    
    GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
    
    FLUSH PRIVILEGES;
    

    Repita isso mais algumas vezes para suas outras instâncias.

    Configurar o servidor principal: 1: Poderíamos fazer exatamente o mesmo para o servidor principal. Criar uma nova conta e excluir root. Mas vamos fazer isso de forma diferente para o bem disso. Vamos renomeá-lo e alterar a senha.

    sudo mariadb -A -S /run/mysqld/mysqld.sock
    
    RENAME USER 'root'@'localhost' TO 'Batman'@'localhost';
    
    SET PASSWORD FOR 'Batman'@'localhost' = PASSWORD('New-Main-Super-Duper_Safe-Password');
    
    flush privileges;
    
    /q
    

    2: Agora fazemos login novamente com o novo nome de conta e criamos o multi_admin como antes:

    mariadb -A -u Nedry -p -S /run/mysqld/mysqld.sock
    
    CREATE USER 'multi_admin'@'localhost' IDENTIFIED BY 'multi_admin-password';
    
    GRANT SHUTDOWN ON *.* TO 'multi_admin'@'localhost';
    
    FLUSH PRIVILEGES;
    

    3: E configuramos algum registro para este servidor principal:

    SET GLOBAL general_log_file = '/var/log/mysql/general.log';
    
    SET GLOBAL slow_query_log_file = '/var/log/mysql/slow_query.log';
    
    SET GLOBAL general_log = 'ON';
    
    SET GLOBAL slow_query_log = 'ON';
    
    /q
    

    reiniciar Agora pode ser um bom momento para uma reinicialização feliz do seu sistema. E quando você voltar, veja se o servidor está rodando.

    sudo mariadbd-multi report
    

    E lembre-se do multi_admin. É assim que você pode fechar uma de suas instâncias.

    sudo mysqladmin -u multi_admin -p -S /tmp/mysql.sock3 shutdown
    

    Com o comando report anterior você pode verificar se funcionou.

    Agora adicione as instâncias mariadb ou mysql ao phpMyAdmin:

    Claro que você sabe como acessar o phpMyAdmin no seu navegador, mas aqui está o endereço só para garantir:

    localhost/phpMyAdmin

    1: Precisamos alterar o arquivo "config.inc.php". (Eu gosto do editor Geany para isso)

    sudo geany /var/www/html/phpMyAdmin/config.inc.php
    

    Você vê o seguinte?:

    /**
     * End of servers configuration
    */
    

    2: Passado o seguinte acima disso.

    $i = 2;
    $cfg['Servers'][$i]['verbose'] = 'Server-Name_A';
    $cfg['Servers'][$i]['host'] = '127.0.0.1';
    $cfg['Servers'][$i]['port'] = 3307;
    $cfg['Servers'][$i]['auth_type'] = 'cookie';
    $cfg['Servers'][$i]['AllowNoPassword'] = false;
    
    $i = 3;
    $cfg['Servers'][$i]['verbose'] = 'Server-Name_B';
    $cfg['Servers'][$i]['host'] = '127.0.0.1';
    $cfg['Servers'][$i]['port'] = 3308;
    $cfg['Servers'][$i]['auth_type'] = 'cookie';
    $cfg['Servers'][$i]['AllowNoPassword'] = false;
    
    $i = 4;
    $cfg['Servers'][$i]['verbose'] = 'Server-Name_C';
    $cfg['Servers'][$i]['host'] = '127.0.0.1';
    $cfg['Servers'][$i]['port'] = 3309;
    $cfg['Servers'][$i]['auth_type'] = 'cookie';
    $cfg['Servers'][$i]['AllowNoPassword'] = false;
    

    Vamos fazer uma reinicialização limpa e feliz.

    Agora você pode fazer login com suas contas Mysql/MariaDB no phpMyAdmin. Apenas lembre-se de preencher as credenciais corretas para o servidor selecionado no menu suspenso.

    Tenha um ótimo dia!

    • 0

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

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