Sistemas Gestores de Bases de Datos

PostgreSQL

images/postgresql-logo.png

Instalación

PostgreSQL posiblemente ya se encuentre instalado, puedes de cualquier forma ejecutar lo siguiente para confirmar su instalación:

root@servidor:~$ ls -l /var/log/packages/ | grep -i postgresql
-rw-r--r-- 1 root root  122321 Mar 12 10:42 postgresql-10.2-x86_64-1_SBo

Es posible también ejecutar lo siguiente para obtener información de PostgreSQL en Slackware Linux:

root@servidor:~$ which postgres 
/usr/bin/postgres
root@servidor:~$ postgres -V
postgres (PostgreSQL) 10.2

Instancia

Es posible crear una instancia personal o instancia local de PostgreSQL para el usuario alumno en su directorio personal con el objetivo de no usar la cuenta de usuario root y tener control de dicha instancia como usuario alumno.

Los siguientes pasos son ejecutados como usuario alumno:

  1. Crea un directorio donde mantendrás los archivos propios de la instancia de PostgreSQL, por ejemplo $HOME/.local/var/pgsql/instancia01/data:

     alumno@servidor:~ $ mkdir -p $HOME/.local/var/pgsql/instancia01/data
    
  2. Inicializa el directorio con los archivos propios de la instancia de PostgreSQL con el comando initdb:

     alumno@servidor:~ $ initdb --locale=es_MX.UTF-8 --auth=md5 -U alumno -W -D $HOME/.local/var/pgsql/instancia01/data
     The files belonging to this database system will be owned by user "alumno".
     This user must also own the server process.
    
     The database cluster will be initialized with locale "es_MX.UTF-8".
     The default database encoding has accordingly been set to "UTF8".
     The default text search configuration will be set to "spanish".
    
     Data page checksums are disabled.
    
     Enter new superuser password: 
     Enter it again: 
    

    En este punto se te estará solicitando una contraseña para asignarla a la cuenta del administrador de esta instancia de PostgreSQL, el usuario alumno. Ingresa la contraseña que consideres útil para continuar:

     fixing permissions on existing directory /home/alumno/.local/var/pgsql/instancia01/data ... ok
     creating subdirectories ... ok
     selecting default max_connections ... 100
     selecting default shared_buffers ... 128MB
     selecting dynamic shared memory implementation ... posix
     creating configuration files ... ok
     running bootstrap script ... ok
     performing post-bootstrap initialization ... ok
     syncing data to disk ... ok
    
     Success. You can now start the database server using:
         pg_ctl -D /home/alumno/.local/var/pgsql/instancia01/data -l logfile start
    

    NOTAS:

    • La instancia (o proceso) de PostgreSQL le pertenecerá al usuario alumno por lo tanto es el único quien puede iniciarla.
    • Las opciones --auth=md5 -U alumno -W dadas a initdb le indican que el modo de autenticación es mediante una contraseña (en MD5), que el administrador de esta instancia de PostgreSQL será alumno y que solicite una nueva contraseña para dicha cuenta de usuario.
  3. Inicia la instancia recien creada de PostgreSQL:

     alumno@servidor:~ $ cd $HOME/.local/var/pgsql/instancia01
     alumno@servidor:~/.local/var/pgsql/instancia01 $ pg_ctl -D data --log postgresql.log start
    
  4. Verifica la ejecución de PostgreSQL:

     alumno@servidor:~/.local/var/pgsql/instancia01 $ netstat -plutn | grep postgres
     tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      24976/postgres
    

Cambio de puerto TCP

Para cambiar el puerto TCP de PostgreSQL se edita el archivo de configuración de la instancia, en este caso $HOME/.local/var/pgsql/instancia01/data/postgresql.conf.

Suponiendo que se desea usar el puerto TCP 9696, la línea a editar es #port = 5432 (línea 63 aprox.), se descomenta (se borra el # al inicio) y se indica el puerto: port = 9696.

Al hacer esta modificación en el archivo de configuración de la instancia es necesario reiniciarla.

alumno@servidor:~/.local/var/pgsql/instancia01 $ pg_ctl -D data stop
alumno@servidor:~/.local/var/pgsql/instancia01 $ pg_ctl -D data --log postgresql.log start

Verifica la ejecución de PostgreSQL:

  • Con el comando netstat:

     alumno@servidor:~/.local/var/pgsql/instancia01 $ netstat -plutn | grep postgres
     tcp        0      0 127.0.0.1:9696          0.0.0.0:*               LISTEN      49673/postgres
    
  • Con el comando ps:

     alumno@servidor:~/.local/var/pgsql/instancia01 $ ps aux | grep -i postgres
     alumno   2347  0.0  0.5 213396 19348 ?        S    22:00   0:00 /usr/lib64/postgresql/10.2/bin/postgres -D data
     alumno   2353  0.0  0.0 213396  3084 ?        Ss   22:00   0:00 postgres: checkpointer process
     alumno   2354  0.0  0.1 213396  5580 ?        Ss   22:00   0:00 postgres: writer process
     alumno   2355  0.0  0.0 213396  3084 ?        Ss   22:00   0:00 postgres: wal writer process
     alumno   2356  0.0  0.1 213804  6464 ?        Ss   22:00   0:00 postgres: autovacuum launcher process
     alumno   2357  0.0  0.1  68676  4316 ?        Ss   22:00   0:00 postgres: stats collector process
    

Inicio de la instancia

Los siguientes pasos son para crear un script de shell que mediante el parámetro start o stop inicie la instancia personal de PostgreSQL: postgresql-instancia01.

  1. Crea el script de shell (archivo) $HOME/.local/bin/postgresql-instancia01 con el siguiente contenido postgresql-instancia01.txt.

  2. Asigna permisos de ejecución al script de shell creado:

     alumno@servidor: $ chmod +x $HOME/.local/bin/postgresql-instancia01
    

OBSERVACIÓN: el script de shell postgresql-instancia01 puede aceptar los siguientes parámetros para administrar a la instancia-proceso de PostgreSQL:

  • start: para iniciar la instancia.
  • stop: para detener la instancia.
  • restart: para reiniciar la instancia.
  • reload: para recargar el archivo de configuración sin reiniciar a esta.
  • status: para determinar si está en ejecución o detenida la instancia.
  • config: para obtener algunos parámetros de configuración del archivo de configuración de la instancia.

En caso de error

Si durante el inicio de la instancia de PostgreSQL se obtiene algún mensaje de error o el proceso no es detectado mediante el comando postgresql-instancia01 status es posible encontrar el motivo por la cual la instancia no puede ser iniciada en el archivo $HOME/.local/var/pgsql/instancia01/postgresql.log.

En el directorio $HOME/.local/var/pgsql/instancia01/data/pg_log es posible encontrar varios archivos de registros, cada uno con un nombre del tipo postgresql-AÑO-MES-DÍA_HORA.log que corresponde a registros por parte de PostgreSQL durante su tiempo de ejecución

Borrando y recreando la instancia de PostgreSQL

Si por alguna razón se desea borrar la instancia, perdiendo la configuración y datos existentes en ella, se detiene la instancia (comando postgresql-instancia01 stop), se borra el directorio $HOME/.local/var/pgsql/instancia01 y los pasos indicados en el apartado Instancia se vuelven a llevar a cabo.

pgAdmin

Para ingresar a la instancia personal de PostgreSQL mediante pgAdmin accede a File > Add Server... y rellena el formulario de acuerdo a los datos usados para la creación de la instancia personal:

images/pgadmin.png

MariaDB / MySQL

images/mariadb-logo.png

images/mysql-logo.png

Instalación

MariaDB posiblemente ya se encuentre instalado, puedes de cualquier forma ejecutar lo siguiente para confirmar su instalación:

root@servidor:~$ ls -l /var/log/packages/ | grep -i mariadb
-rw-r--r-- 1 root root   20672 Jan 22 06:34 mariadb-10.0.30-x86_64-1_slack14.2

Es posible también ejecutar lo siguiente para obtener información de MariaDB en Slackware Linux:

root@servidor:~$ which mysql
/usr/bin/mysql
root@servidor:~$ mysql -V
mysql  Ver 15.1 Distrib 10.0.30-MariaDB, for Linux (x86_64) using readline 5.1
root@servidor:~$ mysqladmin -V
mysqladmin  Ver 9.1 Distrib 10.0.30-MariaDB, for Linux on x86_64
root@servidor:~$ mysqlshow -V
mysqlshow  Ver 9.10 Distrib 10.0.30-MariaDB, for Linux (x86_64)

NOTA: mysql, mysqladmin y mysqlshow son clientes de MariaDB.

Aún cuando MariaDB surgió a partir de MySQL, MySQL Workbench solo contempla su uso con MySQL por lo que se tienen los siguientes clientes gráficos alternativos para MariaDB:

RECOMENDACIÓN: lee lo siguiente:

Instancia

Es posible crear una instancia personal o instancia local de MariaDB para el usuario alumno en su directorio personal con el objetivo de no usar la cuenta de usuario root y tener control de dicha instancia como usuario alumno.

Los siguientes pasos son ejecutados como usuario alumno:

  1. Crea un directorio donde mantendrás los archivos propios de la instancia de MariaDB, por ejemplo $HOME/.local/var/mariadb/instancia01/:

     alumno@servidor:~ $ mkdir -p $HOME/.local/var/mariadb/instancia01/
    
  2. Inicializa el directorio con los archivos propios de la instancia de MariaDB con el comando mysql_install_db:

     alumno@servidor:~ $ mysql_install_db --user=alumno --datadir=$HOME/.local/var/mariadb/instancia01/
     Installing MariaDB/MySQL system tables in '/home/alumno/.local/var/mariadb/instancia01/' ...
     ...
     OK
     Filling help tables...
     ...
     OK
     To start mysqld at boot time you have to copy
     support-files/mysql.server to the right place for your system
     PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
     To do so, start the server, then issue the following commands:
     '/usr/bin/mysqladmin' -u root password 'new-password'
     '/usr/bin/mysqladmin' -u root -h servidor password 'new-password'
     Alternatively you can run:
     '/usr/bin/mysql_secure_installation'
     which will also give you the option of removing the test
     databases and anonymous user created by default.  This is
     strongly recommended for production servers.
     See the MariaDB Knowledgebase at http://mariadb.com/kb or the
     MySQL manual for more instructions.
     You can start the MariaDB daemon with:
     cd '/usr' ; /usr/bin/mysqld_safe --datadir='/home/alumno/.local/var/mariadb/instancia01/'
     ...
    

    NOTAS:

    • La instancia (o proceso) de MariaDB le pertenecerá al usuario alumno por lo tanto es el único quien puede iniciarla.
    • La opción --user=alumno solo establece como propietario de los archivos de esta instancia al usuario alumno. La cuenta de usuario administrador dentro de MariaDB es root, dicha cuenta de usuario no tiene relación alguna con la cuenta de usuario root del sistema operativo.
  3. Crea el archivo de configuración de MariaDB para esta instancia, $HOME/.local/var/mariadb/instancia01/mariadb.cnf, con el siguiente contenido:

     [mysql]
     socket = mariadb.sock
     [mysqld]
     bind-address = 127.0.0.1
     port = 3306
     socket = mariadb.sock
     skip-external-locking
     key_buffer_size = 16M
     max_allowed_packet = 1M
     table_open_cache = 64
     sort_buffer_size = 512K
     net_buffer_length = 8K
     read_buffer_size = 256K
     read_rnd_buffer_size = 512K
     myisam_sort_buffer_size = 8M
     log-bin=mysql-bin
     binlog_format=mixed
     server-id   = 1
     ## Para hacer uso de InnoDB (Oracle) en lugar de XtraDB
     ignore_builtin_innodb
     plugin_load=innodb=ha_innodb.so
     [mysqldump]
     quick
     max_allowed_packet = 16M
     [mysql]
     no-auto-rehash
     [myisamchk]
     key_buffer_size = 20M
     sort_buffer_size = 20M
     read_buffer = 2M
     write_buffer = 2M
     [mysqlhotcopy]
     interactive-timeout
    
  4. Inicia la instancia recien creada de MariaDB:

     alumno@servidor:~ $ cd $HOME/.local/var/mariadb/instancia01
     alumno@servidor:~/.local/var/mariadb/instancia01 $ mysqld_safe \
       --defaults-file=mariadb.cnf --datadir=$(pwd) --pid-file=$(pwd)/mariadb.pid --no-watch
     ...
     ... mysqld_safe Logging to '/home/alumno/.local/var/mariadb/instancia01/servidor.err'.
     ... mysqld_safe Starting mysqld daemon with databases from /home/alumno/.local/var/mariadb/instancia01
    
  5. Verifica la ejecución de MariaDB:

     alumno@servidor:~/.local/var/mariadb/instancia01 $ netstat -plutn | grep mysqld
     tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      27857/mysqld
    
  6. Asegura la instancia de MariaDB mediante el comando mysql_secure_installation:

     alumno@servidor:~/.local/var/mariadb/instancia01 $ mysql_secure_installation --defaults-file=mariadb.cnf
     NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
           SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
     In order to log into MariaDB to secure it, we'll need the current
     password for the root user.  If you've just installed MariaDB, and
     you haven't set the root password yet, the password will be blank,
     so you should just press enter here.
     Enter current password for root (enter for none): 
    

    En este momento se te solicita la contraseña del usuario administrador dentro de MariaDB, solo aprieta la tecla de Enter ya que no tiene alguna.

     OK, successfully used password, moving on...
     Setting the root password ensures that nobody can log into the MariaDB
     root user without the proper authorisation.
     Set root password? [Y/n] Y
     New password: 
     Re-enter new password: 
    

    Se te pregunta si se desea asignar una contraseña al usuario administrador dentro de MariaDB (usuario root), ingresa Y, aprieta la tecla de Enter e ingresa la nueva contraseña.

     Password updated successfully!
     Reloading privilege tables..
      ... Success!
     By default, a MariaDB installation has an anonymous user, allowing anyone
     to log into MariaDB without having to have a user account created for
     them.  This is intended only for testing, and to make the installation
     go a bit smoother.  You should remove them before moving into a
     production environment.
     Remove anonymous users? [Y/n] Y
      ... Success!
     Normally, root should only be allowed to connect from 'localhost'.  This
     ensures that someone cannot guess at the root password from the network.
     Disallow root login remotely? [Y/n] Y
      ... Success!
     By default, MariaDB comes with a database named 'test' that anyone can
     access.  This is also intended only for testing, and should be removed
     before moving into a production environment.
     Remove test database and access to it? [Y/n] Y
      - Dropping test database...
      ... Success!
      - Removing privileges on test database...
      ... Success!
     Reloading the privilege tables will ensure that all changes made so far
     will take effect immediately.
     Reload privilege tables now? [Y/n] Y
      ... Success!
     Cleaning up...
     All done!  If you've completed all of the above steps, your MariaDB
     installation should now be secure.
     Thanks for using MariaDB!
    

    En estas últimas preguntas solo ingresa Y por cada una de ellas para borrar al usuario anónimo, evitar las conexiones remotas por parte del usuario administrador dentro de MariaDB (usuario root), borrar una base de datos de prueba y recargas los permisos-privilegios de las tablas en la instancia.

Cambio de puerto TCP

Para cambiar el puerto TCP de MariaDB se edita el archivo de configuración de la instancia, en este caso $HOME/.local/var/mariadb/instancia01/mariadb.cnf.

Suponiendo que se desea usar el puerto TCP 8686, la línea a editar es port = 3306, quedando como: port = 8686.

Al hacer esta modificación en el archivo de configuración de la instancia es necesario reiniciarla.

alumno@servidor:~/.local/var/mariadb/instancia01 $ kill -s SIGTERM $(cat mariadb.pid)
alumno@servidor:~/.local/var/mariadb/instancia01 $ mysqld_safe \
   --defaults-file=mariadb.cnf --datadir=$(pwd) --pid-file=$(pwd)/mariadb.pid --no-watch

Verifica la ejecución de MariaDB:

  • Con el comando netstat:

     alumno@servidor:~/.local/var/mariadb/instancia01 $ netstat -plutn | grep mysqld
     tcp        0      0 127.0.0.1:8686          0.0.0.0:*               LISTEN      49673/mysqld
    
  • Con el comando ps:

     alumno@servidor:~/.local/var/mariadb/instancia01 $ ps aux | grep -i mysqld
     alumno    29205  0.2  2.2 582188 85528 pts/3    Sl   00:26   0:00 /usr/libexec/mysqld
                                                                       --defaults-file=mariadb.cnf
                                                                       --basedir=/usr
                                                                       --datadir=/home/alumno/.local/var/mariadb/instancia01
                                                                       --plugin-dir=/usr/lib64/mysql/plugin
                                                                       --log-error=/home/alumno/.local/var/mariadb/instancia01/servidor.err
                                                                       --pid-file=/home/alumno/.local/var/mariadb/instancia01/mariadb.pid
                                                                       --socket=mariadb.sock --port=8686
    

Inicio de la instancia

Los siguientes pasos son para crear un script de shell que mediante el parámetro start o stop inicie la instancia personal de MariaDB: mariadb-instancia01.

  1. Crea el script de shell (archivo) $HOME/.local/bin/mariadb-instancia01 con el siguiente contenido:

     #!/bin/bash
     cd $HOME/.local/var/mariadb/instancia01
     case "$1" in
       "start")
         echo -e "\n  ->  mysqld_safe --defaults-file=mariadb.cnf --datadir=$(pwd) --pid-file=$(pwd)/mariadb.pid --no-watch ..."
         mysqld_safe --defaults-file=mariadb.cnf --datadir=$(pwd) --pid-file=$(pwd)/mariadb.pid --no-watch
         echo
         ;;
       "stop")
         echo -e "\n  -> kill -s SIGTERM $(cat mariadb.pid) ..."
         kill -s SIGTERM $(cat mariadb.pid)
         echo
         ;;
       "restart")
         echo -e "\n  -> kill -s SIGTERM $(cat mariadb.pid) ..."
         kill -s SIGTERM $(cat mariadb.pid)
         sleep 3
         echo -e "\n  ->  mysqld_safe --defaults-file=mariadb.cnf --datadir=$(pwd) --pid-file=$(pwd)/mariadb.pid --no-watch ..."
         mysqld_safe --defaults-file=mariadb.cnf --datadir=$(pwd) --pid-file=$(pwd)/mariadb.pid --no-watch
         echo
         ;;
       "reload")
         echo -e "\n  -> kill -s SIGHUP $(cat mariadb.pid) ..."
         kill -s SIGHUP $(cat mariadb.pid)
         echo
         ;;
       "status")
         echo -e "\n  -> ps aux | grep mysqld:"
         ps aux | grep mysqld | grep -v grep
         echo -e "\n  -> netstat -plutn | grep mysqld:"
         netstat -plutn 2>/dev/null | grep mysqld
         echo
         ;;
       "config")
         conf_file=$HOME/.local/var/mariadb/instancia01/mariadb.cnf
         if [ ! -f ${conf_file} ]; then
           echo -e "\n  -> Error, ${conf_file} does not exists."
           exit 1
         fi
         echo -e "\n  -> config: ${conf_file}"
         conf_options="bind-address port socket plugin_load"
         for conf_option in ${conf_options}; do
           grep -E "${conf_option} *=" ${conf_file} | sed 's/.#.*$//' | sed 's/^/\t/'
         done
         echo
         ;;
       "connect")
         shift
         echo -e "\n  -> connect: mysql --defaults-file=mariadb.cnf -u root -p $@"
         mysql --defaults-file=mariadb.cnf -u root -p $@
         ;;
       *)
         echo "Usage: $(basename $0) [start|stop|restart|reload|status|config|connect]"
         ;;
     esac
    
  2. Asigna permisos de ejecución al script de shell creado:

     alumno@servidor: $ chmod +x $HOME/.local/bin/mariadb-instancia01
    

OBSERVACIÓN: el script de shell mariadb-instancia01 puede aceptar los siguientes parámetros para administrar a la instancia-proceso de MariaDB:

  • start: para iniciar la instancia.
  • stop: para detener la instancia.
  • restart: para reiniciar la instancia.
  • reload: para recargar el archivo de configuración sin reiniciar a esta.
  • status: para determinar si está en ejecución o detenida la instancia.
  • config: para obtener algunos parámetros de configuración del archivo de configuración de la instancia.
  • connect: para acceder a la instancia de MariaDB haciendo uso del cliente mysql.

En caso de error

Si durante el inicio de la instancia de MariaDB se obtiene algún mensaje de error o el proceso no es detectado mediante el comando mariadb-instancia01 status es posible encontrar el motivo por la cual la instancia no puede ser iniciada en el archivo $HOME/.local/var/mariadb/instancia01/servidor.err.

Borrando y recreando la instancia de MariaDB

Si por alguna razón se desea borrar la instancia, perdiendo la configuración y datos existentes en ella, se detiene la instancia (comando mariadb-instancia01 stop), se borra el directorio $HOME/.local/var/mariadb/instancia01 y los pasos indicados en el apartado Instancia se vuelven a llevar a cabo.

DBeaver

Para ingresar a la instancia personal de MariaDB mediante DBeaver...