segunda-feira, 31 de março de 2014

MySQLUserclone ou apenas Copie usuários do MySQL

Original post: http://anothermysqldba.blogspot.com/2014/04/mysqluserclone-or-just-copy-mysql-users.html


Recentemente, deparei com um pós MySQL Fórum que estava procurando como migrar os usuários para um novo sistema.

Enquanto isso poderia ser feito de várias maneiras, eu percebi que ele me deu a chance de jogar e demonstrar o mysqluserclone ferramenta.

Então, eu tenho dois bancos de dados e apenas um utilizador wiki:


root@localhost [(none)]> select VERSION();
+------------+
| VERSION() |
+------------+
| 5.6.10-log |
+------------+
root@localhost [(none)]> show grants for wikiuser@localhost;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for wikiuser@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wikiuser'@'localhost' IDENTIFIED BY PASSWORD '1e09502e61120480' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, LOCK TABLES ON `wikidb`.* TO 'wikiuser'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+

select VERSION();
+------------+
| VERSION() |
+------------+
| 5.5.30-log |
+------------+
show grants for wikiuser@localhost;
ERROR 1141 (42000): There is no such grant defined for user 'wikiuser' on host 'localhost'



Então agora usar a ferramenta mysqluserclone


Usage: mysqluserclone --source=user:pass@host:port:socket --destination=user:pass@host:port:socket joe@localhost sam:secret1@localhost

# mysqluserclone --source=root:<PASSWORD>@localhost:3306 --destination=root:@localhost:3307 wikiuser@localhost wikiuser@localhost
# Source on localhost: ... connected.
# Destination on localhost: ... connected.
# Cloning 1 users...
# Cloning wikiuser@localhost to user wikiuser@localhost
# ...done.

root@localhost [(none)]> select VERSION();
+------------+
| VERSION() |
+------------+
| 5.5.30-log |
+------------+
1 row in set (0.00 sec)

root@localhost [(none)]> show grants for wikiuser@localhost;
+-------------------------------------------------------------------------------------------------------------------+
| Grants for wikiuser@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wikiuser'@'localhost' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, LOCK TABLES ON `wikidb`.* TO 'wikiuser'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
Note que ele está faltando uma senha porque eu não definir uma senha para o usuário. Opps que não é bom o suficiente.

Concedido ele funciona muito bem se você quiser criar novas contas de usuário com as novas senhas. Eu poderia ter passado a nova senha como parte do comando clone

mysqluserclone --source=root:<PASSWORD>@localhost:3306 --destination=root:@localhost:3307 wikiuser@localhost wikiuser:<PASSWORD>@localhost


Mas e se eu não sei as senhas? Quero garantir que todos os clientes têm todos os seus mesmas senhas.

Eu também poderia fazer o processo abaixo.
  • Reunir subsídios do DB 1
  • Edite o arquivo de subvenções eu quero passar
  • Edite o arquivo de usuário adicionar comentários a fazer sql seguro
  • Carregar o arquivo no DB 2
select CONCAT('SHOW GRANTS FOR `',USER,'`@',HOST,';') as showgrants FROM mysql.user INTO OUTFILE '/tmp/showgrants.sql';

vi /tmp/showgrants.sql

mysql < /tmp/showgrants.sql > /tmp/user_grants.sql

vi /tmp/user_grants.sql
:%s/Grants for/#Grants for/g
:%s/\n/;\r/g
mysql --port=3307 -u root -p < /tmp/user_grants.sql
> show grants for wikiuser@localhost;
+----------------------------------------------------------------------------------------------------------+
| Grants for wikiuser@localhost |
+----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'wikiuser'@'localhost' IDENTIFIED BY PASSWORD '1e09502e61120480' |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, LOCK TABLES ON `wikidb`.* TO 'wikiuser'@'localhost' |
+----------------------------------------------------------------------------------------------------------+



Agora eu tenho o mesmo usuário, host e senha.

quinta-feira, 27 de março de 2014

Instalação WebScaleSQL tentou ... parte 1

Original post: http://anothermysqldba.blogspot.com/2014/03/webscalesql-installation-attempted-part.html

Bem, se você não ver a notícia, no entanto, em seguida, por todos os meios, siga este link e leia sobre WebScaleSQL . Muito obrigado para a equipe de engenheiros do Facebook, Twitter e Google para o seu trabalho duro para isso. Estou curioso para ver como isso se desenvolve mais no futuro, uma vez que fazê-lo funcionar.

Aqui está o que eu encontrei até agora. Eu queria que este é um blog de sucesso, em vez disso, fará parte um, até eu começar a correr.

Eu percebi que eu iria colocar um pouco de como instalar WebScaleSQL para aqueles de vocês de novo para Github nada disso. É preciso feedback da comunidade, afinal, para que a comunidade precisa ser capaz de instalar e experimentá-lo.

Para este exemplo eu tirei a imagem Virtual Box pré-construídas da Oracle Linux. Eu já tinha um, mas ele está disponível aqui: http://www.oracle.com/technetwork/server-storage/linux/downloads/vm-for-hol-1896500.html.

Deveria ser óbvio que WebScaleSQL não se destina para uso em um VirtualBox na produção, mas esta é apenas uma demonstração. Eu supus que isso significava que as pessoas não têm uma desculpa para experimentá-lo desde que qualquer um pode baixar e usar isso com o VirtualBox . Eu tinha que permitir que o disco adicional que vem com a imagem que você tem espaço suficiente. Para formatar, a partição e montar os discos de todos pode ser feito através do utilitário de disco. O produto final para o meu exemplo está abaixo.

[root@oraclelinux6 oracle]# ls -al /media/
drwx------ 3 oracle oracle 4096 Mar 27 16:19 webscaledisk
drwx------ 3 oracle oracle 4096 Mar 27 16:21 workspace
[root@oraclelinux6 oracle]# chmod 777 /media/workspace/
[root@oraclelinux6 oracle]# chmod 777 /media/webscaledisk/

O código para WebScaleSQL está disponível no Github . O arquivo zip pode ser baixado aqui . Eu escolho para verificar o código através dos métodos de repositório de código github. Se os outros precisam de ajuda com as chaves SSH ver a referência Gitbhub página .

O pacote git não está disponível no Oracle Linux, mas que é rapidamente resolvido, se você pretende usar a versão Github.

[oracle@oraclelinux6 ~]$ sudo bash
[root@oraclelinux6 oracle]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@oraclelinux6 oracle]# wget http://git-core.googlecode.com/files/git-1.7.10.1.tar.gz
[root@oraclelinux6 oracle]# tar -xvzf git-1.7.10.1.tar.gz
[root@oraclelinux6 oracle]# cd git-1.7.10.1
[root@oraclelinux6 git-1.7.10.1]# make prefix=/usr/local all
[root@oraclelinux6 git-1.7.10.1]# make prefix=/usr/local install
[root@oraclelinux6 git-1.7.10.1]# exit
$ git --version
git version 1.7.10.1

Uma vez git e as teclas ssh está pronto você pode baixar:

[oracle@oraclelinux6 ~]$ cd /media/workspace/
[oracle@oraclelinux6 workspace]$ git clone https://github.com/webscalesql/webscalesql-5.6.git
Cloning into 'webscalesql-5.6'...
remote: Counting objects: 28637, done.
remote: Compressing objects: 100% (10926/10926), done.
remote: Total 28637 (delta 17074), reused 28419 (delta 16936)
Receiving objects: 100% (28637/28637), 48.01 MiB | 796 KiB/s, done.
Resolving deltas: 100% (17074/17074), done.



OK então, contudo, você decidiu começar o código ... Deixa-nos agora tentar obtê-lo instalado. Para ser claro isso é deve nada de novo, esta é uma fonte MySQL instalação básica, mas é apenas o uso do pacote WebScaleSQL. Ele segue basicamente o mesmo procedimento que eu fiz aqui antes.

Eu precisava de algumas dependências sobre este sistema limpo primeiro. Você pode achar que você precisa de algum bem, tudo depende do seu sistema e do resultado do comando cmake abaixo.


[root@oraclelinux6 workspace]# yum -y install ncurses-devel readline-devel cmake gcc gcc-c++ bison-devel bison
[root@oraclelinux6 workspace]# wget http://googlemock.googlecode.com/files/gmock-1.6.0.zip
[root@oraclelinux6 workspace]# unzip gmock-1.6.0.zip
[root@oraclelinux6 workspace]# cd gmock-1.6.0
[root@oraclelinux6 gmock-1.6.0]# ./configure
[root@oraclelinux6 gmock-1.6.0]# make
[root@oraclelinux6 gmock-1.6.0]# make check
....
=====================================================
1 of 4 tests failed
Please report to googletestframework@googlegroups.com
=====================================================
make[2]: Leaving directory `/media/workspace/gmock-1.6.0/gtest'
make[1]: Leaving directory `/media/workspace/gmock-1.6.0/gtest'
OK para que a próxima fase (part 2) deve ser o seguinte uma vez que recebo o código do Google para o trabalho ...

Btw os denable_downloads deve baixar e instalar o gmock tão bem, mas ele também não.

[root@oraclelinux6 workspace]# groupadd mysql
[root@oraclelinux6 workspace]# useradd -r -g mysql mysql
[root@oraclelinux6 workspace]# ln -s /media/workspace/webscalesql-5.6/ /usr/local/mysql
[root@oraclelinux6 workspace]# chown -R mysql:mysql webscalesql-5.6/
[root@oraclelinux6 workspace]# cd webscalesql-5.6/
[root@oraclelinux6 webscalesql-5.6]# cmake -DENABLE_DOWNLOADS=1 .
make
make install
./scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data

Portanto, não apenas pronto ainda .. mas vou voltar com você toda vez que eu fazê-lo funcionar. Tenho fé que vou.

Instalação WebScaleSQL resolvido ... parte 2

quarta-feira, 26 de março de 2014

Percona NUVEM TOOLS

Original post: http://anothermysqldba.blogspot.com/2014/03/percona-cloud-tools.html

Então, eu realmente gosto do fato de que Percona está chegando e oferecendo soluções para ajudar a analisar as preocupações do MySQL ou problemas com cloud.percona.com .

É muito fácil de instalar. O caminho mais rápido é ter o repo Percona YUM instalado, eu tenho um outro blog sobre isso, se necessário, assim você terá o pt-agente instalado.

Isso foi feito facilmente, porque eu tinha um arquivo. My.cnf configurado para o usuário root, caso contrário, você tem que configurar o nome de usuário e senha.

Entrar em cloud.percona.com primeiro e depois ir e instalar o agente:

# pt-agent --install
Step 1 of 12: Verify the user is root: OK
Step 2 of 12: Check Perl module dependencies: OK
Step 3 of 12: Check for crontab: OK
Step 4 of 12: Verify pt-agent is not installed: OK
Step 5 of 12: Verify the API key:
Enter your API key: <API KEY HERE provided on the percona website>
Step 5 of 12: Verify the API key: OK
Step 6 of 12: Connect to MySQL: OK
Step 7 of 12: Check if MySQL is a slave: NO
Step 8 of 12: Create a MySQL user for the agent: OK
Step 9 of 12: Initialize /etc/percona/agent/my.cnf: OK
Step 10 of 12: Initialize /root/.pt-agent.conf: OK
Step 11 of 12: Create the agent: OK
Step 12 of 12: Run the agent: pt-agent has daemonized and is running as PID 16333:

--lib /var/lib/pt-agent
--log /var/log/pt-agent.log
--pid /var/run/pt-agent.pid

These values can change if a different configuration is received.
OK
INSTALLATION COMPLETE
Simples assim .. Então você só entrar novamente no site da Percona https://cloud.percona.com para ativar e ajustar qualquer uma das configurações do agente por sistema.

Dê-lhe cerca de 15 minutos para recolher a primeira quantidade de dados e, em seguida, você está pronto para ter os dados em suas pontas do dedo. Você só clicar no botão "Consultar Analytics" fornecido no site.

Dependendo do seu ramo de MySQL você terá diferentes análises, obviamente Percona prefere que você use Percona Servidor 5.5.34 ou superior, com suas ferramentas, mas funciona com todos os MySQL.

Uma vez que seu agente como dados enviados de volta para Percona, você será capaz de exibir gráficos no Resumo do Servidor por contagem de consulta, tempo de consulta, tempo de bloqueio, linhas enviadas, linhas examinados, comprimento de consulta, bem como informações fornecidas através do perfil de consulta.

"Filesort, filesort no disco, junte-se completa, Verificação completa, visitas cache de consultas, tabelas temporárias, tabelas temporárias no disco estão disponíveis apenas para Percona Server. " - cloud.percona.com

MySQL e OS X instalar e remover

Original post: http://anothermysqldba.blogspot.com/2014/03/mysql-and-os-x-install-and-remove.html

Portanto, esta é uma referência a este bug:
Acontece que eu deparar-lo assim que eu percebi que o Parreira testá-lo com 5.7 também.
Eu também era capaz de reproduzir este erro com a versão mais recente DMR. (No momento do teste mysql-5.7.3-m13) Eu estava usando o fornecido DMG eo arquivo tar.gz.

dyld: Symbol not found: _strnlen
Referenced from: /usr/local/mysql/bin/my_print_defaults
Expected in: /usr/lib/libSystem.B.dylib

A DMG tem um pouco agradável instalador e etc, mas como você pode ver que não funcionou.

Então, para testar a versão 5.5 você tem que remover o MySQL a partir OS X

rm -rf /usr/local/mysql*
rm -rf /Library/StartupItems/MySQLCOM
rm -Rf /private/var/db/receipts/*mysql*

Eu só precisava de quem, mas este site tem uma lista de outras referências, se você precisar dele.

Eu era capaz de confirmar que 5.5.36 não instalar e executar. Então, você está apenas fora de sorte para o momento, se você quiser uma versão superior do MySQL.

Uma nota .. Leia a tela de informação ou o arquivo readme.txt. Ele contém informações úteis.

mysql> select @@hostname;
+----------------------+
| @@hostname |
+----------------------+
| MacBook-Pro-15.local |
+----------------------+
1 row in set (0.01 sec)

mysql> select VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.5.36 |
+-----------+
1 row in set (0.00 sec)

terça-feira, 11 de março de 2014

Planejando o tempo de inatividade MySQL e outras variáveis ​​de estado para revisão

Original post: http://anothermysqldba.blogspot.com/2014/03/planning-mysql-downtime-and-other.html

Todos nós sabemos que, enquanto o MySQL é estável e pode funcionar por um tempo muito longo sem reiniciar. De vez em quando nós precisamos reiniciar a ele ajustar algumas variáveis ​​ou para atualizar embora. Alguns poderiam supor que durante a noite é o melhor momento para fazer isso, porque os seus usuários estão dormindo. No entanto, muitas vezes durante a noite também inclui backups e outros scripts crontab relatou que poderia estar fazendo diferente mineração de dados e etc

Então, como você pode obter uma orientação sobre quando você tem a menor atividade no servidor? Agora cada aplicação e banco de dados são diferentes, por isso você precisa levado em conta que a atividade relacionada está em execução, durante os prazos diferentes. Se você começar a registrar a variável de status "threads_connected" a cada minuto para 5 a 10 minutos, mais uma vez isso depende de como o sistema é carregado uma vez por hora pode ser bom, você vai em breve reunir a quantidade de diferentes conexões MySQL através de seu login de tempo quadro.

Isto pode ser feito de uma de numerosas maneiras. Ele já está previsto em muitas ferramentas de nível corporativo e você pode escrever scripts e etc, mas apenas para mantê-lo no MySQL. Vou usar um evento e de rotina para este exemplo simples.

Criar uma tabela simples:

CREATE TABLE `threads_count` (
`threads_count_id` int(11) NOT NULL AUTO_INCREMENT,
`variable_value` varchar(255) DEFAULT NULL,
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`threads_count_id`)
) ENGINE=InnoDB;

Criar uma rotina simples:

delimiter //
CREATE PROCEDURE threads_tally()
BEGIN
INSERT INTO threads_count SELECT NULL , VARIABLE_VALUE , NOW() FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME IN ('Threads_connected');
END//
delimiter ;

Criar um evento simples:

SET GLOBAL event_scheduler = ON;
CREATE EVENT `threads_tally`
ON SCHEDULE EVERY 5 MINUTE
DISABLE ON SLAVE
COMMENT 'keeps a count of Threads_connected'
DO
CALL threads_tally();
DELIMITER ;

Agora, mas a implementação do exemplo acima, você terá uma tabela que você pode selecionar os valores de (provavelmente colocado em um gráfico ou apenas para revisão), assim você pode ver quando o menor número de conexões existia em seu servidor. Dependendo da aplicação e do tráfego que você pode manter esta funcionando o tempo suficiente para ganhar uma perspectiva válida e, em seguida, desativar o evento.

select variable_value , time_recorded FROM threads_count;

Agora você pode naturalmente levar isso um passo adiante, se você não tem ferramentas da empresa, e manter um registro de todas as suas variáveis ​​de estado para a revisão:

Tabela para valores:

CREATE TABLE `status_review` (
`status_review_id` int(11) NOT NULL AUTO_INCREMENT,
`variable_name` varchar(255) DEFAULT NULL,
`variable_value` varchar(255) DEFAULT NULL,
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`status_review_id`)
) ENGINE=InnoDB;

Rotina para recolher os valores:

delimiter //
CREATE PROCEDURE status_reviews()
BEGIN
INSERT INTO status_review SELECT NULL , VARIABLE_NAME, VARIABLE_VALUE , NOW() FROM information_schema.GLOBAL_STATUS;
END//
delimiter ;

Evento para executar rotina:

SET GLOBAL event_scheduler = ON;
CREATE EVENT `status_reviews`
ON SCHEDULE EVERY 1 HOUR
DISABLE ON SLAVE
COMMENT 'keeps a eye on status values'
DO
CALL status_reviews();
DELIMITER ;

Você pode apenas querer certos nomes de variáveis ​​e valores para a revisão e você pode ajustar a consulta na rotina de acordo. O tempo de execução é dependente de suas necessidades, eu usei uma hora neste exemplo.

Isto, obviamente, que vai gerar uma grande quantidade de informações ao longo do tempo para que se relevante uma limpeza fora destas tabelas ao longo do tempo pode ser necessário. Tudo depende de quantas vezes você registrar e analisar as informações fornecidas.

Enquanto você vai ver um aumento constante de muitos dos valores por causa de seu crescimento de dados e sistema de usar, você também será capaz de identificar pontos de dados nos dados como e correlacionar isso com a sua aplicação e uso do sistema.

Empresa MySQL por exemplo, já cria um gráfico todo este tipo de informação para você, mas esta é uma maneira que você também pode fazê-lo com um pouco de tempo e revisão dos dados.