# Example MySQL config file for medium systems.
#
# This is for a system with memory 8G where MySQL plays
# an important part, or systems up to 128M where MySQL is used together with
# other programs (such as a web server)
#
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
##[client]
##user            = root
##port            = 3306
##socket          = //opt/app/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
##performance_schema

slow_query_log =ON
long_query_time =2
slow_query_log_file =//var/lib/mysql/slow_query.log
##basedir         = //opt/app/mysql/product/mariadb-10.1.11-linux-x86_64
##datadir         = //opt/app/mysql/data
##port            = 3306
##socket          = //opt/app/mysql/mysql.sock
skip-external-locking
explicit_defaults_for_timestamp = true
skip-symbolic-links
local-infile = 0
#ignore_db_dir=lost+found
key_buffer_size = 16M
max_allowed_packet = 4M
table_open_cache = 100
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections = 500
lower_case_table_names = 1
thread_stack = 256K
thread_cache_size = 25
query_cache_size = 8M
query_cache_type = 0
query_prealloc_size = 512K
query_cache_limit = 1M

# Password validation
##plugin-load-add=simple_password_check.so
##simple_password_check_other_characters=0

# Audit Log settings
plugin-load-add=server_audit.so
server_audit=FORCE_PLUS_PERMANENT
server_audit_file_path=//var/lib/mysql/audit.log
server_audit_file_rotate_size=50M
server_audit_events=CONNECT,QUERY,TABLE
server_audit_logging=on

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (via the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking

# Replication Master Server (default)
# binary logging is required for replication
##log-bin=//var/lib/mysql/mysql-bin

# binary logging format - mixed recommended
binlog_format=row

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted

# Replication Slave (comment out master section to use this)
#
# To configure this host as a replication slave, you can choose between
# two methods :
#
# 1) Use the CHANGE MASTER TO command (fully described in our manual) -
#    the syntax is:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    where you replace <host>, <user>, <password> by quoted strings and
#    <port> by the master's port number (3306 by default).
#
#    Example:
#
#    CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306,
#    MASTER_USER='joe', MASTER_PASSWORD='secret';
#
# OR
#
# 2) Set the variables below. However, in case you choose this method, then
#    start replication for the first time (even unsuccessfully, for example
#    if you mistyped the password in master-password and the slave fails to
#    connect), the slave will create a master.info file, and any later
#    change in this file to the variables' values below will be ignored and
#    overridden by the content of the master.info file, unless you shutdown
#    the slave server, delete master.info and restart the slaver server.
#    For that reason, you may want to leave the lines below untouched
#    (commented) and instead use CHANGE MASTER TO (see above)
#
# required unique id between 2 and 2^32 - 1
# (and different from the master)
# defaults to 2 if master-host is set
# but will not function as a slave if omitted
#server-id       = 2
#
# The replication master for this slave - required
#master-host     =   <hostname>
#
# The username the slave will use for authentication when connecting
# to the master - required
#master-user     =   <username>
#
# The password the slave will authenticate with when connecting to
# the master - required
#master-password =   <password>
#
# The port the master is listening on.
# optional - defaults to 3306
#master-port     =  <port>
#
# binary logging - not required for slaves, but recommended
#log-bin=mysql-bin

# Uncomment the following if you are using InnoDB tables
##innodb_data_home_dir = //opt/app/mysql/data
##innodb_data_file_path = ibdata1:20M:autoextend:max:32G
##innodb_log_group_home_dir = //opt/app/mysql/iblogs
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 128M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 10M
innodb_log_files_in_group = 3
innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_autoextend_increment = 100
expire_logs_days = 8
open_files_limit = 2000
transaction-isolation=READ-COMMITTED
####### Galera parameters #######
## Galera Provider configuration
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=128M; gcache.page_size=10M"
## Galera Cluster configuration
wsrep_cluster_name="MSO-automated-tests-cluster"
wsrep_cluster_address="gcomm://"
#wsrep_cluster_address="gcomm://mariadb1,mariadb2,mariadb3"
##wsrep_cluster_address="gcomm://192.169.3.184,192.169.3.185,192.169.3.186"
## Galera Synchronization configuration
wsrep_sst_method=rsync
#wsrep_sst_method=xtrabackup-v2
#wsrep_sst_auth="sstuser:Mon#2o!6"
## Galera Node configuration
wsrep_node_name="mariadb1"
##wsrep_node_address="192.169.3.184"
wsrep_on=OFF
## Status notification
#wsrep_notify_cmd=/opt/app/mysql/bin/wsrep_notify
#######


[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 20971520

##[mysqlhotcopy]
##interactive-timeout
##[mysqld_safe]
##malloc-lib=//opt/app/mysql/local/lib/libjemalloc.so.1
##log-error=//opt/app/mysql/log/mysqld.log