Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Incomplete
-
11.5.2
-
None
Description
We upgraded all our MariaDB servers to 11.5.2
Since then we noticed that the binary logs aren't automaticly purged anymore on many nodes. (Yes, new binlogs are created)
Also on manually calling 'PURGE BINARY LOGS', we don't get any error, but it does nothing.
We are use master slave replication with automatic failover from maxscale
Our scheme looks like this
Our config
#
|
# These groups are read by MariaDB server.
|
# Use it for options that only the server (but not clients) should see |
|
# this is read by the standalone daemon and embedded servers |
[server]
|
|
# this is only for the mysqld standalone daemon |
[mysqld]
|
|
#
|
# * Basic Settings
|
#
|
|
#user = mysql
|
pid-file = /run/mysqld/mysqld.pid
|
basedir = /usr
|
#datadir = /var/lib/mysql
|
#tmpdir = /tmp
|
|
# Broken reverse DNS slows down connections considerably and name resolve is
|
# safe to skip if there are no "host by domain name" access grants |
#skip-name-resolve
|
|
# Instead of skip-networking the default is now to listen only on |
# localhost which is more compatible and is not less secure.
|
bind-address = 0.0.0.0 |
skip-networking = 0 |
skip-name-resolve = 1 |
tmp_table_size = 256M
|
max_heap_table_size = 256M
|
performance_schema = ON
|
innodb_buffer_pool_size = 40G
|
innodb_log_file_size = 1G
|
join_buffer_size = 10M
|
#replicate-do-db = mybase |
sync_binlog = 0 |
proxy_protocol_networks='192.168.0.3' |
|
#
|
# * Fine Tuning
|
#
|
key_buffer_size = 128M
|
max_allowed_packet = 1G
|
thread_stack = 192K
|
thread_cache_size = 8 |
# This replaces the startup script and checks MyISAM tables if needed |
# the first time they are touched
|
#myisam_recover_options = BACKUP
|
max_connections = 500 |
table_cache = 64 |
|
query_cache_type = 0 |
query_cache_limit = 512K
|
query_cache_min_res_unit = 4k
|
query_cache_size = 100M
|
slave-parallel-threads = 2000 |
#
|
# * Logging and Replication
|
#
|
slow_query_log=ON
|
log_output=FILE
|
long_query_time=0 |
log_slow_admin_statements=ON
|
log_slow_slave_statements=ON
|
log_slow_rate_limit=100 |
performance_schema=ON
|
performance-schema-instrument='statement/%=ON' |
performance-schema-consumer-statements-digest=ON
|
innodb_monitor_enable=all
|
query_response_time_stats=ON
|
userstat=ON
|
# Both location gets rotated by the cronjob.
|
# Be aware that this log type is a performance killer. |
# Recommend only changing this at runtime for short testing periods if needed! |
#general_log_file = /var/log/mysql/mysql.log
|
#general_log = 1 |
|
# When running under systemd, error logging goes via stdout/stderr to journald
|
# and when running legacy init error logging goes to syslog due to
|
# /etc/mysql/conf.d/mariadb.conf.d/50-mysqld_safe.cnf |
# Enable this if you want to have error logging into a separate file |
#log_error = /var/log/mysql/error.log
|
# Enable the slow query log to see queries with especially long duration |
#slow_query_log_file = /var/log/mysql/mariadb-slow.log
|
#long_query_time = 10 |
#log_slow_verbosity = query_plan,explain
|
#log-queries-not-using-indexes
|
#min_examined_row_limit = 1000 |
|
# 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 = /var/log/mysql/mysql-bin.log
|
expire_logs_days = 4 |
#max_binlog_size = 100M
|
|
#
|
# * SSL/TLS
|
#
|
|
# For documentation, please read
|
# https://mariadb.com/kb/en/securing-connections-for-client-and-server/ |
#ssl-ca = /etc/mysql/cacert.pem
|
#ssl-cert = /etc/mysql/server-cert.pem
|
#ssl-key = /etc/mysql/server-key.pem
|
#require-secure-transport = on
|
|
#
|
# * Character sets
|
#
|
|
# MySQL/MariaDB default is Latin1, but in Debian we rather default to the full |
# utf8 4-byte character set. See also client.cnf |
character-set-server = utf8mb4
|
collation-server = utf8mb4_general_ci
|
|
#
|
# * 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! |
# Most important is to give InnoDB 80 % of the system RAM for buffer use: |
# https://mariadb.com/kb/en/innodb-system-variables/#innodb_buffer_pool_size |
#innodb_buffer_pool_size = 8G
|
|
# this is only for embedded server |
[embedded]
|
|
# This group is only read by MariaDB servers, not by MySQL.
|
# If you use the same .cnf file for MySQL and MariaDB, |
# you can put MariaDB-only options here
|
[mariadb]
|
log-basename=master2
|
log_bin = /var/lib/mysql/mariadb-bin
|
log_bin_index = /var/lib/mysql/mariadb-bin.index
|
relay_log = /var/lib/mysql/relay-bin
|
relay_log_index = /var/lib/mysql/relay-bin.index
|
server-id = 2 |
log-slave-updates = 1 |
gtid_strict_mode = 0 |
slave-skip-errors = 1396 |
gtid-domain-id = 1 |
# This group is only read by MariaDB-10.9 servers. |
# If you use the same .cnf file for MariaDB of different versions, |
# use this group for options that older servers don't understand |
[mariadb-11.3] |
|
Attachments
Issue Links
- relates to
-
MDEV-31404 Implement binlog_space_limit
-
- Closed
-
-
MDEV-34504 PURGE BINARY LOGS not working anymore
-
- Closed
-
You may need to set slave_connections_needed_for_purge=0, otherwise (since 11.4) automatic purge is blocked if there is no slave connected. I don't see this variable in your config (and it defaults to 1).
But you mention that even manual PURGE BINARY LOGS is not working in 11.5.2. 11.5.2 contains this commit:
commit dd9978096797b73cb9fc5f156821f68440eb61b9
Author: Monty <monty@mariadb.org>
Date: Tue Jul 9 10:56:06 2024 +0300
MDEV-34504 PURGE BINARY LOGS not working anymore
PURGE BINARY LOGS did not always purge binary logs. This commit fixes
some of the issues and adds notifications if a binary log cannot be
purged.
With this, manual PURGE should word regardless of connected slaves, and it should output a "Note" if it cannot purge a file for some other reason (might require SHOW WARNINGS to see). Also, there should be a "Note" in the error log if automatic purge is blocked due to no connected slave (again might require enabling error log verbosity).
So not sure if there is something else going on here, but as a start, can you test if setting slave_connections_needed_for_purge=0 makes things any different?