Para versões anteriores a 5.5
mysql> stop slave;
mysql> reset slave;
Para 5.5 ou superior:
mysql> stop slave;
mysql> reset slave all;
Desenvolvimento Web, Administração Linux e Curiosidades
Para versões anteriores a 5.5
mysql> stop slave;
mysql> reset slave;
Para 5.5 ou superior:
mysql> stop slave;
mysql> reset slave all;
Disponho de uma tabela de controle de IP’s dos servidores, de modo que possa saber rapidamente qual IP possui cada servidor, qual ip será usado ao efetuar deploy de uma nova vm, serviços, etc.
Estava tendo um problema ao editar essa tabela, pois ao efetuar uma consulta pelo range (no caso trabvalho com vários /24), os valores vinham desordenados, abaixo a query e resulta para melhor compreensão:
SELECT * FROM `TABELAIP` WHERE `ip` LIKE 'XXX.XX.XXX.%' ORDER BY `ip` ASC
Resultado:
XXX.XX.XXX.0
XXX.XX.XXX.1
XXX.XX.XXX.10
XXX.XX.XXX.100
XXX.XX.XXX.101
XXX.XX.XXX.102
XXX.XX.XXX.103
XXX.XX.XXX.104
XXX.XX.XXX.105
XXX.XX.XXX.106
XXX.XX.XXX.107
XXX.XX.XXX.108
XXX.XX.XXX.109
XXX.XX.XXX.11
XXX.XX.XXX.110
XXX.XX.XXX.111
…
No caso eu precisava que viessem na ordem certa, ou seja, final .1, final .2, final .3, etc
Para resolver isso, primeiramente “quebrei” a string do IP pelo ponto, buscando o último octeto, só que isso por sí só não bastava, pois mesmo tendo só o IP, o campo continuava a ser do tipo string, e para organização deste tipo no mysql, era necessário decimal, então resolví usando CASTING no mysql, eis a consulta:
SELECT *, CAST(SUBSTRING_INDEX(ip, '.', -1) as DECIMAL) as final FROM `TABELAIP` WHERE `ip` LIKE 'XXX.XX.XXX.%' ORDER BY `final` ASC
E finalmente o resultado desejado:
XXX.XX.XXX.0
XXX.XX.XXX.1
XXX.XX.XXX.2
XXX.XX.XXX.3
XXX.XX.XXX.4
XXX.XX.XXX.5
XXX.XX.XXX.6
XXX.XX.XXX.7
XXX.XX.XXX.8
XXX.XX.XXX.9
XXX.XX.XXX.10
XXX.XX.XXX.11
XXX.XX.XXX.12
XXX.XX.XXX.13
…..
Dica básica, mas tem gente que se embanana com isso.
Cenário: Criar uma base de dados chamada mydb, criar um usuário chamado myuser com permissão de acesso total a esta base de dados e acesso somente a localhost.
Primeiramente conectamos ao mysql como root e criamos a base de dados mydb
mysql -u root -pMinhaSenhA create database mydb;
Agora uma dica legal, da pra criar usuários mysql apenas adicionando permissões. basicamente quando tu manda um grant e o usuário não existe, o mysql cria ele automaticamente… sabendo usar isso é muito bom 😉
Agora criamos então o usuário e adicionamos permissão as interfaces loopback 127.0.0.1, localhost e ::1 (loopback ipv6)
mysql u root -pMinhaSenhA GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost' IDENTIFIED BY 'MinhaSenhA'; GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'127.0.0.1' IDENTIFIED BY 'MinhaSenhA'; GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'::1' IDENTIFIED BY 'MinhaSenhA';
Agora testamos o acesso, deve ser exibido somente a base mydb e information_schema (no meu caso aparece também uma base do capeta chamada test que o ubuntu criou automaticamente, mas nada qe um “drop database test;” não resolva)
mysql -u myuser -pMinhaSenhA Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 70 Server version: 5.5.20-0~ppa1~oneiric (Ubuntu) Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | test | +--------------------+ 3 rows in set (0.00 sec)
Agora sim, tudo criado e funcionando! 😉
Estou estudando a tecnologia oracle, as soluções são realmente interessantes principalmente com “oracle rac”.
Algumas coisas impressionam, como por exemplo, você está fazendo uma query usando um dos nós do cluster, se o servidor reboota, ou da algum problema, ele roteia automaticamente para o próximo nó e continua a query do ponto que parou, fizemos testes e de fato isso e real, a query para por alguns poucos segundos e depoi segue a execução normalmente.
Fiz um for simples em php para inserção de 10000 registros (sim tem maneiras melhor de inserir, mas era um teste simples) numa tabela chamada “teste” possuindo dois fields:
-> id int key –> sem auto-increment
-> reg varchar(50)
Trecho do código que usei para o for (em oracle)
for($i=1;$i<=10000;$i++) { $sql = "INSERT INTO country(id, pais) VALUES('".$i."', 'registro-".$i."')"; $oracle->query($sql); }
Trecho do código em php
for($i=1;$i<=10000;$i++) { $sql = "INSERT INTO country(id, pais) VALUES('".$i."', 'registro-".$i."')"; mysql_query($sql, $link); }
utilizei a função time() do php para medir o timestamp inicial e final, a diferença deles é o tempo da operação em segundos.
Resultados:
–> inicio e fim são timestamp, tempo total em segundos
Oracle:
INICIO: 1316194690
FIM: 1316194729
Tempo Total: 39
Espaço ocupado: 500kbMySQL INNODB:
INICIO: 1316194769
FIM: 1316194772
Tempo Total: 3
Espaço ocupado: 416KbMySQL MyISAM:
INICIO: 1316194854
FIM: 1316194857
Tempo Total: 3
Espaço ocupado: 336.99Kb
Conclusão:
Foi um teste muito simples para afirmar qual é o melhor, mas podemos ver que para operações simples, o mysql é quase 10 vezes mais rápido e ocupa menos espaço em disco.
Porém é fato sabido que o mysql perde performance na medida em que a quantidade de dados vai crescendo, já no oracle, quando isto acontece ele se mantem estável (com perda mínima, ou sem de performance).