Versões avaliadas: Debian 10.4 + MariaDB 10.3.22
Conforme orientações dos desenvolvedores do MariaDB a migração do MySQL para o MariaDB deve ser considerada e realizada, devido a vários motivos.
Em meu ambiente realizei a migração do MySQL 5.5 para MariaDB 10.3 e constatei melhora na performance em torno de 50% na resposta as solicitações SQL e no processamento local.
Instale o pacote
# apt install mariadb-server
Execute o comando mysql_secure_installation para inciar o processo de configuração:
# mariadb-secure-installation
Enter current password for root (enter for none): Press Enter
Switch to unix_socket authentication [Y/n] Press Enter
Change the root password? [Y/n] Press Enter e insira um novo password
Remove anonymous users? [Y/n] Press Enter
Disallow root login remotely? [Y/n] n e Press Enter
Remove test database and access to it? [Y/n] Press Enter
Reload privilege tables now? [Y/n] Press Enter
Redefina as permissões de acesso:
# mariadb -u root -p
> grant all privileges on *.* to root@'localhost' identified by '<SENHA>' with grant option;
> grant all privileges on *.* to root@'%' identified by '<SENHA>' with grant option;
> flush privileges;
Ajuste as configurações para executar o MariaDB para o server:
# vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
datadir=<Caminho novo local Storage>
port=3306 <- Opcional
skip_name_resolve
#bind-address= 127.0.0.1
max_connections = 161
table_definition_cache=800
max_heap_table_size=17M
tmp_table_size=17M
join_buffer_size=1M
slow_query_log
slow_query_log_file=/var/log/mysql/mariadb-slow.log
long_query_time=10
log-queries-not-using-indexes
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4' <- se existir data base antiga não funcionara com esta linha
innodb_buffer_pool_size=4G <- 80% memory
innodb_file_per_table=1
innodb_buffer_pool_instances=4 <- Inicialmente uma instancia por cada Giga de memória
innodb_log_file_size=512M
innodb_stats_on_metadata=0
optimizer_switch='index_condition_pushdown=off'
performance_schema=ON
performance-schema-instrument='stage/%=ON'
performance-schema-consumer-events-stages-current=ON
performance-schema-consumer-events-stages-history=ON
performance-schema-consumer-events-stages-history-long=ON
Enable ou Disable cache
# enable cache
query_cache_limit = 1M
query_cache_type = 1M
query_cache_size = 16M
# disable cache
query_cache_size = 0
query_cache_type = 0
Ajuste as configurações para executar o MariaDB para o client:
# vi /etc/mysql/mariadb.conf.d/50-client.cnf
[client]
default-character-set=utf8mb4
Ajuste as configurações para executar o MariaDB para o mysql-client:
# vi /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
[mysql]
default-character-set=utf8mb4
A próxima configuração é necessária caso o repositório de armazenamento do MariaDB seja alterado do local padrão /var/lib/mysql.
# systemctl stop mariadb.service
# mv /var/lib/mysql /mnt/resourceDB
# systemctl start mariadb.service
# mariadb-check -u root -p --all-databases
# systemctl restart mariadb.service
# systemctl status mariadb.service <- Confira se tudo esta ok
Em versões a partir da 10.1.8 é necessário ajustar a configuração no daemon mariadb.service caso o parâmetro datadir seja alterado na configuração do serviço MariaDB e colocado em algum diretório /home:
# vi /usr/lib/systemd/system/mariadb.service
De:
ProtectHome=true
LimitNOFILE=16384
Para:
ProtectHome=false
LimitNOFILE=infinity
# systemctl daemon-reload
Nota: Possivelmente deve ser ajustado a cada atualização.
Inicialize o serviço:
# systemctl restart mariadb.service
# systemctl status mariadb.service
Para Linux
# vi /home/backup
#!/bin/sh
DATE=`date +%Y%m%d%H%M%S`
HOST="localhost"
USER="root"
PASSWORD="mysql123"
DB1="mediawiki"
DB2="mysql"
DB3="zabbix"
mysqldump -h $HOST -u $USER -p$PASSWORD --all-databases | gzip > /home/backup/ALLBASE-$DATE.gz
mysqldump --opt -c -Q -x -h $HOST -u $USER -p$PASSWORD $DB1 | gzip > /home/backup/$DB1-$DATE.gz
mysqldump --opt -c -Q -x -h $HOST -u $USER -p$PASSWORD $DB2 | gzip > /home/backup/$DB2-$DATE.gz
mysqldump --opt -c -Q -x -h $HOST -u $USER -p$PASSWORD $DB3 | gzip > /home/backup/$DB3-$DATE.gz
OU
mysqldump --opt -c -Q -x -h $HOST -u $USER -p$PASSWORD $DB3 > /home/backup/$DB3-$DATE.sql
Ajuste a permissão do arquivo
# chmod 755 /home/backup
Para Windows
Criar o script
echo off
set user=root
set pass=<PASSWORD>
set DB01=mediawiki
set DB02=mysql
::set DB03=zabbix
"C:Program Files\MariaDB 10.3\bin\mysqldump.exe" -u %user% -p%pass% --all-databases > D:\MYSQL\backup\ALLDATABASE.bkp
"C:Program Files\MariaDB 10.3\bin\mysqldump.exe" --opt -c -Q -u %user% -p%pass% %DB01% > D:\MYSQL\backup\%DB01%.bkp
"C:Program Files\MariaDB 10.3\bin\mysqldump.exe" --opt -c -Q -u %user% -p%pass% %DB02% > D:\MYSQL\backup\%DB02%.bkp
::"C:Program Files\MariaDB 10.3\bin\mysqldump.exe" --opt -c -Q -u %user% -p%pass% %DB03% > D:\MYSQL\backup\%DB03%.bkp
Para Linux
# mariadb -u root -p < backup-file.sql
Nota: No caso acima o script possui a criação da base de dados por esse motivo não é informada a base.
# mariadb -u root -p db_name < backup-file.sql
Acesse o console do MariaDB para executar os comandos abaixo:
MariaDB [(none)]> show variables like "max_connections"; -> Mostra o valor da variável
MariaDB [(none)]> show status like 'Threads_connected'; -> Mostra o status de quantas conexões ativas no momento
MariaDB [(none)]> show status like '%onn%'; -> Mostra o status de todos as variáveis que contenham palavra onn
MariaDB [(none)]> show processlist; -> Mostra todos os processos
MariaDB [(none)]> set global max_connections = 160; -> Configura a variável conforme o valor
Instalar sys schema, acesse o link e baixe o script
$ mysql -u root -p -h <IP_DNS_SERVER> < ./mariadb_sys_install.sql
Pagina do projeto mysqltuner
Ajuste os parametros
[mysqld]
....
performance_schema=ON
performance-schema-instrument='stage/%=ON'
performance-schema-consumer-events-stages-current=ON
performance-schema-consumer-events-stages-history=ON
performance-schema-consumer-events-stages-history-long=ON
innodb_stats_on_metadata=0
Baixe o aplicativo
$ wget http://mysqltuner.pl/ -O mysqltuner.pl
$ wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv
$ wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
# apt install mariadb-client-10.3
Avaliar performance
$ perl mysqltuner.pl --host <IP_DNS_SERVER> --forcemem 10 --forceswap 10
[--] Skipped version check for MySQLTuner script
[--] Performing tests on <IP_DNS_SERVER>.com.br:3306
Please enter your MySQL administrative login: root
Please enter your MySQL administrative password: <SENHA>
[--] Assuming 10 MB of physical memory
[--] Assuming 10 MB of swap space
[OK] Currently running supported MySQL version 10.3.12-MariaDB-log
...
Avaliar vulnerabilidades
$ perl mysqltuner.pl --host <IP_DNS_SERVER> --forcemem 10 --cvefile=vulnerabilities.csv
REVER
CREATE- permite criar novas tabelas ou bases de dados
DROP- permite deletar tableas ou bases de dados
DELETE- permite deletar linhas das tabelas
INSERT- permite inserir linhas nas tabelas
SELECT- permite utilizar o comando Select para ler bases de dados
UPDATE- permite atualizar linhas das tabelas
GRANT OPTION- permite conceder ou revogar privilégios de outros usuários
SHOW GRANTS;
revoke insert,select,update from outro.tabela1 to teste2@"10.0.0.%";
GRANT UPDATE, INSERT ON rh.* TO remoto@"200.236.13.%" IDENTIFIED BY "remoto";
GRANT ALL PRIVILEGES ON * . * TO 'novousuario'@'localhost';
GRANT [tipo de permissão] ON [nome da base de dados].[nome da tabela] TO ‘[nome do usuário]’@'localhost’;
CREATE USER 'novousuario'@'localhost' IDENTIFIED BY 'password';
REVOKE [tipo de permissão] ON [nome da base de dados].[nome da tabela] FROM ‘[nome do usuário]’@‘localhost’;
DROP USER ‘demo’@‘localhost’;
mysql>GRANT ALL ON rh.* TO user@"192.168.0.%" IDENTIFIED BY "12345";
Neste caso, o MySQL cria em memória a lista dos usuários da seguinte forma:
Usuário Senha
root@localhost
" "@localhost
user@"192.168.0.%" 12345