From 3ebb89fac582ac3cc92ccdcea4232963c3aa6434 Mon Sep 17 00:00:00 2001 From: Alec Reynolds Date: Thu, 7 Mar 2024 13:32:46 -0800 Subject: [PATCH] Improve database selection logic. --- builders/acquia-base.js | 11 ++- config/mysql.cnf | 110 ++++++++++++++++++++++ config/mysql8.cnf | 105 +++++++++++++++++++++ examples/acquia-downstreamer-1/.lando.yml | 3 +- 4 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 config/mysql.cnf create mode 100644 config/mysql8.cnf diff --git a/builders/acquia-base.js b/builders/acquia-base.js index 3f50e6e..b9a4075 100644 --- a/builders/acquia-base.js +++ b/builders/acquia-base.js @@ -84,6 +84,13 @@ const postgresCli = { }, }; +/* + * Helper to get database type + */ +const getDatabaseType = options => { + return _.get(options, '_app.config.services.database.type', options.database) ?? 'mysql'; +}; + /* * Helper to get config defaults */ @@ -92,10 +99,10 @@ const getConfigDefaults = options => { if (_.startsWith(options.via, 'nginx')) options.defaultFiles.vhosts = 'default.conf.tpl'; // Get the default db conf - const dbConfig = _.get(options, 'database', 'mysql'); + const dbConfig = getDatabaseType(options); const database = _.first(dbConfig.split(':')); const version = _.last(dbConfig.split(':')).substring(0, 2); - if (database === 'mysql' || database === 'mariadb') { + if (database.includes('mysql') || database.includes('mariadb')) { if (version === '8.') { options.defaultFiles.database = 'mysql8.cnf'; } else { diff --git a/config/mysql.cnf b/config/mysql.cnf new file mode 100644 index 0000000..111bef2 --- /dev/null +++ b/config/mysql.cnf @@ -0,0 +1,110 @@ +# +# The MySQL database server configuration file for Lando +# LANDOACQUIAMYSQLCNF + +[mysqld] +# +# * Basic Settings +# +# Data is stored in a volume on the db container /sql +default-storage-engine = innodb + +# +# * Fine Tuning +# +key_buffer_size = 384M +max_allowed_packet = 32M +thread_stack = 400K +thread_cache_size = 8 +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched +#max_connections = 100 +#table_cache = 64 +#thread_concurrency = 10 +read_rnd_buffer_size = 8M +myisam_sort_buffer_size = 64M +table_open_cache = 512 +sort_buffer_size = 2M +read_buffer_size = 2M + +# +# * Query Cache Configuration +# +query_cache_limit = 1M +query_cache_size = 64M +# +# * Logging and Replication +# +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +# As of 5.1 you can enable the log at runtime! +#general_log_file = /src/.lando/log/mysql.log +#general_log = 1 +# +# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf. +# +# Here you can see queries with especially long duration +#log_slow_queries = /var/log/mysql/mysql-slow.log +#long_query_time = 2 +#log-queries-not-using-indexes +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see README.Debian about +# other settings you may need to change. +#server-id = 1 +#log_bin = /src/.lando/log/mysql-bin.log +expire_logs_days = 10 +max_binlog_size = 100M +#binlog_do_db = include_database_name +#binlog_ignore_db = include_database_name +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! +# +# Uncomment the following if you are using InnoDB tables +#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend +#innodb_log_group_home_dir = C:\mysql\data/ +# You can set .._buffer_pool_size up to 50 - 80 % +# of RAM but beware of setting memory usage too high +#innodb_buffer_pool_size = 384M +#innodb_additional_mem_pool_size = 20M +# Set .._log_file_size to 25 % of buffer pool size +innodb_log_file_size = 101M +#innodb_log_buffer_size = 8M +innodb_flush_log_at_trx_commit = 0 +#innodb_lock_wait_timeout = 50 +innodb_buffer_pool_size = 384M +innodb_log_buffer_size = 4M +innodb_file_per_table = 1 +innodb_open_files = 256 +innodb_io_capacity = 512 +innodb_flush_method = O_DIRECT +innodb_thread_concurrency = 8 +innodb_lock_wait_timeout = 121 +# +# * Security Features +# +# Read the manual, too, if you want chroot! +# chroot = /var/lib/mysql/ +# +# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". +# +# ssl-ca=/etc/mysql/cacert.pem +# ssl-cert=/etc/mysql/server-cert.pem +# ssl-key=/etc/mysql/server-key.pem + +[mysqldump] +quick +quote-names +max_allowed_packet = 32M + +[mysql] +#no-auto-rehash # faster start of mysql but no tab completion + +[isamchk] +key_buffer_size = 384M +sort_buffer_size = 256M +read_buffer = 2M +write_buffer = 2M diff --git a/config/mysql8.cnf b/config/mysql8.cnf new file mode 100644 index 0000000..9d838a4 --- /dev/null +++ b/config/mysql8.cnf @@ -0,0 +1,105 @@ +# +# The MySQL database server configuration file for Lando +# LANDOACQUIAMYSQL8CNF + +[mysqld] +# +# * Basic Settings +# +# Data is stored in a volume on the db container /sql +default-storage-engine = innodb + +# +# * Fine Tuning +# +key_buffer_size = 384M +max_allowed_packet = 32M +thread_stack = 400K +thread_cache_size = 8 +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched +#max_connections = 100 +#table_cache = 64 +#thread_concurrency = 10 +read_rnd_buffer_size = 8M +myisam_sort_buffer_size = 64M +table_open_cache = 512 +sort_buffer_size = 2M +read_buffer_size = 2M + +# +# * Logging and Replication +# +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +# As of 5.1 you can enable the log at runtime! +#general_log_file = /src/.lando/log/mysql.log +#general_log = 1 +# +# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf. +# +# Here you can see queries with especially long duration +#log_slow_queries = /var/log/mysql/mysql-slow.log +#long_query_time = 2 +#log-queries-not-using-indexes +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see README.Debian about +# other settings you may need to change. +#server-id = 1 +#log_bin = /src/.lando/log/mysql-bin.log +expire_logs_days = 10 +max_binlog_size = 101M +#binlog_do_db = include_database_name +#binlog_ignore_db = include_database_name +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! +# +# Uncomment the following if you are using InnoDB tables +#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend +#innodb_log_group_home_dir = C:\mysql\data/ +# You can set .._buffer_pool_size up to 50 - 80 % +# of RAM but beware of setting memory usage too high +#innodb_buffer_pool_size = 384M +#innodb_additional_mem_pool_size = 20M +# Set .._log_file_size to 25 % of buffer pool size +innodb_log_file_size = 100M +#innodb_log_buffer_size = 8M +innodb_flush_log_at_trx_commit = 0 +#innodb_lock_wait_timeout = 50 +innodb_buffer_pool_size = 384M +innodb_log_buffer_size = 4M +innodb_file_per_table = 1 +innodb_open_files = 256 +innodb_io_capacity = 512 +innodb_flush_method = O_DIRECT +innodb_thread_concurrency = 8 +innodb_lock_wait_timeout = 127 +# +# * Security Features +# +# Read the manual, too, if you want chroot! +# chroot = /var/lib/mysql/ +# +# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". +# +# ssl-ca=/etc/mysql/cacert.pem +# ssl-cert=/etc/mysql/server-cert.pem +# ssl-key=/etc/mysql/server-key.pem + +[mysqldump] +quick +quote-names +max_allowed_packet = 32M + +[mysql] +#no-auto-rehash # faster start of mysql but no tab completion + +[isamchk] +key_buffer_size = 384M +sort_buffer_size = 256M +read_buffer = 2M +write_buffer = 2M diff --git a/examples/acquia-downstreamer-1/.lando.yml b/examples/acquia-downstreamer-1/.lando.yml index 5cf7c87..abd22d6 100644 --- a/examples/acquia-downstreamer-1/.lando.yml +++ b/examples/acquia-downstreamer-1/.lando.yml @@ -1,6 +1,7 @@ name: acquia-downstreamer-1 recipe: acquia - +config: + php: 8.1 services: database: type: mysql:8.0