Base de Datos

Última revisión: 20 de diciembre de 2021

La Base de Datos

La base de datos es un servicio dentro de un servidor en el que se almacenan los datos, en este caso, de un WordPress.

Existen muchos tipos de bases de datos, pero para el caso de WordPress es necesario el uso de una base de datos compatible con SQL y, más concretamente, compatible con el estándar de MySQL.

NOTA: Revisa los requisitos de Bases de Datos para WordPress.

En principio lo más habitual en WordPress es utilizar MySQL o MariaDB, aunque se puede usar sistemas Cloud que ofrecen un servicio compatible.

En la base de datos se almacenará toda la información correspondiente a WordPress, en las que se incluye la mayoría de la configuración del sitio, entradas, páginas, configuración de plugins o temas y otros muchos más elementos.

Mantener al día

El protocolo SQL es un sistema que varía con muy poca frecuencia, por lo que disponer de una versión más antigua o moderna de la base de datos suele influir bastante poco para WordPress.

En lo que sí que afecta es al rendimiento. Por norma general, cada nueva versión de MySQL o MariaDB suelen incluir mejoras de rendimiento y mejoras en cuanto a nuevas funcionalidades que pueden ser necesarias por alguno de los plugins.

Es por eso que es muy recomendable siempre mantener al menos la versión menor de lo que tengamos instalado y mantener siempre una versión lo más alta posible de las que estén soportadas por cada proveedor en cada momento.

Diferencias entre MySQL y MariaDB

Desde el punto de vista propio de WordPress, no debería haber ninguna diferencia entre el uso de una edición u otra, aunque hay que tener presente que cada vez más las diferencias entre un sistema y otro van aumentando por lo que es posible que llegue un momento en el que sí que influya.

La mayoría de proveedores que trabaja con WordPress suele instalar MariaDB. Esta última es 100% GPL, por lo que la licencia es la misma que WordPress, a diferencia de la licencia que usa MySQL desde que fue adquirida por Oracle.

También hay que tener en cuenta que MySQL, en su edición Comunidad, tiene limitaciones en cuanto al uso de la escalabilidad, ya que, para eliminar la limitación de 200.000 conexiones, has de conseguir una edición empresarial de pago. Este es un elemento muy importante sobre todo para aquellos sitios que trabajan con comercio electrónico o plugins de un coste tecnológico elevado.

Tipos de hosting

Hosting Compartido / Hosting Cloud

Cuando hablamos de bases de datos en un entorno compartido o gestionado, en general hay poco margen para su configuración u optimización.

La gestión la tiene el proveedor y ha de aplicar una configuración general para todos los sitios que pueden encontrarse en el proveedor, por lo que nunca estará optimizado para lo que requiere tu WordPress.

Hosting Dedicado / VPS

En los casos en los que tenemos control absoluto de la configuración de la base de datos hemos de decidir cómo repartir los recursos con respecto a otros servicios que pueda haber en la propia máquina o si vamos a separar en una máquina exclusiva la base de datos.

En estos casos en los que tenemos control de la base de datos hemos de encontrar una configuración adecuada según el tipo de sitio WordPress que vayamos a tener. Por norma general un WordPress dispone de mucha carga de lectura y mucho menor de escritura, pero si tenemos un medio en el que se hacen muchas ediciones de los contenidos o una carga más grande en el panel de administración, deberemos ajustar las configuraciones.

Configuración para MariaDB

Para una máquina con Ubuntu 20.04 LTE, con MariaDB 10.6, un ejemplo de configuración puede ser el siguiente.

[server]
#
[mysqld]
#
# Global / Idioma
#
basedir                         = /usr
bind_address                    = 127.0.0.1
server-id                       = 1
log_bin                         = /var/log/mysql/mysql-bin.log
character_set_server            = utf8mb4
collation_server                = utf8mb4_general_ci
connect_timeout                 = 60
datadir                         = /var/lib/mysql
default_storage_engine          = InnoDB
default_tmp_storage_engine      = InnoDB
lc_messages                     = es_ES
lc_messages_dir                 = /usr/share/mysql
lc_time_names                   = es_ES
pid_file                        = /run/mysqld/mysqld.pid
skip_external_locking           = 1
skip_name_resolve               = 1
sync_binlog                     = 128
tmpdir                          = /tmp
user                            = mysql
#
# General
#
div_precision_increment         = 6
expire_logs_days                = 7
host_cache_size                 = 128
join_buffer_size                = 256M
lock_wait_timeout               = 3600
max_allowed_packet              = 128MB
max_connections                 = 2048
max_connect_errors              = 1024
max_digest_length               = 1024
max_error_count                 = 1024
max_prepared_stmt_count         = 16382
max_sort_length                 = 8M
max_user_connections            = 0
preload_buffer_size             = 128M
query_alloc_block_size          = 32K
range_alloc_block_size          = 32K
sort_buffer_size                = 256M
stored_program_cache            = 1024
table_cache                     = 2048
table_definition_cache          = 1024
table_open_cache                = 1024
table_open_cache_instances      = 4
thread_cache_size               = 205
thread_stack                    = 1M
tmp_table_size                  = 64M
transaction_alloc_block_size    = 8K
transaction_prealloc_size       = 2K
#
# Logs
#
log_error                       = /var/lib/mysql/mysql-error.log
log_queries_not_using_indexes   = 0
long_query_time                 = 5
slow_query_log                  = 1
slow_query_log_file             = /var/lib/mysql/mysql-slow.log
#
# MyISAM
#
bulk_insert_buffer_size         = 16M
concurrent_insert               = 1
delay_key_write                 = on
key_buffer_size                 = 512M
key_cache_age_threshold         = 300
key_cache_block_size            = 1024
key_cache_division_limit        = 100
myisam_data_pointer_size        = 6
myisam_max_sort_file_size       = 256M
myisam_mmap_size                = 512M
myisam_recover_options          = FORCE,BACKUP
myisam_repair_threads           = 1
myisam_sort_buffer_size         = 64M
read_buffer_size                = 256M
read_rnd_buffer_size            = 64M
#
# InnoDB
#
innodb_adaptive_flushing                      = 1
innodb_adaptive_flushing_lwm                  = 10
innodb_adaptive_hash_index                    = 1
innodb_adaptive_hash_index_parts              = 32
innodb_adaptive_max_sleep_delay               = 120000
innodb_autoextend_increment                   = 64
innodb_autoinc_lock_mode                      = 2
innodb_buffer_pool_chunk_size                 = 64M
innodb_buffer_pool_dump_at_shutdown           = 1
innodb_buffer_pool_dump_now                   = 0
innodb_buffer_pool_dump_pct                   = 25
innodb_buffer_pool_instances                  = 8
innodb_buffer_pool_load_abort                 = 0
innodb_buffer_pool_load_at_startup            = 1
innodb_buffer_pool_load_now                   = 0
innodb_buffer_pool_size                       = 512M
innodb_change_buffer_max_size                 = 25
innodb_change_buffering                       = 5
innodb_cmp_per_index_enabled                  = 0
innodb_commit_concurrency                     = 0
innodb_concurrency_tickets                    = 2176
innodb_deadlock_detect                        = 1
innodb_disable_sort_file_cache                = 0
innodb_doublewrite                            = 1
innodb_fast_shutdown                          = 1
innodb_file_per_table                         = 1
innodb_fill_factor                            = 80
innodb_flush_log_at_timeout                   = 1
innodb_flush_log_at_trx_commit                = 1
innodb_flush_method                           = 4
innodb_flush_neighbors                        = 1
innodb_flush_sync                             = 1
innodb_flushing_avg_loops                     = 100
innodb_force_load_corrupted                   = 0
innodb_force_recovery                         = 0
innodb_ft_cache_size                          = 16M
innodb_ft_enable_diag_print                   = 0
innodb_ft_enable_stopword                     = 1
innodb_ft_max_token_size                      = 84
innodb_ft_min_token_size                      = 3
innodb_ft_num_word_optimize                   = 4000
innodb_ft_result_cache_limit                  = 512M
innodb_ft_sort_pll_degree                     = 4
innodb_ft_total_cache_size                    = 512M
innodb_idle_flush_pct                         = 100
innodb_io_capacity                            = 8800
innodb_io_capacity_max                        = 9312
innodb_lock_wait_timeout                      = 30
innodb_log_buffer_size                        = 32M
innodb_log_checksums                          = 1
innodb_log_compressed_pages                   = 1
innodb_log_file_size                          = 128M
innodb_log_files_in_group                     = 4
innodb_log_write_ahead_size                   = 8K
innodb_lru_scan_depth                         = 128
innodb_max_dirty_pages_pct                    = 90
innodb_max_dirty_pages_pct_lwm                = 10
innodb_max_purge_lag                          = 0
innodb_max_purge_lag_delay                    = 2000000
innodb_max_undo_log_size                      = 512M
innodb_old_blocks_pct                         = 20
innodb_old_blocks_time                        = 1000
innodb_online_alter_log_max_size              = 512M
innodb_optimize_fulltext_only                 = 0
innodb_page_cleaners                          = 4
innodb_purge_batch_size                       = 512
innodb_purge_threads                          = 8
innodb_purge_rseg_truncate_frequency          = 128
innodb_random_read_ahead                      = 0
innodb_read_ahead_threshold                   = 56
innodb_read_io_threads                        = 4
innodb_replication_delay                      = 0
innodb_rollback_on_timeout                    = 0
innodb_rollback_segments                      = 128
innodb_sort_buffer_size                       = 256M
innodb_spin_wait_delay                        = 6
innodb_stats_auto_recalc                      = 1
innodb_stats_include_delete_marked            = 0
innodb_stats_persistent                       = 1
innodb_strict_mode                            = 1
innodb_sync_array_size                        = 1
innodb_sync_spin_loops                        = 30
innodb_table_locks                            = 1
innodb_thread_concurrency                     = 0
innodb_thread_sleep_delay                     = 10000
innodb_undo_log_truncate                      = 1
innodb_use_native_aio                         = 1
innodb_write_io_threads                       = 4
#
[embedded]
#
[mariadb]