#### Beyond Linux® From Scratch (System V Edition) - Version 12.3

### Chapter 22. Databases

- Prev

  lmdb-0.9.31

- Next

  PostgreSQL-17.4

- Up
- Home

# MariaDB-11.4.5

## Introduction to MariaDB

MariaDB is a community-developed fork and a drop-in replacement for the MySQL relational database management system.

This package is known to build and work properly using an LFS 12.3 platform.

### Package Information

- Download (HTTP): https://downloads.mariadb.org/interstitial/mariadb-11.4.5/source/mariadb-11.4.5.tar.gz

- Download MD5 sum: 49a28cc68710e0e3b030e90579eec7db

- Download size: 107 MB

- Estimated disk space required: 2.8 GB (745 MB installed)

- Estimated build time: 5.1 SBU (with parallelism=8, add 0.3 SBU for tests)

### Note

The installed size of MariaDB is 745 MB, but this can be reduced by about 265 MB, if desired, by removing the `/usr/share/mariadb/test` directory after installation.

### MariaDB Dependencies

#### Required

CMake-3.31.5

#### Recommended

libevent-2.1.12

#### Optional

Boost-1.87.0, libaio-0.3.113, libxml2-2.13.6, Linux-PAM-1.7.0, LZO-2.10, MIT Kerberos V5-1.21.3, pcre2-10.45, Ruby-3.4.2, sphinx-8.2.1, unixODBC-2.3.12, Valgrind-3.24.0, Groonga, KyTea, Judy, MeCab, MessagePack, mruby, MyRocks, Snappy, and ZeroMQ

## Installation of MariaDB

### Warning

MariaDB and MySQL cannot be installed on the same system without extensive changes to the build configuration of one of the two applications.

For security reasons, running the server as an unprivileged user and group is strongly encouraged. Issue the following (as `root`) to create the user and group:

    groupadd -g 40 mariadb &&
    useradd -c "MariaDB Server" -d /srv/mariadb -g mariadb -s /bin/false -u 40 mariadb

Install MariaDB by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -D CMAKE_BUILD_TYPE=Release                       \
          -D CMAKE_INSTALL_PREFIX=/usr                      \
          -D GRN_LOG_PATH=/var/log/groonga.log              \
          -D INSTALL_DOCDIR=share/doc/mariadb-11.4.5        \
          -D INSTALL_DOCREADMEDIR=share/doc/mariadb-11.4.5  \
          -D INSTALL_MANDIR=share/man                       \
          -D INSTALL_MYSQLSHAREDIR=share/mariadb            \
          -D INSTALL_MYSQLTESTDIR=share/mariadb/test        \
          -D INSTALL_PAMDIR=lib/security                    \
          -D INSTALL_PAMDATADIR=/etc/security               \
          -D INSTALL_PLUGINDIR=lib/mariadb/plugin           \
          -D INSTALL_SBINDIR=sbin                           \
          -D INSTALL_SCRIPTDIR=bin                          \
          -D INSTALL_SQLBENCHDIR=share/mariadb/bench        \
          -D INSTALL_SUPPORTFILESDIR=share/mariadb          \
          -D MYSQL_DATADIR=/srv/mariadb                     \
          -D MYSQL_UNIX_ADDR=/run/mariadb/mariadb.sock      \
          -D WITH_EXTRA_CHARSETS=complex                    \
          -D WITH_EMBEDDED_SERVER=ON                        \
          -D SKIP_TESTS=ON                                  \
          -D TOKUDB_OK=0                                    \
          .. &&
    make

To test the results, issue: make test. Two tests, my_tzinfo and test-connect, are known to fail.

### Note

A more extensive set of tests can be run with the following:

    pushd mysql-test
    ./mtr --parallel <N> --mem --force
    popd

Where N is the number of tests to run in parallel. Over 5400 tests are run in about 24 SBU with N=4. A few tests may fail, mainly due to character set issues.

Now, as the `root` user:

    make install

## Command Explanations

`-D WITH_EMBEDDED_SERVER=ON`: This switch enables compiling the embedded server library needed by certain applications, such as Amarok.

`-D WITH_EXTRA_CHARSETS=complex`: This switch enables support for the complex character sets.

`-D SKIP_TESTS=ON`: This switch disables tests for MariaDB Connector/C which are not supported without additional setup.

`-D WITHOUT_SERVER=ON`: Use this switch if you don't want the server and would like to build the client only.

### Note

There are numerous options available to cmake. Check the output of the cmake . -LH for additional customization options.

## Configuring MySQL

### Config Files

`/etc/mariadb/my.cnf` and `~/.my.cnf`

### Configuration Information

Create a basic `/etc/mariadb/my.cnf` file using the following command as the `root` user:

    install -v -dm 755 /etc/mariadb &&
    cat > /etc/mariadb/my.cnf << "EOF"
    # Begin /etc/mariadb/my.cnf

    # The following options will be passed to all MySQL clients
    [client]
    #password       = your_password
    port            = 3306
    socket          = /run/mariadb/mariadb.sock

    # The MySQL server
    [mariadb]
    port            = 3306
    socket          = /run/mariadb/mariadb.sock
    datadir         = /srv/mariadb
    skip-external-locking
    key_buffer_size = 16M
    max_allowed_packet = 1M
    sort_buffer_size = 512K
    net_buffer_length = 16K
    myisam_sort_buffer_size = 8M

    # Don't listen on a TCP/IP port at all.
    skip-networking

    # required unique id between 1 and 2^32 - 1
    server-id       = 1

    # Uncomment the following if you are using BDB tables
    #bdb_cache_size = 4M
    #bdb_max_lock = 10000

    # InnoDB tables are now used by default
    innodb_data_home_dir = /srv/mariadb
    innodb_log_group_home_dir = /srv/mariadb
    # All the innodb_xxx values below are the default ones:
    innodb_data_file_path = ibdata1:12M:autoextend
    # 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_log_file_size = 48M
    innodb_log_buffer_size = 16M
    innodb_flush_log_at_trx_commit = 1
    innodb_lock_wait_timeout = 50

    [mariadbdump]
    quick
    max_allowed_packet = 16M

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

    [isamchk]
    key_buffer = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M

    [myisamchk]
    key_buffer_size = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M

    [mariadbhotcopy]
    interactive-timeout

    # End /etc/mariadb/my.cnf
    EOF

You can now install a database and change the ownership to the unprivileged user and group (perform as the `root` user):

    mariadb-install-db --basedir=/usr --datadir=/srv/mariadb --user=mariadb &&
    chown -R mariadb:mariadb /srv/mariadb

Further configuration requires that the MariaDB server is running. Start the server using the following commands as the `root` user:

    install -v -m755 -o mariadb -g mariadb -d /run/mariadb &&
    mariadbd-safe --user=mariadb 2>&1 >/dev/null &

A default installation does not set up a password for the administrator, so use the following command as the `root` user to set one.

    mariadb-admin -u root password

Configuration of the server is now finished. Shut the server down using the following command as the `root` user:

    mariadb-admin -p shutdown

### Boot Script

Install the `/etc/rc.d/init.d/mariadb` init script included in the blfs-bootscripts-20250225 package as the `root` user to start the MariaDB server during system boot-up.

    make install-mariadb

### Note

If you have an existing database already and this installation of binaries was just an upgrade to a newer version, check the upstream documentation for upgrading. It is recommended to run:

    mariadb-upgrade

## Contents

Installed Programs: aria_chk, aria_dump_log, aria_ftdump, aria_pack, aria_read_log, aria_s3_copy, galera_new_cluster, galera_recovery, innochecksum, mariabackup, mariadb, mariadbd, mariadb-access, mariadb-admin, mariadb-backup, mariadb-binlog, mariadb-check, mariadb-client-test, mariadb-client-test-embedded, mariadb-conv, mariadb-convert-table-format, mariadb-find-rows, mariadbd-multi, mariadbd-safe, mariadbd-safe-helper, mariadb-dump, mariadb-dumpslow, mariadb-embedded, mariadb-fix-extensions, mariadb-hotcopy, mariadb-import, mariadb-install-db, mariadb-ldb, mariadb-plugin, mariadb-secure-installation, mariadb-setpermission, mariadb-service-convert, mariadb-show, mariadb-slap, mariadb-test, mariadb-test-embedded, mariadb-tzinfo-to-sql, mariadb-upgrade, mariadb-waitpid, mariadb_config, mbstream, msql2mysql, my_print_defaults, myisamchk, myisam_ftdump, myisamlog, myisampack, mysql_config, mytop, perror, replace, resolve_stack_dump, resolveip, sst_dump, wsrep_sst_common, wsrep_sst_mariabackup, wsrep_sst_mysqldump, and wsrep_sst_rsync
Installed Libraries: libmariadb.a, libmariadb.so, libmariadbclient.a, libmariadbd.a, libmariadbd.so, libmariadb.so.3, libmysqlclient.a, libmysqlclient.so, libmysqlclient_r.a, libmysqlclient_r.so, libmysqld.a, libmysqld.so, libmysqlservices.a, and about 70 modules under /usr/lib/mysql/plugin/
Installed Directories: /usr/{include,lib,share}/mysql, /usr/share/groonga{,-normalizer-mysql}, and /usr/share/doc/mariadb-11.4.5

### Short Descriptions

There are several symlinks from mysql* to their mariadb counterparts. These are maintained for compatibility.

The Perl DBI modules must be installed for some of the MariaDB support programs to function properly.

### Short Descriptions

aria_chk | is used to check, repair, optimize, sort and get information about Aria tables
aria_dump_log | is a tool to dump the contents of Aria log pages
aria_ftdump | displays full-text index information
aria_pack | is a tool to generate compressed, read-only Aria tables
aria_read_log | displays Aria log file contents
aria_s3_copy | copies an aria table to and from AWS S3
galera_new_cluster | bootstraps a new Galera cluster
galera_recovery | recovers data from a Galera cluster
innochecksum | prints checksums for InnoDB files
mariabackup | is an open source backup tool for InnoDB and XtraDB
mariadb | is a simple SQL shell with input line editing capabilities
mariadbd | is the MySQL server daemon
mariadb-access | checks the access privileges for a host name, user name, and database combination
mariadb-admin | is a client for performing administrative operations
mariadb-binlog | reads binary log files
mariadb-check | performs table maintenance: It checks, repairs, optimizes, or analyzes tables
mariadb-client-test | is used for testing aspects of the MySQL client API that cannot be tested using mariadb-test and its test language
mariadb-client-test-embedded | is a tool to test the client API for the embedded server
mariadb-conv | converts character sets for use with MariaDB
mariadb-convert-table-format | converts the tables in a database to use a particular storage engine
mariadbd-multi | is designed to manage several mariadb processes that listen for connections on different Unix socket files and TCP/IP ports
mariadbd-safe | is the recommended way to start a mariadb server on Unix and NetWare
mariadb-dump | is a backup program
mariadb-dumpslow | parses MySQL slow query log files and prints a summary of their contents
mariadb-embedded | is a MySQL client statically linked to libmariadbd
mariadb-find-rows | reads files containing SQL statements and extracts statements that match a given regular expression or that contain USE db_name or SET statements
mariadb-fix-extensions | converts the extensions for MyISAM (or ISAM) table files to their canonical forms
mariadb-hotcopy | locks the table, flushes the table and then performs a copy of the database
mariadb-import | reads a range of data formats, and inserts the data into a database
mariadb-install-db | initializes the MySQL data directory and creates the system tables that it contains, if they do not exist
mariadb-ldb | is the RocksDB tool
mariadb-plugin | is a utility that enables MySQL administrators to manage which plugins a MySQL server loads
mariadb-secure-installation | is a tool to improve MySQL installation security
mariadb-service-convert | generates a systemd unit based on the current mariadb settings
mariadb-setpermission | sets permissions in the MySQL grant tables
mariadb-show | shows the structure of a MariaDB database
mariadb-slap | is a diagnostic program designed to emulate client load for a MySQL server and to report the timing of each stage
mariadb-test | runs a test case against a MySQL server and optionally compares the output with a result file
mariadb-test-embedded | is similar to the mariadb-test command but is built with support for the libmariadbd embedded server
mariadb-tzinfo-to-sql | loads the time zone tables in the mariadb database
mariadb-upgrade | examines all tables in all databases for incompatibilities with the current version of MySQL Server
mariadb-waitpid | signals a process to terminate and waits for the process to exit
mariadb_config | gets compiler flags for using the MariaDB Connector/C
mbstream | is an utility for sending InnoDB and XTraDB backups over a stream
msql2mysql | is a tool to convert mSQL programs for use with MySQL
my_print_defaults | displays the options from option groups of option files
myisam_ftdump | displays information about FULLTEXT indexes in MyISAM tables
myisamchk | gets information about your database tables or checks, repairs, or optimizes them
myisamlog | displays MyISAM log file contents
myisampack | is a tool for compressing MyISAM tables
mysql_config | provides you with useful information for compiling your MySQL client and connecting it to MySQL
mytop | is a console-based tool for monitoring the threads and overall performance of a MySQL server
perror | is a utility that displays descriptions for system or storage engine error codes
replace | is a MariaDB/MySQL extension to the SQL standard
resolve_stack_dump | resolves a numeric stack dump to symbols
resolveip | is a utility for resolving IP addresses to host names and vice versa
sst_sump | dumps the content of sst files (the format used by RocksDB)

- Prev

  lmdb-0.9.31

- Next

  PostgreSQL-17.4

- Up
- Home