Instalando MySQL 5.5 Parte 2 – Multiplas instancias com mysqld_multi

Dando continuidade ao nosso post anterior, hoje vamos subir varias instâncias do MySQL em um mesmo servidor, pratica muito comum hoje em dia, ao invés de criar uma única instância com 100% dos recursos do servidor, se divide a carga de QPS (querys por segundo) entre várias instâncias.
O mysqld_multi irá procurar por grupos [mysqldN] dentro do nosso arquivo de configurações my.cnf, onde N é um numero inteiro que será utilizado posteriormente para referenciarmos qual servidor vamos dar START STOP ou visualizar o REPORT

  1. Já temos a seguinte estrutura em nosso servidor:
    |_3306/
      |_data/
      |_logs/
  2. Vamos criar a estrutura da instância 3307 e ajustar os direitos dela:
    mkdir 3307
    mkdir 3307/data
    mkdir 3307/logs
    chown -R mysql:mysql /mysql/3307
  3. Criaremos agora a estrutura padrão do banco pelo script contido na pasta mysql
    cd /mysql/mysql/scripts/
    ./mysql_install_db --user=mysql --basedir=/mysql/mysql --datadir=/mysql/3307/data/
  4. Lembrando que devemos estar atentos para receber os 2 OK’s abaixo:
    Installing MySQL system tables...
    OK
    Filling help tables...
    OK
  5. Feito isso, vamos ao nosso arquivo de configuração, o my.cnf, hoje ele está assim:
    [mysqld]
    datadir=/mysql/3306/data
    socket=/mysql/3306/mysql.sock
    user=mysql
    [mysqld_safe]
    log-error=/mysql/3306/logs/mysqld.log
    pid-file=/mysql/3306/mysqld.pid

    Agora vamos adicionar um novo grupo, chamado de [mysqld_multi] nele vamos colocar 3 itens:
    mysqld – caminho para o nosso binário mysql, sugiro aqui, colocar o caminho para o mysqld_safe
    mysqladmin – caminho para o binário mysqladmin, ele é utlizado para parar as instâncias
    E também vamos adicionar os grupos [mysqldN] que são semelhantes ao antigo [mysqld] onde ficarão os dados específicos de cada instância, no nosso caso, vamos subir o [mysqld1] e [mysqld2] ficando assim então o nosso my.cnf:

    [mysqld_multi]
    mysqld = /mysql/mysql/bin/mysqld_safe
    mysqladmin = /mysql/mysql/bin/mysqladmin
    [mysqld1]
    port = 3306
    datadir = /mysql/3306/data
    socket = /mysql/3306/mysql.sock
    log-error = /mysql/3306/logs/mysqld.log
    pid-file = /mysql/3306/mysqld.pid
    [mysqld2]
    port = 3307
    datadir = /mysql/3307/data
    socket = /mysql/3307/mysql.sock
    log-error = /mysql/3307/logs/mysqld.log
    pid-file = /mysql/3307/mysqld.pid
  6. Agora então, vamos a parte que interessa, subir as nossas instâncias, temos apenas que entrar na pasta onde estão os binários, chamar o mysqld_multi passar o arquivo de configuração e a opção desejada, neste caso o START :
    cd /mysql/mysql
    mysqld_multi --defaults-file=/mysql/my_rep.cnf start
    Pronto, se tudo deu certo devemos receber a mensagem abaixo:
    110511 07:57:10 mysqld_safe Logging to '/mysql/3306/logs/mysqld.log'.
    110511 07:57:10 mysqld_safe Starting mysqld daemon with databases from /mysql/3306/data
    110511 07:57:10 mysqld_safe Logging to '/mysql/3307/logs/mysqld.log'.
    110511 07:57:10 mysqld_safe Starting mysqld daemon with databases from /mysql/3307/data

    Lembrando que o mysqld_multi tem mais duas opções, uma delas é o report, que vamos digitar mysqld_multi --defaults-file=/mysql/my_rep.cnf report e ele vai nos dizer quais os grupos estão rodando:
    MySQL server from group: mysqld1 is running
    MySQL server from group: mysqld2 is running

    E a outra é a opção STOP, lembrando que ela utiliza o mysqladmin teremos que passar após o arquivo de configuração o nome de usuário e senha que tenha acesso para shutdown com as opções --user e --password neste caso, estou com o usuário root sem senha, então o comando ficará assim:
    mysqld_multi --defaults-file=/mysql/my_rep.cnf --user=root stop
    Teremos que receber a mensagem dizendo que o PID FILE foi encerado:
    110511 08:02:17 mysqld_safe mysqld from pid file /mysql/3306/mysqld.pid ended
    110511 08:02:17 mysqld_safe mysqld from pid file /mysql/3307/mysqld.pid ended
  7. lembrando que podemos especificar qual grupo estamos querendo fazer o manager, por exemplo, caso eu queira subir somente a instância especificada em [mysqld2] o comando ficaria assim:
    mysqld_multi --defaults-file=/mysql/my_rep.cnf start 2É isso aí pessoal, mais informações podem ser adquiridas na Documentação do MySQL , qualquer dúvida ou sugestão, comentem!!!
Gostou ? Ajude e Compartilhe!
Esta entrada foi publicada em instalação, MySQL, mysqld_multi. Adicione o link permanente aos seus favoritos.
  • JediPinguim

    Parabéns pelo artigo e pelo blog.

  • JediPinguim

    Marcelo,

    Só não entendi pq você utilizou o /mysql/my_rep.cnf invés do /mysql/my.cnf

    Mesmo assim, parabéns.

    • marceloaltmann

      Opa, quanto ao arquivo de configuracao nao tem nada em especial referente ao nome, tu pode utilizar o nome que quiser, basta apontar o arquivo certo no parametro –defaults-file, caso tu crie teu arquivo .cnf em /mysql/my.cnf quando der o start no mysqld_multi tu tem que passar ele no defaults file –defaults-file=/mysql/my.cnf

      Abs!

  • J.

    hi,

    I using Rhel 6.2 and mysql version 5.1.x now i m going to configure mysql multiple instances with mysqld_multi. but i want that first instance i can able to login through remote but second instance how to connect from remote. and mysqld_multi should start automatically at the booting time. please suggest to mail id also.

    • marceloaltmann

      Hi,
      In order to remotely connect to the second instance, you need to make sure you are passing the right port parameter on mysql command line tool (-P or –port).

      to start mysqld_multi at boot time you can copy the mysqld_multi.server file located at BASE_DIR/support-files to /etc/init.d and then run chkconfig mysqld_multi.server on.

  • Keith Gibson

    Can you tell me if it’s possible to have multiple instances of MySQL 5.5 SPECIFICALLY, WITH EACH ADDITIONAL INSTANCE HAVING A UNIQUE ROOT PASSWORD?
    If so, do you have a blog that shows the “cmd line” for setting the root password for each additional instance?