Para melhor visualização, recomendo resolução de no mínimo 1280 x 800 e navegador Mozilla Firefox


sexta-feira, 17 de agosto de 2018

MySQL - Conversão de tabelas MYISAM para INNODB

Por Eduardo Legatti

Olá,

Diferente da engine INNODB que armazena em buffer de memória, tanto blocos de dados de tabelas, quanto blocos de dados de índices, a engine MYISAM armazena em buffer de memória apenas dados de blocos de índices. Com a evolução da engine INNODB ao longo do tempo, a mesma vem oferecendo muitos recursos das quais a engine MYISAM não é capaz de oferecer. Em relação aos níveis de locks, a engine MYISAM possui tratamento de lock apenas no nível de tabela:

  • SELECTs travam UPDATEs, DELETEs mas não INSERTs
  • INSERTs, UPDATEs, DELETEs travam todas as instruções SQL

A engine INNODB oferece tratamento de locks no nível de linhas de tabelas, além de prover recursos como Foreign Keys que ajudam o otimizador do banco de dados a encontrar melhores planos de execução para os SQLs que são executados. A engine INNODB é compatível com as propriedades ACID oferecendo recursos transacionais, além de ser mais seguro que a engine MYISAM no que se refere a corrupção de dados em caso de falhas. Em relação ao parâmetros de configuração, somente a engine INNODB oferece parâmetros de ajustes finos. Segue abaixo uma tabela comparativa.


 
No mais, irei selecionar todas as tabelas MYISAM do banco de dados bd01.

mysql> SELECT CONCAT('ALTER TABLE `',table_schema,'`.`',table_name,'` ENGINE=InnoDB;')
    ->   FROM information_schema.tables
    ->  WHERE table_schema='bd01'
    ->    AND engine='MyISAM';
+--------------------------------------------------------------------------+
| CONCAT('ALTER TABLE `',table_schema,'`.`',table_name,'` ENGINE=InnoDB;') |
+--------------------------------------------------------------------------+
| ALTER TABLE `bd01`.`tbl01` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl02` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl03` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl04` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl05` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl06` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl07` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl08` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl09` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl10` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl11` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl12` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl13` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl14` ENGINE=InnoDB;                                |
| ALTER TABLE `bd01`.`tbl15` ENGINE=InnoDB;                                |
+--------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Como exemplo irei converter a tabela tbl01 para a engine INNODB conforme o comando a seguir.

mysql>  ALTER TABLE `bd01`.`tbl01` ENGINE=InnoDB;
Query OK, 61 rows affected (0.23 sec)
Records: 61  Duplicates: 0  Warnings: 0


Dependendo do tamanho da tabela a ser convertida, o processo pode demorar um pouco. Neste caso, é possível verificar a sessão que está realizando a conversão conforme demonstrado abaixo.
 
mysql> show full processlist;
+----+------+---------------------+------+---------+------+-------------------+----------------------------------+
| Id | User | Host                | db   | Command | Time | State             | Info                             |
+----+------+---------------------+------+---------+------+-------------------+----------------------------------+
|  5 | root | localhost           | bd01 | Sleep   |  804 |                   | NULL                             |
|  6 | root | localhost           | NULL | Query   |    0 | starting          | show full processlist            |
|  7 | root | 192.168.56.51:49970 | bd01 | Sleep   |  103 |                   | NULL                             |
|  8 | root | 192.168.56.51:49971 | NULL | Sleep   | 9838 |                   | NULL                             |
| 14 | root | localhost           | bd01 | Query   |   15 | copy to tmp table | alter table tbl01 engine innodb  |
+----+------+---------------------+------+---------+------+-------------------+----------------------------------+

Apenas como informação adicional e em relação à comparação entre as engines MYISAM e INNODB, segue abaixo um estudo feito e publicado pela Oracle que demonstra algumas diferenças de performance entre as duas engines.

 


O gráfico acima demonstra que a engine INNODB oferece maior escalabilidade ao se utilizar de múltiplos núcleos de CPU . Este teste demonstra que o nível de lock de tabela implementada na engine MYISAM reduz o throughput em ambientes que possuem workloads de leitura/escrita.

 


O gráfico acima demonstra que a performance de leituras utilizando a engine INNODB oferece um throughput e escalabilidades superiores se comparados com a engine MYISAM.

quarta-feira, 25 de julho de 2018

Oracle Database 18c (18.3) disponível para download

Por Eduardo Legatti

Olá,

A Oracle disponibilizou para download o Oracle 18c (18.3). Na verdade, o Oracle 18c nada mais é do que o Oracle 12c Release 2 (12.2.0.2). O nome simplesmente foi modificado para refletir o ano em que o produto está sendo lançado. Vale a pena salientar que essa nova nomenclatura é válida para os produtos Database e Grid Infrasctructure nas versões 12.2 e superiores, ou seja, versões do Oracle 12c R1 e 11.2 continuarão a utilizar a nomenclatura antiga.
 
 

quinta-feira, 12 de julho de 2018

Obtendo o tamanho do schemas de bancos de dados de uma instância do MySQL

Por Eduardo Legatti

Olá,

Neste artigo irei compartilhar as instruções SQL que normalmente utilizo para obter informações de tamanho e quantidade de tabelas e índices dos schemas de bancos de dados de uma instância MySQL. Todas as consultas são baseadas nas tabelas TABLES e STATISTICS do schema de banco de dados information_schema, conforme a seguir.

O comando abaixo mostra os schemas de bancos de dados existentes na instância do MySQL.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bd01               |
| bd02               |
| bd03               |
| bd04               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
8 rows in set (0.00 sec)

A consulta abaixo retorna o tamanho total dos bancos de dados da instância do MySQL na qual o (DB Size) é a soma dos dados de tabelas (Data Size) e dos índices (Index Size).

mysql> SELECT
    -> ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) "DB Size (MB)",
    -> ROUND(SUM(data_length) / 1024 / 1024, 2) "Data Size (MB)",
    -> ROUND(SUM(index_length) / 1024 / 1024, 2) "Index Size (MB)"
    -> FROM information_schema.tables;
+--------------+----------------+-----------------+
| DB Size (MB) | Data Size (MB) | Index Size (MB) |
+--------------+----------------+-----------------+
|      1531.17 |        1372.30 |          158.87 |
+--------------+----------------+-----------------+
1 row in set (0.05 sec)

A consulta abaixo retorna informações de tamanho de um schema de banco de dados específico.

mysql> SELECT
    -> TABLE_NAME,
    -> table_rows,
    -> ROUND(((data_length) / 1024 / 1024),2) "data_size (MB)",
    -> ROUND(((index_length) / 1024 / 1024),2) "index_size (MB)",
    -> ROUND(((data_length + index_length) / 1024 / 1024),2) "Total_size (MB)"
    -> FROM information_schema.TABLES
    -> WHERE table_schema = "bd04"
    -> ORDER BY 5 DESC;
+----------------------------------+------------+----------------+-----------------+-----------------+
| TABLE_NAME                       | table_rows | data_size (MB) | index_size (MB) | Total_size (MB) |
+----------------------------------+------------+----------------+-----------------+-----------------+
| wp_c6abf3642d_posts              |        106 |           2.52 |            0.06 |            2.58 |
| wp_c6abf3642d_options            |        212 |           1.52 |            0.02 |            1.53 |
| wp_c6abf3642d_postmeta           |        840 |           0.13 |            0.11 |            0.23 |
| wp_c6abf3642d_comments           |          0 |           0.02 |            0.08 |            0.09 |
| wp_c6abf3642d_users              |          2 |           0.02 |            0.05 |            0.06 |
| wp_c6abf3642d_commentmeta        |          0 |           0.02 |            0.03 |            0.05 |
| wp_c6abf3642d_usermeta           |         41 |           0.02 |            0.03 |            0.05 |
| wp_c6abf3642d_terms              |         23 |           0.02 |            0.03 |            0.05 |
| wp_c6abf3642d_termmeta           |          0 |           0.02 |            0.03 |            0.05 |
| wp_c6abf3642d_term_taxonomy      |         23 |           0.02 |            0.03 |            0.05 |
| wp_c6abf3642d_links              |          0 |           0.02 |            0.02 |            0.03 |
| wp_c6abf3642d_term_relationships |         14 |           0.02 |            0.02 |            0.03 |
+----------------------------------+------------+----------------+-----------------+-----------------+
12 rows in set (0.00 sec)

A consulta abaixo retorna a quantidade de tabelas e índices bem como o tamanho total dos bancos de dados da instância do MySQL.

mysql> SELECT a.table_schema "DB Name",
    -> COUNT(a.table_schema) "tables",
    -> indexes,
    -> ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) "DB Size (MB)"
    -> FROM information_schema.tables a,
    ->      (SELECT table_schema,COUNT(table_schema) "indexes" FROM information_schema.STATISTICS GROUP  BY table_schema) b
    -> WHERE a.table_schema = b.table_schema
    -> GROUP BY a.table_schema;
+---------------+--------+---------+--------------+
| DB Name       | tables | indexes | DB Size (MB) |
+---------------+--------+---------+--------------+
| bd01          |     18 |      33 |       119.73 |
| bd02          |     61 |     122 |       131.23 |
| bd03          |     66 |     151 |      1302.61 |
| bd04          |     12 |      45 |         4.80 |
| mysql         |     31 |      69 |         2.60 |
| sys           |    101 |       1 |         0.02 |
+---------------+--------+---------+--------------+
6 rows in set (0.05 sec)

A consulta abaixo retorna o tamanho total da instância do MySQL agrupados por ENGINE de tabelas de bancos de dados.

mysql> SELECT
    -> ENGINE,
    -> COUNT(table_schema) "tables",
    -> ROUND(SUM(data_length)/1024/1024,2) AS "data_size (MB)",
    -> ROUND(SUM(index_length)/1024/1024,2) AS "index_size (MB)",
    -> ROUND(SUM(data_length+index_length)/1024/1024,2) AS "total (MB)"
    -> FROM information_schema.TABLES
    -> GROUP BY ENGINE;
+--------------------+--------+----------------+-----------------+------------+
| ENGINE             | tables | data_size (MB) | index_size (MB) | total (MB) |
+--------------------+--------+----------------+-----------------+------------+
| NULL               |    100 |           NULL |            NULL |       NULL |
| CSV                |      2 |           0.00 |            0.00 |       0.00 |
| InnoDB             |    185 |        1259.23 |          120.73 |    1379.97 |
| MEMORY             |     51 |           0.00 |            0.00 |       0.00 |
| MyISAM             |     12 |         104.05 |           36.10 |     140.15 |
| PERFORMANCE_SCHEMA |     87 |           0.00 |            0.00 |       0.00 |
+--------------------+--------+----------------+-----------------+------------+
6 rows in set (0.03 sec)

A consulta abaixo retorna o tamanho total da instância do MySQL agrupados por ENGINE de tabelas de bancos de dados e por schemas de bancos de dados.

mysql> SELECT * FROM
    -> (
    -> SELECT
    -> table_schema,
    -> COUNT(table_schema) "tables",
    -> ROUND(SUM(data_length)/1024/1024,2) AS "data_size (MB)",
    -> ROUND(SUM(index_length)/1024/1024,2) AS "index_size (MB)",
    -> ROUND(SUM(data_length+index_length)/1024/1024,2) AS "total (MB)",
    -> ENGINE
    -> FROM information_schema.TABLES
    -> GROUP BY table_schema,ENGINE
    -> ) v1
    -> WHERE TABLE_SCHEMA NOT IN('mysql','information_schema','performance_schema','sys');
+---------------+--------+----------------+-----------------+------------+--------+
| table_schema  | tables | data_size (MB) | index_size (MB) | total (MB) | ENGINE |
+---------------+--------+----------------+-----------------+------------+--------+
| bd01          |     18 |         116.00 |            3.73 |     119.73 | InnoDB |
| bd02          |     60 |          49.00 |           13.19 |      62.19 | InnoDB |
| bd02          |      1 |          51.00 |           18.04 |      69.04 | MyISAM |
| bd03          |     65 |        1087.66 |          103.16 |    1190.81 | InnoDB |
| bd03          |      1 |          52.75 |           18.02 |      70.77 | MyISAM |
| bd04          |     12 |           4.30 |            0.50 |       4.80 | InnoDB |
+---------------+--------+----------------+-----------------+------------+--------+
8 rows in set (0.09 sec)

terça-feira, 19 de junho de 2018

Abordando a instalação e configuração do MongoDB no Linux

Por Eduardo Legatti

Olá,




Neste artigo irei abordar a instalação do MongoDB que é um banco de dados orientado a documentos que armazena dados em documentos JSON com esquema dinâmico, ou seja, não existe uma estrutura de dados como quantidade de colunas ou tipos de dados para armazenar valores. Pode-se dizer que os documentos do MongoDB são semelhantes aos objetos JSON. No mais, a instalação do MongoDB se resume apenas em realizar o download de um arquivo ".tgz" e descompactá-lo. Abaixo irei criar as estruturas necessárias e realizar algumas configurações recomendadas. Obs.: Por questões de performance, o sistema de arquivos recomendado para armazenar a partição onde ficará o MongoDB é o XFS já que a engine padrão utilizada pelo mesmo é o WiredTiger.

O primeiro passo é criar os diretórios onde ficarão armazenados os dados dos bancos de dados (/mongodb/data) e os arquivos de log (/mongodb/log). O arquivo de log se assemelha ao arquivo de log do MySQL ou até mesmo o arquivo de alerta do Oracle.

[root@linux ~]# mkdir -p /mongodb
[root@linux ~]# mkdir -p /mongodb/data
[root@linux ~]# mkdir -p /mongodb/log

Após a criação dos diretórios, ire realizar o download do arquivo de instalação do MongoDB 3.6.5 X64 conforme a seguir.

[root@linux ~]# cd /mongodb/
[root@linux mongodb]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz
--2018-06-18 18:06:41--  https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz
Resolving fastdl.mongodb.org (fastdl.mongodb.org)... 54.230.57.97, 54.230.57.250, 54.230.57.175, ...
Connecting to fastdl.mongodb.org (fastdl.mongodb.org)|54.230.57.97|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 100564462 (96M) [application/x-gzip]
Saving to: 'mongodb-linux-x86_64-rhel70-3.6.5.tgz'

100%[==============================================================================================>] 100,564,462 3.39MB/s   in 28s

2018-06-18 18:07:11 (3.39 MB/s) - 'mongodb-linux-x86_64-rhel70-3.6.5.tgz' saved [100564462/100564462]

Com o download realizado, poderemos descompactar o arquivo conforme demonstrado abaixo.
 
[root@linux mongodb]# tar -xzvf mongodb-linux-x86_64-rhel70-3.6.5.tgz
mongodb-linux-x86_64-rhel70-3.6.5/README
mongodb-linux-x86_64-rhel70-3.6.5/THIRD-PARTY-NOTICES
mongodb-linux-x86_64-rhel70-3.6.5/MPL-2
mongodb-linux-x86_64-rhel70-3.6.5/GNU-AGPL-3.0
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongodump
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongorestore
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoexport
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoimport
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongostat
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongotop
mongodb-linux-x86_64-rhel70-3.6.5/bin/bsondump
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongofiles
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoreplay
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongoperf
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongod
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongos
mongodb-linux-x86_64-rhel70-3.6.5/bin/mongo
mongodb-linux-x86_64-rhel70-3.6.5/bin/install_compass

Para fins de segurança e boa prática, irei criar um usuário específico que irá executar o processo do MongoDB.
 
[root@linux ~]# useradd mongodb
[root@linux ~]# passwd mongodb
Changing password for user mongodb.
New password: *****
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: *****
passwd: all authentication tokens updated successfully.

[root@linux ~]# chown -R mongodb.mongodb /mongodb/

[root@linux mongodb]# ls -lh
total 96M
drwxr-xr-x. 2 mongodb mongodb 4.0K Jun 18 17:59 data
drwxr-xr-x. 2 mongodb mongodb 4.0K Jun 18 17:59 log
drwxr-xr-x. 3 mongodb mongodb 4.0K Jun 18 18:07 mongodb-linux-x86_64-rhel70-3.6.5
-rw-r--r--. 1 mongodb mongodb  96M May 21 20:16 mongodb-linux-x86_64-rhel70-3.6.5.tgz

Para que os utilitários e o próprio executável do MongoDB seja executado de qualquer diretório. irei colocar o caminho do executável na variável $PATH conforme a seguir.

[root@linux ~]# su - mongodb
[mongodb@linux ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

PATH=$PATH:$HOME/.local/bin:$HOME/bin:/mongodb/mongodb-linux-x86_64-rhel70-3.6.5/bin/
export PATH

Pronto. Agora poderemos iniciar o startup do MongoDB conforme a linda de comando abaixo onde:

  • mongod: é o nome do executável do MongoDB
  • --fork: utilizado para manter a execução do processo mongod executando em background
  • --oplogsize: Oplog é uma collection especial que fica armazenado em um banco de dados de sistema do MongoDB e que armazena todas operações realizadas nos bancos de dados. É equivalente o redo log online do Oracle ou transaction log do SQL Server ou binlog do MySQL. O valor 1024 especifica o tamanho do mesmo e é medido em MB (Megabytes).
  • --journal: Este parâmetro junto com a engine WiredTiger que é a default desde a versão 3.2 e é útil como por exemplo, utilizar tecnologia de snapshots de discos (Amazon AWS) de forma que seja possível realizar backups físicos do MongoDB sem gerar indisponibilidade.
  • --port: Porta a ser utilizada. O padrão é 27107. Vale a pena salientar que é possível ter várias instâncias em um mesmo servidor executando em portas diferentes.
  • --bind_ip_all: Permite acesso externo a instância do MongoDB.
  • --dbpath: Caminho onde ficarão armazenados os bancos de dados
  • --logpath: Caminho onde ficarão armazenados os arquivos de log

[mongodb@linux ~]$ mongod --fork --oplogSize 1024 --journal --port 27017 --bind_ip_all --dbpath /mongodb/data/ --logpath /mongodb/log/mongodb.log
about to fork child process, waiting until server is ready for connections.
forked process: 2560
child process started successfully, parent exiting

Após subir a instância do MongoDB, podemos conectar na mesma usando o utilitário de linha de comando mongo conforme a seguir.

[mongodb@linux ~]$ mongo --port 27017
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.6.5
Server has startup warnings:
2018-06-18T18:18:00.125+0100 I STORAGE  [initandlisten]
2018-06-18T18:18:00.125+0100 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-06-18T18:18:00.125+0100 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-06-18T18:18:01.979+0100 I CONTROL  [initandlisten]
2018-06-18T18:18:01.979+0100 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-06-18T18:18:01.979+0100 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-06-18T18:18:01.979+0100 I CONTROL  [initandlisten]
2018-06-18T18:18:01.979+0100 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-06-18T18:18:01.979+0100 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2018-06-18T18:18:01.979+0100 I CONTROL  [initandlisten]
> exit
bye

Para realizar o shutdown da instância, basta proceder com a linha de comando abaixo.

[mongodb@linux ~]$ mongod --dbpath /mongodb/data --shutdown
killing process with pid: 2560

Como a instalação do MongoDB foi realizada em um sistema de arquivos Ext4, é possível observar o alerta de que o sistema de arquivos XFS é altamente recomendado. Para os outros alertas e demais boas práticas irei ajustar o sistema operacional conforme demonstrado abaixo.

-- como root
[root@linux ~]# cat /etc/security/limits.conf
mongodb soft nofile 65535
mongodb hard nofile 65535
mongodb soft nproc  65535
mongodb hard nproc  65535

[mongodb@linux ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 11275
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 65535
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

[root@linux mongodb]# echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
[root@linux mongodb]# echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
[root@linux mongodb]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@linux mongodb]# cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]

Vale a pena salientar que a alteração do transparent_hugepage precisa ser realizado a todo momento em que o servidor é reiniciado. Após realizado os ajustes necessários, irei novamente subir a instância do MongoDB (como mongodb).

[mongodb@linux ~]$ mongod --fork --oplogSize 1024 --journal --port 27017 --bind_ip_all --dbpath /mongodb/data/ --logpath /mongodb/log/mongodb.log
about to fork child process, waiting until server is ready for connections.
forked process: 2836
child process started successfully, parent exiting

[mongodb@linux ~]$ mongo
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.5
Server has startup warnings:
2018-06-18T18:27:42.883+0100 I STORAGE  [initandlisten]
2018-06-18T18:27:42.883+0100 I STORAGE  [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-06-18T18:27:42.883+0100 I STORAGE  [initandlisten] **          See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-06-18T18:27:44.529+0100 I CONTROL  [initandlisten]
> show dbs
admin   0.000GB
config  0.000GB
local   0.000G

Pronto. o comando "show dbs' lista os bancos de dados atualmente criados na instância do MongoDB.

quarta-feira, 9 de maio de 2018

Abordando a instalação e configuração do SQL Server no Linux

Por Eduardo Legatti

Olá,



A notícia que mais chamou a atenção no final de 2016 foi o anúncio da Microsoft sobre o lançamento do SQL Server para Linux. De lá pra cá, algumas coisas já mudaram. Por exemplo, a instalação só era permitida apenas em máquinas com no mínimo de 4 GB de RAM livre, o que era ridículo, pois hoje existem vários notebooks com 4 GB de RAM que que são utilizadas com máquinas virtuais para fins de estudos e testes de várias aplicações, inclusive bancos de dados. Atualmente a Microsoft atendeu aos vários pedidos da comunidade e reduziu a quantidade de memória RAM mínima para 2 GB. Portanto, neste artigo irei mostrar como realizar a instalação e configuração básica do SQL Server 2017 em um sistema Linux CentOS 7.4 x86_64.

Confirmando abaixo a versão e distribuição do Linux, irei realizar o download do repositório de instalação do SQL Server a partir do site da Microsoft usando o utilitário wget conforme a seguir.

[root@linux ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

[root@linux ~]# wget https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo -O /etc/yum.repos.d/mssql-server.repo
--2018-05-04 19:34:32--  https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
Resolving packages.microsoft.com (packages.microsoft.com)... 40.76.35.62
Connecting to packages.microsoft.com (packages.microsoft.com)|40.76.35.62|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 232 [application/octet-stream]
Saving to: /etc/yum.repos.d/mssql-server.repo

100%[=============================================================================================>] 232 --.-K/s   in 0s

2018-05-04 19:34:33 (2.60 MB/s) - /etc/yum.repos.d/mssql-server.repo saved [232/232]


[root@linux ~]# ls -lh /etc/yum.repos.d
total 32K
-rw-r--r--. 1 root root 1.7K Aug 30  2017 CentOS-Base.repo
-rw-r--r--. 1 root root 1.3K Aug 30  2017 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Aug 30  2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Aug 30  2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Aug 30  2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1.3K Aug 30  2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3.8K Aug 30  2017 CentOS-Vault.repo
-rw-r--r--. 1 root root  232 Sep 19  2017 mssql-server.repo

Após a realização do download, irei instalar o pacote mssql-server usando o utilitário yum conforme a seguir.

[root@linux ~]# yum install mssql-server -y
Loaded plugins: fastestmirror, langpacks
packages-microsoft-com-mssql-server-2017                                        | 2.9 kB  00:00:00
packages-microsoft-com-mssql-server-2017/primary_db                             |  11 kB  00:00:01
Loading mirror speeds from cached hostfile
 * base: centos.brisanet.com.br
 * extras: centos.brisanet.com.br
 * updates: centos.brisanet.com.br
Resolving Dependencies
--> Running transaction check
---> Package mssql-server.x86_64 0:14.0.3025.34-3 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==================================================================================================
 Package                 Arch     Version         Repository                                 Size
==================================================================================================
Installing:
 mssql-server            x86_64   14.0.3025.34-3  packages-microsoft-com-mssql-server-2017   167 M

Transaction Summary
==================================================================================================
Install  1 Package

Total download size: 167 M
Installed size: 167 M
Downloading packages:
Public key for mssql-server-14.0.3025.34-3.x86_64.rpm is not installed
mssql-server-14.0.3025.34-3.x86_64.rpm                                          | 167 MB  00:00:53
Retrieving key from https://packages.microsoft.com/keys/microsoft.asc
Importing GPG key 0xBE1229CF:
 Userid     : "Microsoft (Release signing) [gpgsecurity@microsoft.com]"
 Fingerprint: bc52 8686 b50d 79e3 39d3 721c eb3e 94ad be12 29cf
 From       : https://packages.microsoft.com/keys/microsoft.asc
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : mssql-server-14.0.3025.34-3.x86_64                               1/1

+--------------------------------------------------------------+
Please run 'sudo /opt/mssql/bin/mssql-conf setup'
to complete the setup of Microsoft SQL Server
+--------------------------------------------------------------+

SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
  Verifying  : mssql-server-14.0.3025.34-3.x86_64                               1/1

Installed:
  mssql-server.x86_64 0:14.0.3025.34-3

Complete!

Uma vez instalado o pacote, poderemos proceder com a configuração da instância do SQL Server conforme demonstrado abaixo. Após a execução do comando mssql-conf setup, irei selecionar a opção (1) e fornecer a senha do usuário sa como Aa12345678 para prosseguir com a configuração.

[root@linux ~]# /opt/mssql/bin/mssql-conf setup
Choose an edition of SQL Server:
  1) Evaluation (free, no production use rights, 180-day limit)
  2) Developer (free, no production use rights)
  3) Express (free)
  4) Web (PAID)
  5) Standard (PAID)
  6) Enterprise (PAID)
  7) Enterprise Core (PAID)
  8) I bought a license through a retail sales channel and have a product key to enter.

Details about editions can be found at
https://go.microsoft.com/fwlink/?LinkId=852748&clcid=0x409

Use of PAID editions of this software requires separate licensing through a
Microsoft Volume Licensing program.
By choosing a PAID edition, you are verifying that you have the appropriate
number of licenses in place to install and run this software.

Enter your edition(1-8): 1
The license terms for this product can be found in
/usr/share/doc/mssql-server or downloaded from:
https://go.microsoft.com/fwlink/?LinkId=855864&clcid=0x409

The privacy statement can be viewed at:
https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x409

Enter the SQL Server system administrator password:Aa12345678
Confirm the SQL Server system administrator password:Aa12345678
Configuring SQL Server...

The licensing PID was successfully processed. The new edition is [Enterprise Evaluation Edition].
ForceFlush is enabled for this instance.
ForceFlush feature is enabled for log durability.
DBSTARTUP (msdb, 4): FCBOpenTime took 1026 ms
DBSTARTUP (msdb, 4): FCBHeaderReadTime took 705 ms
DBSTARTUP (msdb, 4): FileMgrPreRecoveryTime took 1570 ms
DBSTARTUP (msdb, 4): MasterFilesScanTime took 852 ms
DBSTARTUP (msdb, 4): PhysicalCompletionTime took 255 ms
DBSTARTUP (msdb, 4): RecoveryCompletionTime took 169 ms
DBSTARTUP (msdb, 4): UpgradeTime took 951 ms
DBSTARTUP (msdb, 4): StartupInDatabaseTime took 7426 ms
DBSTARTUP (msdb, 4): RemapSysfiles1Time took 108 ms
Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server.service to /usr/lib/systemd/system/mssql-server.service.
Setup has completed successfully. SQL Server is now starting.

Pronto. Após a instalação e configuração do SQL Server, podemos verificar se o serviço está inicializado.

[root@linux ~]# systemctl status mssql-server
* mssql-server.service - Microsoft SQL Server Database Engine
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-05-04 20:12:17 BST; 2min 0s ago
     Docs: https://docs.microsoft.com/en-us/sql/linux
 Main PID: 1594 (sqlservr)
   CGroup: /system.slice/mssql-server.service
           |-1594 /opt/mssql/bin/sqlservr
           |-1618 /opt/mssql/bin/sqlservr

May 04 20:12:53 linux.local.net sqlservr[1594]: 2018-05-04 20:12:53.65 spid22s     The Service Broker endpoint is in disabled or stopped state.
May 04 20:12:53 linux.local.net sqlservr[1594]: 2018-05-04 20:12:53.65 spid22s     The Database Mirroring endpoint is in disabled or stopped state.
May 04 20:12:53 linux.local.net sqlservr[1594]: DBSTARTUP (msdb, 4): FCBOpenTime took 1254 ms
May 04 20:12:53 linux.local.net sqlservr[1594]: DBSTARTUP (msdb, 4): FCBHeaderReadTime took 632 ms
May 04 20:12:53 linux.local.net sqlservr[1594]: DBSTARTUP (msdb, 4): FileMgrPreRecoveryTime took 1581 ms
May 04 20:12:53 linux.local.net sqlservr[1594]: DBSTARTUP (msdb, 4): MasterFilesScanTime took 873 ms
May 04 20:12:53 linux.local.net sqlservr[1594]: DBSTARTUP (msdb, 4): RecoveryCompletionTime took 118 ms
May 04 20:12:53 linux.local.net sqlservr[1594]: DBSTARTUP (msdb, 4): StartupInDatabaseTime took 6707 ms
May 04 20:12:53 linux.local.net sqlservr[1594]: 2018-05-04 20:12:53.73 spid22s     Service Broker manager has started.
May 04 20:12:53 linux.local.net sqlservr[1594]: 2018-05-04 20:12:53.76 spid7s      Recovery is complete. This is an informational message only. No user action is required.

Caso o SQL Server precise ser acessado remotamente e o Firewall esteja habilitado no servidor, é importante liberar a porta 1433 como demonstrado abaixo. No meu caso, o serviço FirewallD não estava em execução e portanto não havia nenhuma regra de firewall ativa.

[root@linux ~]# firewall-cmd --zone=public --add-port=1433/tcp --permanent
FirewallD is not running
[root@linux ~]# firewall-cmd --reload
FirewallD is not running

[root@linux ~]# netstat -na | grep 1433
tcp        0      0 0.0.0.0:1433            0.0.0.0:*               LISTEN
tcp6       0      0 :::1433                 :::*                    LISTEN

Vale a penas salientar que a instalação do SQL Server não vem com alguns utilitários clientes "command-line tools" como o sqlcmd. Portanto, precisaremos realizar o download do pacote e realizar a instalação conforme demonstrado abaixo.

[root@linux ~]# wget https://packages.microsoft.com/config/rhel/7/prod.repo -O /etc/yum.repos.d/prod.repo
--2018-05-04 20:16:19--  https://packages.microsoft.com/config/rhel/7/prod.repo
Resolving packages.microsoft.com (packages.microsoft.com)... 40.76.35.62
Connecting to packages.microsoft.com (packages.microsoft.com)|40.76.35.62|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 193 [application/octet-stream]
Saving to: /etc/yum.repos.d/prod.repo

100%[=============================================================================================>] 193 --.-K/s   in 0s

2018-05-04 20:16:20 (2.16 MB/s) - /etc/yum.repos.d/prod.repo saved [193/193]

[root@linux ~]# ls -lh /etc/yum.repos.d
total 36K
-rw-r--r--. 1 root root 1.7K Aug 30  2017 CentOS-Base.repo
-rw-r--r--. 1 root root 1.3K Aug 30  2017 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Aug 30  2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Aug 30  2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Aug 30  2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1.3K Aug 30  2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3.8K Aug 30  2017 CentOS-Vault.repo
-rw-r--r--. 1 root root  232 Sep 19  2017 mssql-server.repo
-rw-r--r--. 1 root root  193 Nov 16  2016 prod.repo

Após a realização do download, irei instalar os pacotes mssql-tools e unixODBC-devel aceitando os termos de licença conforme a seguir.

[root@linux ~]# yum install -y mssql-tools unixODBC-devel
Loaded plugins: fastestmirror, langpacks
packages-microsoft-com-prod                                                     | 2.9 kB  00:00:00
packages-microsoft-com-prod/primary_db                                          |  89 kB  00:00:01
Loading mirror speeds from cached hostfile
 * base: centos.brisanet.com.br
 * extras: centos.brisanet.com.br
 * updates: centos.brisanet.com.br
Package unixODBC-devel-2.3.1-11.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package mssql-tools.x86_64 0:17.1.0.1-1 will be installed
--> Processing Dependency: msodbcsql17 < 17.2.0.0 for package: mssql-tools-17.1.0.1-1.x86_64
--> Processing Dependency: msodbcsql17 >= 17.1.0.1 for package: mssql-tools-17.1.0.1-1.x86_64
--> Running transaction check
---> Package msodbcsql17.x86_64 0:17.1.0.1-1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================================
 Package                      Arch     Version     Repository                                  Size
===================================================================================================
Installing:
 mssql-tools                  x86_64   17.1.0.1-1  packages-microsoft-com-prod                253 k
Installing for dependencies:
 msodbcsql17                  x86_64   17.1.0.1-1  packages-microsoft-com-prod                4.1 M

Transaction Summary
====================================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 4.4 M
Installed size: 4.4 M
Downloading packages:
(1/2): mssql-tools-17.1.0.1-1.x86_64.rpm                                        | 253 kB  00:00:01
(2/2): msodbcsql17-17.1.0.1-1.x86_64.rpm                                        | 4.1 MB  00:00:06
----------------------------------------------------------------------------------------------------
Total                                                                    678 kB/s | 4.4 MB  00:00:06
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
The license terms for this product can be downloaded from
https://aka.ms/odbc170eula and found in
/usr/share/doc/msodbcsql17/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.

Do you accept the license terms? (Enter YES or NO)
YES
  Installing : msodbcsql17-17.1.0.1-1.x86_64                                    1/2
The license terms for this product can be downloaded from
http://go.microsoft.com/fwlink/?LinkId=746949 and found in
/usr/share/doc/mssql-tools/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.

Do you accept the license terms? (Enter YES or NO)
YES
  Installing : mssql-tools-17.1.0.1-1.x86_64                                    2/2
  Verifying  : msodbcsql17-17.1.0.1-1.x86_64                                    1/2
  Verifying  : mssql-tools-17.1.0.1-1.x86_64                                    2/2

Installed:
  mssql-tools.x86_64 0:17.1.0.1-1

Dependency Installed:
  msodbcsql17.x86_64 0:17.1.0.1-1

Complete!

Pronto. Para poder executar os utilitários de linha de comandos de qualquer diretório, precisaremos adicionar o caminho abaixo na variável PATH.

[root@linux ~]# echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
[root@linux ~]# echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
[root@linux ~]# source ~/.bashrc

[root@linux ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/mssql-tools/bin

Para iniciar o SQL Server Agent, siga os procedimentos abaixo.

[root@linux ~]# /opt/mssql/bin/mssql-conf set sqlagent.enabled true
SQL Server needs to be restarted in order to apply this setting. Please run 'systemctl restart mssql-server.service'.
[root@linux ~]# systemctl restart mssql-server
 
Agora poderemos testar a conexão com a instância do SQL Server.

[root@linux ~]# sqlcmd -S localhost -U SA -PAa12345678
1> select @@version;
2> GO

-------------------------------------------------------------------------------
Microsoft SQL Server 2017 (RTM-CU6) (KB4101464) - 14.0.3025.34 (X64)
        Apr  9 2018 18:00:41
        Copyright (C) 2017 Microsoft Corporation
        Enterprise Evaluation Edition (64-bit) on Linux (CentOS Linux 7 (Core))

(1 rows affected)

1> select database_id,name,file_id,name,physical_name from sys.master_files;
2> GO
database_id name          file_id     name       physical_name
----------- ------------- ----------- ---------- ----------------------------------
          1 master                  1 master     /var/opt/mssql/data/master.mdf
          1 mastlog                 2 mastlog    /var/opt/mssql/data/mastlog.ldf
          2 tempdev                 1 tempdev    /var/opt/mssql/data/tempdb.mdf
          2 templog                 2 templog    /var/opt/mssql/data/templog.ldf
          3 modeldev                1 modeldev   /var/opt/mssql/data/model.mdf
          3 modellog                2 modellog   /var/opt/mssql/data/modellog.ldf
          4 MSDBData                1 MSDBData   /var/opt/mssql/data/MSDBData.mdf
          4 MSDBLog                 2 MSDBLog    /var/opt/mssql/data/MSDBLog.ldf

(8 rows affected)

Para realizar o shutdown da instância do SQL Server, basta apenas executar o comando stop.

[root@linux ~]# systemctl stop mssql-server

Por fim, para se certificar de que o serviço foi finalizado, poderemos executar novamente o comando status.

[root@linux ~]# systemctl status mssql-server
* mssql-server.service - Microsoft SQL Server Database Engine
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Fri 2018-05-04 20:40:31 BST; 4s ago
     Docs: https://docs.microsoft.com/en-us/sql/linux
 Main PID: 1594 (code=exited, status=0/SUCCESS)

May 04 20:12:53 linux.local.net sqlservr[1594]: DBSTARTUP (msdb, 4): StartupInDatabaseTime took 6707 ms
May 04 20:12:53 linux.local.net sqlservr[1594]: 2018-05-04 20:12:53.73 spid22s     Service Broker manager has started.
May 04 20:12:53 linux.local.net sqlservr[1594]: 2018-05-04 20:12:53.76 spid7s      Recovery is complete. This is an informational message only. No user action is required.
May 04 20:17:49 linux.local.net sqlservr[1594]: 2018-05-04 20:17:49.69 spid51      Using 'dbghelp.dll' version '4.0.5'
May 04 20:40:29 linux.local.net systemd[1]: Stopping Microsoft SQL Server Database Engine...
May 04 20:40:29 linux.local.net sqlservr[1594]: 2018-05-04 20:40:29.60 spid7s      Always On: The availability replica manager is going offline because SQL Server is shutting down. This is an informational message only...ion is required.
May 04 20:40:29 linux.local.net sqlservr[1594]: 2018-05-04 20:40:29.61 spid7s      SQL Server is terminating in response to a 'stop' request from Service Control Manager. This is an informational message only. No user action is required.
May 04 20:40:29 linux.local.net sqlservr[1594]: 2018-05-04 20:40:29.74 spid22s     Service Broker manager has shut down.
May 04 20:40:29 linux.local.net sqlservr[1594]: 2018-05-04 20:40:29.94 spid7s      SQL Trace was stopped due to server shutdown. Trace ID = '1'. This is an informational message only; no user action is required.
May 04 20:40:31 linux.local.net systemd[1]: Stopped Microsoft SQL Server Database Engine.
Hint: Some lines were ellipsized, use -l to show in full.

segunda-feira, 16 de abril de 2018

Abordando a instalação e configuração do MySQL no Linux

Por Eduardo Legatti

Olá,



Neste artigo irei abordar a instalação e configuração do MySQL (5.7.18 x86-64) em um Linux Centos 7.3 (64 bits). O primeiro passo é realizar o download dos pacotes de instalação para o servidor. Para isso, irei usar o utilitário wget, conforme a seguir.

[root@linux1 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-common-5.7.18-1.el7.x86_64.rpm --no-check-certificate
Conectando-se a cdn.mysql.com|104.105.143.228|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 335516 (328K) [application/x-redhat-package-manager]
Salvando em: “mysql-community-common-5.7.18-1.el7.x86_64.rpm”

100%[==============================================================================================>] 335.516     1,21M/s   em 0,3s

[root@linux1 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-5.7.18-1.el7.x86_64.rpm --no-check-certificate
Conectando-se a cdn.mysql.com|104.105.143.228|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 2103888 (2,0M) [application/x-redhat-package-manager]
Salvando em: “mysql-community-libs-5.7.18-1.el7.x86_64.rpm”

100%[===============================================================================================>] 2.103.888   3,40M/s   em 0,6s

[root@linux1 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-client-5.7.18-1.el7.x86_64.rpm --no-check-certificate
Conectando-se a cdn.mysql.com|104.105.143.228|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 23039984 (22M) [application/x-redhat-package-manager]
Salvando em: “mysql-community-client-5.7.18-1.el7.x86_64.rpm”

100%[===============================================================================================>] 23.039.984  2,86M/s   em 7,3s

[root@linux1 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-server-5.7.18-1.el7.x86_64.rpm --no-check-certificate
Conectando-se a cdn.mysql.com|104.105.143.228|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 156322552 (149M) [application/x-redhat-package-manager]
Salvando em: “mysql-community-server-5.7.18-1.el7.x86_64.rpm”

100%[===============================================================================================>] 156.322.552  967K/s   em 3m 4s

[root@linux1 ~]# ls -lh *.rpm
-rw-r--r-- 1 root root 328K Mar 20 06:40 mysql-community-common-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 2,1M Mar 20 06:40 mysql-community-libs-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 root root  22M Mar 20 06:40 mysql-community-client-5.7.18-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 150M Mar 20 06:41 mysql-community-server-5.7.18-1.el7.x86_64.rpm

Após a realização do download dos pacotes de instalação, irei realizar a instalação dos mesmos usando o utilitário rpm. Vale a pena salientar que a ordem de instalação dos pacotes a seguir é importante.

[root@linux1 ~]# rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm
aviso: mysql-community-common-5.7.18-1.el7.x86_64.rpm: Cabeçalho V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparando...               ########################################### [100%]
   1:mysql-community-common ########################################### [100%]

[root@linux1 ~]# rpm -ivh mysql-community-libs-5.7.18-1.el7.x86_64.rpm
aviso: mysql-community-libs-5.7.18-1.el7.x86_64.rpm: Cabeçalho V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparando...               ########################################### [100%]
   1:mysql-community-libs   ########################################### [100%]

[root@linux1 ~]# rpm -ivh mysql-community-client-5.7.18-1.el7.x86_64.rpm
aviso: mysql-community-client-5.7.18-1.el7.x86_64.rpm: Cabeçalho V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparando...               ########################################### [100%]
   1:mysql-community-client ########################################### [100%]

[root@linux1 ~]# rpm -ivh mysql-community-server-5.7.18-1.el7.x86_64.rpm
aviso: mysql-community-server-5.7.18-1.el7.x86_64.rpm: Cabeçalho V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparando...               ########################################### [100%]
   1:mysql-community-server ########################################### [100%]

Pronto. Podemos checar pelo comando abaixo que os pacotes do MySQL foram instalados com sucesso.

[root@linux1 ~]# rpm -qa | grep mysql
mysql-community-server-5.7.18-1.el7.x86_64
mysql-community-common-5.7.18-1.el7.x86_64
mysql-community-libs-5.7.18-1.el7.x86_64
mysql-community-client-5.7.18-1.el7.x86_64

Se quisermos prosseguir com a desinstalação do MySQL, basta utilizarmos os comandos abaixo.

[root@linux1 ~]# rpm -e mysql-community-server-5.7.18-1.el7.x86_64 --nodeps
[root@linux1 ~]# rpm -e mysql-community-common-5.7.18-1.el7.x86_64 --nodeps
[root@linux1 ~]# rpm -e mysql-community-libs-5.7.18-1.el7.x86_64 --nodeps
[root@linux1 ~]# rpm -e mysql-community-client-5.7.18-1.el7.x86_64 –nodeps
[root@linux1 ~]# rm -rf /var/lib/mysql/

Uma vez que o MySQL já se encontra está instalado, poderemos iniciar o seu serviço e começar a realizar a configuração inicial, conforme demonstrado abaixo.

[root@linux1 ~]# systemctl start mysqld
* mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2017-05-02 13:45:55 BST; 5s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 3105 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 3084 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 3109 (mysqld)
   CGroup: /system.slice/mysqld.service
           ??3109 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Abr 16 13:45:50 linux1 systemd[1]: Starting MySQL Server...
Abr 16 13:45:55 linux1 systemd[1]: Started MySQL Server.

Após a inicialização do serviço da instância do MySQL, poderemos conectar no mesmo após obter uma senha temporária.

[root@linux1]# grep 'temporary password' /var/log/mysqld.log
2018-04-16T12:30 [Note] A temporary password is generated for root@localhost: 8V*vubKtFQp(

[root@linux1 ~]# mysql -uroot –p'8V*vubKtFQp('
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5 Server version: 5.7.18

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Pronto. Após conectarmos na instância com o usuário root, somos forçados a alterar a senha por questões de segurança

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Agora irei realizar o procedimento de alteração da senha que deve conter pelo menos uma letra maiúscula, um caractere especial, além de números, como também alterar a política de segurança de senhas de MEDIUM para LOW.

mysql> alter user root@localhost identified by 'Asdjer3jk4kjd4@#';
Query OK, 0 rows affected (0,00 sec)

mysql> show variables like '%password_policy';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| validate_password_policy | MEDIUM |
+--------------------------+--------+
1 row in set (0,07 sec)

mysql> SET GLOBAL validate_password_policy=LOW;
Query OK, 0 rows affected (0,03 sec)

Após diminuir o nível de segurança da senha, é possível perceber que ainda não é possível utilizar uma senha mais simples. Apesar de não precisar de letras maiúsculas, e caracteres especiais, a mesma precisa ter pelo menos um tamanho de 8 caracteres conforme demonstrado abaixo.

mysql> alter user root@localhost identified by 'admin';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

mysql> alter user root@localhost identified by '12345678';
Query OK, 0 rows affected (0,01 sec)

Para desativar esta obrigatoriedade, bastará desinstalar o plugin validate_password.

mysql> show plugins;
+----------------------------+----------+--------------------+----------------------+---------+
| Name                       | Status   | Type               | Library              | License |
+----------------------------+----------+--------------------+----------------------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL                 | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL                 | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL                 | GPL     |
| validate_password          | ACTIVE   | VALIDATE PASSWORD  | validate_password.so | GPL     |
+----------------------------+----------+--------------------+----------------------+---------+
45 rows in set (0,01 sec)

mysql> UNINSTALL PLUGIN validate_password;
Query OK, 0 rows affected (0,07 sec)

Uma vez desinstalado, poderemos usar uma senha mais simples.

mysql> alter user root@localhost identified by 'admin';
Query OK, 0 rows affected (0,00 sec)

Após a alteração da senha, poderemos instalar novamente o plugin validate_password, caso seja necessário.

mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
Query OK, 0 rows affected (0,03 sec)

Para realizarmos qualquer operação no MySQL, fazemos uso do utilitário mysql.

[root@linux1]# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz

mysql> help

For information about MySQL products and services, visit:
   http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
   http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
   https://shop.mysql.com/

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.

For server side help, type 'help contents'

Para iniciar, parar ou checar o status da instância do MySQL, poderemos fazer uso do comando systemctl. No Linux 6.x e anteriores, fazíamos uso do comando service.

[root@linux1 ~]# systemctl start mysqld
[root@linux1 ~]# systemctl status mysqld
* mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2017-05-02 13:45:55 BST; 5s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 3105 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 3084 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 3109 (mysqld)
   CGroup: /system.slice/mysqld.service
           ??3109 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Abr 16 13:45:50 linux1 systemd[1]: Starting MySQL Server...
Abr 16 13:45:55 linux1 systemd[1]: Started MySQL Server.

[root@linux1 ~]# systemctl stop mysqld
[root@linux1 ~]# systemctl status mysqld
* mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Thu 2017-05-02 13:47:00 BST; 904ms ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 3105 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 3084 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 3109 (code=exited, status=0/SUCCESS)

Abr 16 13:45:50 linux1 systemd[1]: Starting MySQL Server...
Abr 16 13:45:55 linux1 systemd[1]: Started MySQL Server.
Abr 16 13:46:59 linux1 systemd[1]: Stopping MySQL Server...
Abr 16 13:47:00 linux1 systemd[1]: Stopped MySQL Server.

Em relação a possibilidade de conexão remota à instância do MySQL, podemos checar que qualquer computar poderá ter acesso ao mesmo. Caso queiramos que a conectividade fuique restrita ao servidor, bastara apenas setar o parâmetro bind_address para 127.0.0.1.

mysql> show variables like '%bind%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| bind_address  | *     |
+---------------+-------+

[root@linux1 ~]# netstat -na | grep 3306
tcp        0      0 :::3306       :::*          LISTEN

Para finalizar, segue abaixo umas informações do arquivo de configuração da instância do MySQL. O mesmo pode ser encotrado em /etc/my.cnf, mas dependendo da distribuição do Linux, ele poderá estar em outro diretório.

[root@linux1 ~]# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Postagens populares