From da4bc58b8bf6e073ad644ca61f6aaf3e69a40ec4 Mon Sep 17 00:00:00 2001 From: Alec Reynolds Date: Fri, 24 Feb 2023 15:57:44 -0800 Subject: [PATCH] lando/lando#1426: MySQL 8.x compatibility for WordPress recipe. --- .github/workflows/pr-wordpress-tests.yml | 1 + CHANGELOG.md | 4 + examples/wordpress-mysql8/.gitignore | 1 + examples/wordpress-mysql8/README.md | 81 +++++++++++++++++ recipes/wordpress/mysql8.cnf | 105 +++++++++++++++++++++++ 5 files changed, 192 insertions(+) create mode 100644 examples/wordpress-mysql8/.gitignore create mode 100644 examples/wordpress-mysql8/README.md create mode 100644 recipes/wordpress/mysql8.cnf diff --git a/.github/workflows/pr-wordpress-tests.yml b/.github/workflows/pr-wordpress-tests.yml index 0c37a60..4c4c388 100644 --- a/.github/workflows/pr-wordpress-tests.yml +++ b/.github/workflows/pr-wordpress-tests.yml @@ -12,6 +12,7 @@ jobs: matrix: leia-tests: - examples/wordpress + - examples/wordpress-mysql8 lando-versions: - edge os: diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d7c02a..c97e4d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## v0.8.0 - [February 24, 2022](https://github.com/lando/wordpress/releases/tag/v0.8.0) + +* Add compatibility for MySQL 8.x [lando/lando#1426](https://github.com/lando/lando/issues/1462) + ## v0.7.0 - [December 12, 2022](https://github.com/lando/wordpress/releases/tag/v0.7.0) * Added bundle-dependencies to release process. * Fixed bug in plugin dogfooding test. diff --git a/examples/wordpress-mysql8/.gitignore b/examples/wordpress-mysql8/.gitignore new file mode 100644 index 0000000..e3455d8 --- /dev/null +++ b/examples/wordpress-mysql8/.gitignore @@ -0,0 +1 @@ +mysql8 diff --git a/examples/wordpress-mysql8/README.md b/examples/wordpress-mysql8/README.md new file mode 100644 index 0000000..4687247 --- /dev/null +++ b/examples/wordpress-mysql8/README.md @@ -0,0 +1,81 @@ +WordPress Example +================= + +This example exists primarily to test the following documentation: + +* [WordPress Recipe](https://docs.devwithlando.io/tutorials/wordpress.html) + +Start up tests +-------------- + +Run the following commands to get up and running with this example. + +```bash +# Should poweroff +lando poweroff + +# Should initialize the latest WordPress codebase +rm -rf mysql8 && mkdir -p mysql8 && cd mysql8 +lando init --source remote --remote-url https://wordpress.org/latest.tar.gz --recipe wordpress --webroot wordpress --name lando-wordpress-mysql8 --option database=mysql:8.0.22 + +# Should start up successfully +cd mysql8 +echo -e "\nplugins:\n \"@lando/wordpress/\": ./../../" >> .lando.yml +lando start +``` + +Verification commands +--------------------- + +Run the following commands to validate things are rolling as they should. + +```bash +# Should return the WordPress installation page by default +cd mysql8 +lando ssh -s appserver -c "curl -L localhost" | grep "WordPress" + +# Should use 7.4 as the default php version +cd mysql8 +lando php -v | grep "PHP 7.4" + +# Should be running apache 2.4 by default +cd mysql8 +lando ssh -s appserver -c "apachectl -V | grep 2.4" +lando ssh -s appserver -c "curl -IL localhost" | grep Server | grep 2.4 + +# Should be running mysql 8.0.x by default +cd mysql8 +lando mysql -V | grep 8.0 + +# Should not enable xdebug by default +cd mysql8 +lando php -m | grep xdebug || echo $? | grep 1 + +# Should use the default database connection info +cd mysql8 +lando mysql -uwordpress -pwordpress wordpress -e quit + +# Should have the 2.x wp-cli +cd mysql8 +lando wp cli version | grep "WP-CLI 2." + +# Should create a wp-config file +cd mysql8/wordpress +lando wp config create --dbname=wordpress --dbuser=wordpress --dbpass=wordpress --dbhost=database --force + +# Should be able to install wordpress +cd mysql8/wordpress +lando wp core install --url=lando-wordpress.lndo.site --title=LandoPress --admin_user=admin --admin_email=mike@pirog.com --skip-email +``` + +Destroy tests +------------- + +Run the following commands to trash this app like nothing ever happened. + +```bash +# Should be destroyed with success +cd mysql8 +lando destroy -y +lando poweroff +``` diff --git a/recipes/wordpress/mysql8.cnf b/recipes/wordpress/mysql8.cnf new file mode 100644 index 0000000..de0fd89 --- /dev/null +++ b/recipes/wordpress/mysql8.cnf @@ -0,0 +1,105 @@ +# +# The MySQL database server configuration file for Lando +# + +[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 = 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 = 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 = 120 +# +# * 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