Sistemas Gestores de Bases de Datos
PostgreSQL
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:
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
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.
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
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
.
Crea el script de shell (archivo)
$HOME/.local/bin/postgresql-instancia01
con el siguiente contenido postgresql-instancia01.txt.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:
MariaDB / MySQL
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:
- MariaDB, el software libre y el lucro cesante por Enrique Dans
- Que es MariaDB y ventajas frente a MySQL y Novedades de MariaDB 10 en vozidea.com
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:
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/
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.
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
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
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
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
.
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
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...