terça-feira, 10 de setembro de 2013

mysqld_multi

Original post: http://anothermysqldba.blogspot.com/2013/09/mysqldmulti.html

Então, eu estava recentemente trabalhando com mysqld_multi e eu percebi que isso era uma característica que eu não vejo em muitos posts esses dias. Eles existem e eu listei alguns no final deste post para sua referência.

Suas razões são susceptíveis de variar e também ser discutível quando se trata do conceito de: deve executar mais de uma instância MySQL no mesmo hardware.

Para evitar qualquer confusão, se você quiser instalar outra instância MySQL para fins de teste e não como uma instância de produção, então você deve apenas trabalhar com MySQL Sandbox . Se isso, por algum motivo isso não funcionar, você pode executar outro servidor como muitas pessoas costumam fazer: criar novos arquivos my.cnf e inicie o servidor MySQL com o mysqld_safe e comandos personalizados.

Mysqld_multi torna muito mais fácil para você executar diversos servidores.

Por exemplo:
Você tem um servidor secundário em execução na porta 3306. É um read_only escravo e você tem um monte de hardware no lugar esperando para se tornar o novo servidor primário quando a corrente primária falhar. Você também gostaria de aproveitar a Percona kit de ferramentas e ter um servidor secundário replicado que está sendo executado em um modo atrasado. Se você pode atualizar para o MySQL 5.6 , então você não precisaria pt-slave-delay , mas atualmente isso não é uma opção.

Em ambos os casos, você tem limites orçamentários e não são permitidos outro servidor. Então você desistir? Você tem o espaço em disco para armazenar outra versão do servidor em sua caixa de secundária por que não? A idéia de ter que iniciar e parar versões personalizadas e etc pode ser fora da colocação de alguns. Então, em vez disso você pode configurar uma nova versão do arquivo my.cnf, mas primeiro você pode fazer o seguinte.

Escolha o seu editor favorito (ou seja: vi)
vi /etc/multi_my.cnf
[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = mysql
log = /var/log/multi_mysql.log

# Port 3306 Server
[mysqld1]
>socket = /tmp/mysql_3306.sock
port = 3306
pid-file = /var/lib/mysql/mysql_3306.pid
datadir = /var/lib/mysql/
user = mysql
Agora você pode ter a seção [mysqld] do seu arquivo my.cnf e copiá-lo para este local.

cat /etc/my.cnf >> /etc/multi_my.cnf
Se você usar o comando acima de edição para limpar assim você só tem a seção [mysqld] copiados.

Você pode, então, criar a seção porta 3307.
# Port 3307 Server
[mysqld2]
socket = /tmp/mysql_3307.sock
port = 3307
pid-file = /var/lib/mysql2/mysql_3307.pid
datadir = /var/lib/mysql2/
user = mysql
E exemplo de configuração podem ser encontrados aqui:
http://dev.mysql.com/doc/refman/5.6/en/mysqld-multi.html

Para este exemplo vou supor que você vai criar um backup de servidor Porto 3306 com Percona Xtrabackup e colocá-lo no novo datadir.
innobackupex --defaults-file=/etc/my.cnf --user=root --password=<password> --port=3306 --no-timestamp /var/lib/mysql2/
innobackupex --apply-log /var/lib/mysql2/
Agora você pode testar isso agora com o binário mysqld_multi (/ usr / bin / mysqld_multi) ou configurar a iniciar e parar o script. Um modelo vem com o MySQL instalação: / usr / share / mysql / mysqld_multi.server

Você pode copiar isso para o diretório init.d ou testá-lo a partir da localização actual.
O script será o padrão para o arquivo / etc / my.cnf. Então, para começar a testar isso com o - default_file relatório = / etc / multi_my.cnf

A opção de relatório é semelhante ao argumento de status para ver se o servidor está em execução. Se você optar por executar este como o processo padrão, você pode ligar simbolicamente ou copiar o / etc / multi_my.cnf como o novo / etc / my.cnf
/etc/init.d/mysqld_multi.server report 1,2
/etc/init.d/mysqld_multi.server report 1
/etc/init.d/mysqld_multi.server report 2

O código acima, em seguida, dar-lhe execução de status para cada argumento de dar esse curso de referências para uma instância MySQL diferente. Você pode fazer o mesmo a todas as seguintes opções: {start | stop | relatório | restart}

Se tudo correu bem, você pode "começar a 2", que irá iniciar a instância na porta 3307. Em seguida, faça o login e mudar mestre com a informação da posição do log binário fornecido no arquivo xtrabackup_binlog_info.
CHANGE MASTER TO
MASTER_HOST='localhost',
MASTER_PORT=3306,
MASTER_LOG_FILE='<log filename>',
MASTER_LOG_POS=<position>;

Start slave;
Até agora você tem uma cópia de seu servidor escravo secundário. Se estiver usando pt-slave-delay você pode executar o seguinte comando, o padrão é uma hora de atraso.
pt-slave-delay --port=3307 --socket=/tmp/mysql_3307.sock --host=localhost

Espero que este pode pelo menos começar.