segunda-feira, 22 de julho de 2013

Bancos de dados MySQL Amostra

Original post http://anothermysqldba.blogspot.com/2013/07/mysql-sample-databases.html

Eu vi um post no forums.mysql.com site sobre os bancos de dados de amostra e eu pensei que talvez valesse a pena um post para dar uma visão geral para eles para os outros.

Os bancos de dados de exemplo podem ser encontrados aqui: http://dev.mysql.com/doc/index-other.html
Você pode carregar esses bancos de dados via linha de comando MySQL:

$ tar -vxf sakila-db.tar.gz
$cd sakila-db
$ mysql -u root -p < sakila-schema.sql
Enter password:
$ mysql -u root -p < sakila-data.sql
Enter password:

$ gzip -d world_innodb.sql.gz
$ mysql -u root -p -e "DROP SCHEMA IF EXISTS world";
Enter password:
$ mysql -u root -p -e "CREATE SCHEMA world";
Enter password:
$ mysql -u root -p world < world_innodb.sql
Enter password:

Você começa a idéia. De banco de dados exemplo Sakila tem o esquema da gota e CRIAR comandos esquema no arquivo então não há necessidade de fazer isso passo para esse esquema.

Você também pode usar o MySQL Workbench para carregar esses dados.
  • Criar um identificador de conexão à base de dados.
  • Utilize este identificador de conexão recém-criada para configurar uma instância Servidor de Administração.
  • Dê um duplo clique no seu novo exemplo.
  • Em Dados de exportação / Restore você deve ver uma importação de dados.
  • Importar de um arquivo Self-Contained
    • Caminho do arquivo será o local de sua sakila-schema.sql repita para sakila-data.sql
    • Você pode selecionar um esquema ou criar uma nova no caso do mundo.
    • Selecione Iniciar importação e então você estará na visão Import Progress.
Agora você tem acesso aos bancos de dados de amostra em seu banco de dados.

$ mysql -u root -p
> Uso sakila
> Mostrar tabelas;
> SELECT * FROM limite ator 3;
+ ---------- + ------------ + ----------- + ------------- -------- +
| Actor_id | primeiro_nome | last_name | last_update |
+ ---------- + ------------ + ----------- + ------------- -------- +
| 1 | PENELOPE | GUINESS | 2006-02-15 04:34:33 |
| 2 | NICK | WAHLBERG | 2006-02-15 04:34:33 |
| 3 | ED | CHASE | 2006-02-15 04:34:33 |
+ ---------- + ------------ + ----------- + ------------- -------- +
Via bancada:
  • Feche a aba de administração
  • Escolha o seu identificador de conexão sob o Desenvolvimento SQL
  • Você pode simplesmente digitar SELECT * FROM limite ator 3, e acertar o parafuso da iluminação.
  • Ou você pode digitar parte do comando e dê um duplo clique no nome da tabela ou os nomes das colunas para que ele preencha os nomes para você. Em seguida, selecione o parafuso de iluminação.
Agora você tem os dados para começar a jogar e aprender com ele.

Se você quiser adicionar tabelas para isso, você pode usar a linha de comando do MySQL ou SQL Desenvolvimento e clique direito em "quadros" sob o esquema de sua escolha e "criar nova tabela"

quarta-feira, 17 de julho de 2013

Dê uma olhada em suas variáveis ​​de estado em MySQL.

Original post: http://anothermysqldba.blogspot.com/2013/07/check-in-on-your-status-variables-in.html

Então você tem seu banco de dados em execução, bem como o esperado. 
Mas é? Poderia ser melhor operar? 

Quando foi a última vez que você verificou em algumas de suas variáveis ​​de estado? 

Algumas variáveis ​​de estado-chave para monitor são: 

Então, para colocá-lo simplesmente .... verificar o seu status!

segunda-feira, 15 de julho de 2013

MySQL Distribuições Pesquisa

Eu criei este geral MySQL Distribuições Pesquisa. Os resultados estarão disponíveis no final do estudo. Todas as perguntas são necessárias (apenas 4 questões)

Eu tentei direcionar cada pesquisa para a linguagem que este blog é apresentado dentro

Os resultados não estão indo para qualquer das distribuições MySQL, mas aqui para exibição pública.

Por favor, tome a pesquisa aqui:

http://www.surveymonkey.com/s/KTT3HYK

sexta-feira, 12 de julho de 2013

Exportar CSV diretamente do MySQL

Original post: http://anothermysqldba.blogspot.com/2013/07/export-csv-directly-from-mysql.html

 Primeiro um outro post no blog sobre isso é aqui:
Mas desde que eu vi essa postada no forums.mysql.com eu pensei que eu iria dar um pouco mais exemplo.

Portanto, para este exemplo, eu estou usando o banco de dados do mundo. Ele está disponível gratuitamente para download aqui:

mysql>desc City;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | MUL | | |
| District | char(20) | NO | | | |
| Population | int(11) | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+




mysql> SELECT ID, Name, CountryCode , District , Population
INTO OUTFILE '/tmp/City_data.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM City ;
Query OK, 4079 rows affected (0.04 sec)




# more /tmp/City_data.csv
1,"Kabul","AFG","Kabol",1780000
2,"Qandahar","AFG","Qandahar",237500
3,"Herat","AFG","Herat",186800
4,"Mazar-e-Sharif","AFG","Balkh",127800
5,"Amsterdam","NLD","Noord-Holland",731200
6,"Rotterdam","NLD","Zuid-Holland",593321
7,"Haag","NLD","Zuid-Holland",440900
8,"Utrecht","NLD","Utrecht",234323
9,"Eindhoven","NLD","Noord-Brabant",201843

quinta-feira, 4 de julho de 2013

ATUALIZAÇÃO OPÇÕES com LIKE e REGEXP SUBSTRING LOCALIZAR

Original post: http://anothermysqldba.blogspot.com/2013/07/update-options-with-like-regexp.html

Um post no fórum recente me fez parar e pensar por um momento .. 
http://forums.mysql.com/read.php?10, 589573,589573 # msg-589573 

O problema era que o usuário queria atualizar apenas a palavra audi e não a palavra auditor.
Foi resolvido, aproveitando o período de facilidade, uma vez eu parei de tentar usar SUBSTRING e localizar. Eles queriam uma solução rápida e fácil depois de tudo. 


root@localhost [test]> CREATE TABLE `forumpost` (
-> `name` varchar(255) DEFAULT NULL
-> ) ENGINE=InnoDB;

root@localhost [test]> insert into forumpost value ('An auditor drives an audi.'),('An auditor drives a volvo.');

root@localhost [test]> select * from forumpost;
+----------------------------+
| name |
+----------------------------+
| An auditor drives an audi. |
| An auditor drives a volvo. |
+----------------------------+ 


Então agora vamos atualizá-lo a maneira rápida e fácil, aproveitando o período 

root@localhost [test]>UPDATE forumpost SET name = REPLACE(name, 'audi.', 'toyota.') WHERE name LIKE '%audi.';
Query OK, 1 row affected (0.20 sec)
Rows matched: 1 Changed: 1 Warnings: 0

root@localhost [test]> select * from forumpost;
+------------------------------+
| name |
+------------------------------+
| An auditor drives an toyota. |
| An auditor drives a volvo. |
+------------------------------+ 


Mas ... o que acontece com as opções válidas de SUBSTRING e localizar ..... 


root@localhost [test]> insert into forumpost value ('An auditor drives an audi.');
root@localhost [test]> insert into forumpost value ('An auditor drives an audi car');
root@localhost [test]> select * from forumpost;
+-------------------------------+
| name |
+-------------------------------+
| An auditor drives an toyota. |
| An auditor drives a volvo. |
| An auditor drives an audi. |
| An auditor drives an audi car |
+-------------------------------+ 


Primeiro testar suas opções para que você se certificar de que você pode encontrar o que você está depois .. 


root@localhost [test]> SELECT * FROM forumpost WHERE name REGEXP 'audi car$';
+-------------------------------+
| name |
+-------------------------------+
| An auditor drives an audi car |
+-------------------------------+ 

root@localhost [test]> SELECT * FROM forumpost WHERE name LIKE '%audi car%';
+-------------------------------+
| name |
+-------------------------------+
| An auditor drives an audi car |
+-------------------------------+


Isso realmente não faz muito, uma vez que apenas mudou o prazo para a palavra carro.Então continue indo .... 

Precisamos retirar apenas a palavra audi a partir da linha com o carro audi. 

root@localhost [test]> SELECT SUBSTRING(name,-8,4), name FROM forumpost WHERE SUBSTRING(name,-8,4) = 'audi';
+----------------------+-------------------------------+
| SUBSTRING(name,-8,4) | name |
+----------------------+-------------------------------+
| audi | An auditor drives an audi car |
+----------------------+-------------------------------+ 


O SUBSTRING me permitiu puxar os 4 primeiros caracteres depois contei para trás oito caracteres a partir do final. 

Assim que se você não souber a localização dos personagens? 
Para começar, você deve rever seus dados para se certificar de que você sabe o que você está depois. Mas os personagens podem se mover em torno de sua seqüência, então vamos trabalhar com localizar. 

Eu vou adicionar outra linha apenas para testes. 

root@localhost [test]> insert into forumpost value ('An auditor drives an red audi car');
Query OK, 1 row affected (0.04 sec)

root@localhost [test]> select * from forumpost;
+------------------------------------+
| name |
+------------------------------------+
| An auditor drives an toyota. |
| An auditor drives a volvo. |
| An auditor drives an audi. |
| An auditor drives an audi car |
| An auditor drives an audi blue car |
| An auditor drives an red audi car |
+------------------------------------+ 


Portanto, independentemente do fim, podemos ver que a Audi sempre depois de auditor por isso só precisa pular sobre essa palavra. A palavra auditor é o primeiro caractere 8 para pular aqueles. 

root@localhost [test]> SELECT LOCATE('audi', name,8), name FROM forumpost WHERE LOCATE('audi', name,8) > 0 ;
+------------------------+------------------------------------+
| LOCATE('audi', name,8) | name |
+------------------------+------------------------------------+
| 22 | An auditor drives an audi. |
| 22 | An auditor drives an audi car |
| 22 | An auditor drives an audi blue car |
| 26 | An auditor drives an red audi car |
+------------------------+------------------------------------+ 


OK assim que nós encontramos os que são depois. Agora precisamos escrever a instrução de atualização. 

Nós não podemos usar o substituir neste momento. 

UPDATE forumpost SET name = REPLACE(name, LOCATE('audi', name,8), 'mercedes') WHERE LOCATE('audi', name,8) > 0 ;
Query OK, 0 rows affected (0.02 sec)
Rows matched: 4 Changed: 0 Warnings: 0 

Observe que encontrou as linhas, mas não muda nada. 

Então, tente de novo e eu não quero assumir a posição 8. Eu quero que o segundo valor da audi. 
Assim, um teste mostra que com SUBSTRING_INDEX posso pular o primeiro um e usá-CONCAT

SELECT name , CONCAT ( SUBSTRING_INDEX(name, 'audi', 2) , ' mercedes ' , SUBSTRING_INDEX(name, 'audi', -1) ) as newvalue
FROM forumpost
WHERE LOCATE('audi', name,10) > 0 ;
+-----------------------------------+-----------------------------------------+
| name | newvalue |
+-----------------------------------+-----------------------------------------+
| An auditor drives an audi. | An auditor drives an mercedes . |
| An auditor drives an audi. | An auditor drives an mercedes . |
| An auditor drives an audi car | An auditor drives an mercedes car |
| An auditor drives an red audi car | An auditor drives an red mercedes car |
+-----------------------------------+-----------------------------------------+

root@localhost [test]> UPDATE forumpost SET name = CONCAT(SUBSTRING_INDEX(name, 'audi', 2) , ' mercedes ' , SUBSTRING_INDEX(name, 'audi', -1) )
WHERE LOCATE('audi', name,10) > 0 ;
Query OK, 4 rows affected (0.03 sec)
Rows matched: 4 Changed: 4 Warnings: 0

root@localhost [test]> select * from forumpost;
+-----------------------------------------+
| name |
+-----------------------------------------+
| An auditor drives an mercedes . |
| An auditor drives a volvo. |
| An auditor drives an mercedes . |
| An auditor drives an mercedes car |
| An auditor drives an red mercedes car |
+-----------------------------------------+
5 rows in set (0.00 sec) 


Agora, concedido a gramática com o uso de "um" é inválido, mas isso é outra história. 

Mais informações sobre estes podem ser encontrados aqui: 

terça-feira, 2 de julho de 2013

Entenda seu servidor MySQL

Original post: http://anothermysqldba.blogspot.com/2013/07/understand-your-mysql-server.html

Achei que poderia ser útil para escrever algumas orientações para ajudar todos a compreender diferentes aspectos de sua servidor MySQL.

Estes dados foram recolhidos ao longo do tempo e eu farei o meu melhor para postos de referência. Em geral considera seus melhores fontes de informação para a lista:
Assim, para o propósito deste exemplo, vamos supor que você tenha acabado de assumir a responsabilidade por um servidor MySQL. Qual é a melhor maneira de reunir necessidade válida de saber informações ...

Você sabe a senha para o banco de dados? Se ele não estiver usando o mysql_config_editor (assim pre 5.6) você pode fazer um pouco de escavação para descobrir. Caso contrário, você tem de reiniciá-lo e forçar seu caminho para dentro Vamos supor que você não deseja reiniciá-lo. Se você tem que descobrir como utilizar - skip-grant-tables rever alguns posts anteriores com exemplos: http://anothermysqldba.blogspot.com/search/label/--skip-grant-tables

Então, primeiro colocado algum para procurar a senha. Isto também significa que se você fizer uma dessas pessoas pode encontrar a senha mais tarde.
  • descobrir se alguém usou a senha na linha de comando.
    • história | grep mysql
  • crontab-l
    • Se você ver os scripts de backup ou etc olhar para esses scripts para uma senha
  • localizar. my.cnf
  • . gato Bash_history | grep mysql
  • tentar mysql sem senha, mas, claro, a esperança é a sua caixa é seguro.
  • Com o MySQL 5.6 verificar se você tem uma conta configurada já
    • mysql_config_editor print - tudo
OK, então você tem as informações da conta e você está na caixa.
Antes de saltar para o servidor MySQL conhecer um pouco sobre o seu primeiro servidor.
Algumas dessas informações você pode apenas saber, mas para ser seguro.
Execute o seguinte em um sistema Linux, por exemplo, para obter o OS, Distro, Memória, as informações do disco.
  • cat / etc / *-release
  • uname-a
  • df-ah
  • montar
  • free-m
  • topo
  • Olhar sobre este post para informações Paginação http://www.mysqlplus.net/tag/swappiness/
  • Você tem um arquivo cnf específico que está sendo usado?
    • ps-ef | grep mysql | grep cnf
    • Datadir:
      • ps-ef | grep mysql | grep datadir

Então, agora saltar para o servidor MySQL e começar a recolher alguns dados. Enquanto uma revisão do arquivo my.cnf pode dar-lhe a maioria dessas informações você também pode recolhê-lo a partir do servidor.

show variables like '%log%';


Olhar sobre o seu erro (. Err) arquivo para rever todos os problemas. Este deve ser o primeiro lugar que você olha depois de um erro com o arranque e etc

Então, como é o servidor que está executando? Para reunir rapidamente o seguinte executar o comando status.
  • Versão
  • Threads
  • Perguntas
  • Consultas lentas
  • Abre
  • Tabelas de descarga
  • Mesas abertas
  • Consultas por segundo avg

mysql> status


O comando "mysqladmin extended-status" também pode dar-lhe informações para usar o grep com mas dentro do servidor também é válido.

Fique de olho nas informações a seguir.
Alguns destes também é postado aqui http://www.techrepublic.com/blog/opensource/10-mysql-variables-that-you-should-monitor/56

Você pode rever o post mencionado para ver uma bela tabela que explica alguns desses valores. Estes são os que eu acho que você deve ficar de olho no entanto.

> show status like 'Handler_read_first';
> show status like 'Key_reads';
> show status like 'Select_full_join';


Descubra a percentagem global de suas consultas são lento. Esperemos que este é um número pequeno.
Use as informações de status para preencher essas variáveis ​​para uma verificação rápida.

set @slow_queries=<value in the status output>;
set @questions=<value in the status output>;
SELECT ROUND(100* (@slow_queries / @questions),2) "Slow Query percentage" \G


Aprenda a entender a saída: Show de INNODB STATUS \ G
Fique de olho em informações impasse para que você possa começar a depurar aqueles.

O seu sistema tem gatilhos, eventos, procedimentos armazenados?

mysql> SELECT db, name FROM mysql.proc;
mysql> SELECT TRIGGER_SCHEMA , TRIGGER_NAME FROM information_schema.TRIGGERS ;
mysql> SELECT EVENT_NAME FROM information_schema.EVENTS ;


Conheça as suas variáveis ​​de servidor

show variables like '%innodb%';
show variables like '%thread%';
show variables like '%table%';
show variables like '%buffer%';
show variables like '%cache%';


Verifique suas contas de usuário.
Será que todos eles têm senhas válidas.

SELECT Host, User ,
CASE
WHEN CHARACTER_LENGTH(Password) = 16 THEN 'Pre-4.1 I should update this'
WHEN CHARACTER_LENGTH(Password) > 16 THEN 'Valid password'
WHEN CHARACTER_LENGTH(Password) =0 THEN ' BLANK PASSWORD so I just do not care if people steal my stuff'
END as Password
FROM mysql.user;


Entenda o seu arquivo de log InnoDB e descobrir um bom tampão tamanho da piscina.
Baron postou sobre isso aqui: http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/
Leia o post para entender mais sobre isso. Abaixo está um exemplo de como usar essas informações também. I usou seus números para o exemplo para ajudar. Como disse Baron, execute este quando o tráfego é pesado para obter informações válidas.

mysql>pager grep sequence; show engine innodb status\G select sleep(60); show engine innodb status\G pager;
mysql>SET @sequence1= 3836410803;
mysql>SET @sequence2= 3838334638;
mysql>select ( ( (@sequence2 - @sequence1) / 1024 / 1024 )* 60 ) /2 as innodb_log_file_size_used ;
mysql>select (@@innodb_log_file_size / 1024) / 1024 as current_log_file_MB_size;


Tamanho do buffer de piscina.
Enquanto a consulta a seguir é postado em torno da rede e dá um ponto de partida válido para uma área de buffer, também tenho visto alguns números inválidos ou irrealista baseados no servidor que tinha. Pessoalmente, rever os resultados da consulta abaixo. Reveja os resultados de pico de tráfego e os dados de quantidade que você está enviando para os logs por post do Barão. Em seguida, levar em conta o quanto de memória você tem no servidor. Quanto mais o seu banco de dados é executado na memória, mais rápido é para obter resultados, mas você tem que levar em conta o que mais é o banco de dados fazendo. Então você tem que usar seu próprio julgamento e pesquisa para obter um bom valor para o tamanho do buffer. Outra opção seria usar o tools.percona.com , responda às perguntas e ver o que ele vos disser.


mysql>select ( ( (@sequence2 - @sequence1) / 1024 / 1024 )* 60 ) *2 as innodb_buffer_pool_GB_test ;

mysql>SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 3 PowerOf1024) B \G



Em seguida, você deve rever esta arca blog aberto a cavar em seus índices e etc muito mais. Muita informação sobre esse post e local em geral.
http://code.openark.org/blog/mysql/useful-database-analysis-queries-with-information_schema


Para cavar mais dados sobre o servidor ....


Quais são os quadros mais antigos, talvez necessidade de arquivo desses?

SELECT CONCAT(`TABLE_SCHEMA`, "." , `TABLE_NAME`) as name , `UPDATE_TIME`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN ('information_schema','mysql','test','performance_schema') AND `UPDATE_TIME` IS NOT NULL ORDER BY `UPDATE_TIME` LIMIT 25;



O que está tomando mais espaço?

SELECT concat(table_schema,'.',table_name) table_name,
concat(round(data_length/(1024*1024),2),'M') data_length
FROM information_schema.TABLES
ORDER BY data_length DESC LIMIT 5;


Este é apenas um ponto de partida para que você possa entender o que está acontecendo com o seu servidor. Use os sites listados neste site para saber mais.