* Versões utilizadas: Debian 8.5(Jessie) AMD64 + MySQL-5.5.52
* Baixar os pacotes no servidor
# apt-get install mysql-server mysqltuner
* Liberar acesso para qualquer rede
# vi /etc/mysql/my.cnf ou # vi /etc/mysql/mysql.conf.d/mysqld.cnf
datadir = /home/mysql <- local de armazenamento da databases
bind-address = 0.0.0.0 <- Alterar a linha
* Acesse o console do MySQL e ajustar permissões de acesso
# mysql -u root -p
mysql> grant all privileges on *.* to root@'10.0.%' identified by '<SENHA>' with grant option;
Nota: Defina os acessos dos clientes por IP e não por nomes DNS
* Reinicie o serviço
# /etc/init.d/mysql restart
* Usar IP para identificar os hosts ao invés de hostname
* Existem dois scripts que realizam verificação de ambiente e mostra melhoria a serem realizadas na configuração do my.cnf, são: MySQLTunner e MySQLTuningPrimer
MySQLTunner
* Baixar o MySQLTunner script link no abaixo:
# wget http://mysqltuner.pl/ -O mysqltuner.pl
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
# wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
* Executar o script
# perl mysqltuner.pl
* Resultado a ser observado
-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
Restrict Host for user@% to user@SpecificDNSorIp
MySQL started within last 24 hours - recommendations may be inaccurate
Enable the slow query log to troubleshoot bad queries
Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
Variables to adjust:
query_cache_type (=0)
innodb_file_per_table=ON
innodb_buffer_pool_size (>= 6G) if possible.
innodb_log_file_size should be equals to 1/4 of buffer pool size (=32M) if possible.
* Execute as melhorias informadas acima.
* Nos parâmetros innodb é necessário apagar os arquivos ib_logfile*, serão gerados na próxima inicialização.
MySQLTuningPrimer
* No link é possível baixar o script
Desfragmentação
* Este comando pode demorar para finalizar, portanto execute fora do horário.
# mysqlcheck -u root -p --auto-repair --check --optimize --all-databases
* No link do site do Percona realize o cadastro e configure uma versão de my.cnf para seu ambiente.
* Realizado ajustes iniciais no arquivo my.cnf
[isamchk]
key_buffer = 64M <- qtdd memória para realizar consultas
[mysqld]
table_cache = 200 <- dobro max connection
max_connections = 100 <- qtdd conexões simultâneas
query_cache_type = 0
skip-name-resolve = 1
log-slow-queries = /var/log/mysql/mysql-slow-queries.log
long_query_time = 1
default-storage-engine = MyISAM
innodb = OFF
tmp_table_size = 1G <- e/ou
max_heap_table_size = 128M <- e/ou
read_rnd_buffer_size = 4096KB <- para um server com 8GB de memoria- 1 K por Mega
* Remover MySQL
# apt-get remove --purge mysql-server mysql-common mysql-client
* Remover o diretorio de armazenamento
# rm -rf /var/lib/mysql
* Remover MySQL
# apt-get install mysql-server mysqltuner
* O script abaixo ajusda a automatizar a os comandos de backup
* Remover MySQL
# vi /home/backup.sh
#!/bin/sh
HOST="<127.0.0.1>"
USER="root"
PASSWORD="<SENHA>"
DB1="mysql"
DB2="Nome_DB"
DB3="Nome_DB"
mysqldump -h $HOST -u $USER -p$PASSWORD --all-databases | gzip > /home/backup/ALLBASE.gz
mysqldump --opt -c -Q -x -h $HOST -u $USER -p$PASSWORD $DB1 | gzip > /home/backup/$DB1.gz
mysqldump --opt -c -Q -x -h $HOST -u $USER -p$PASSWORD $DB2 | gzip > /home/backup/$DB2.gz
mysqldump --opt -c -Q -x -h $HOST -u $USER -p$PASSWORD $DB3 | gzip > /home/backup/$DB3.gz
* Altere a permissão do arquivo
# chmod 755 /home/backup.sh
* Agendando o Backup utilizando o crontab
# crontab -e
50 10 * * * /home/backup.sh
* Para restaurar qualquer base execute:
# mysql -u root -p
senha
mysql> CREATE DATABASE DB1;
mysql> quit
# descompactar
# mysql -u root -pSENHA -h localhost DB1 < DB1_arquivo
* Para restaurar qualquer base execute:
# mysql -u root -p
senha
mysql> grant all privileges on *.* to root@'10.0.%' identified by '<senha>' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
1 / 2 / 3 / 4 / 5