# 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 = 6380M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 150M
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=2G; gcache.page_size=1G"
## Galera Cluster configuration
wsrep_cluster_name="MSO-automated-tests-cluster"
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="mariadb3"
##wsrep_node_address="192.169.3.184"
wsrep_on=ON
## 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