Subsections


Installing and Configuring MySQL

Installing and Configuring MySQL - Phase I

If you have installed MySQL from a package (.deb, .rpm, ...) or already installed it from source, please skip to the next section.

If you use the ./configure --with-mysql=mysql-directory statement for configuring Bacula, you will need MySQL version 4.1 or later installed in the mysql-directory. If you are using one of the new modes such as ANSI/ISO compatibility, you may experience problems.

If MySQL is installed in the standard system location, you need only enter --with-mysql since the configure program will search all the standard locations. If you install MySQL in your home directory or some other non-standard directory, you will need to provide the full path to it.

Installing and Configuring MySQL is not difficult but can be confusing the first time. As a consequence, below, we list the steps that we used to install it on our machines. Please note that our configuration leaves MySQL without any user passwords. This may be an undesirable situation if you have other users on your system.

The notes below describe how to build MySQL from the source tar files. If you have a pre-installed MySQL, you can return to complete the installation of Bacula, then come back to Phase II of the MySQL installation. If you wish to install MySQL from rpms, you will probably need to install the following:

mysql-<version>.rpm
mysql-server-<version>.rpm
mysql-devel-<version>.rpm

If you wish to install them from debs, you will probably need the following:

mysql-server-<version>.deb
mysql-client-<version>.deb
libmysqlclient15-dev-<version>.deb
libmysqlclient15off-<version>.deb

The names of the packages may vary from distribution to distribution. It is important to have the devel or dev package loaded as it contains the libraries and header files necessary to build Bacula. There may be additional packages that are required to install the above, for example, zlib and openssl.

Once these packages are installed, you will be able to build Bacula (using the files installed with the mysql package, then run MySQL using the files installed with mysql-server. If you have installed MySQL by debs or rpms, please skip Phase I below, and return to complete the installation of Bacula, then come back to Phase II of the MySQL installation when indicated to do so.

Beginning with Bacula version 1.31, the thread safe version of the MySQL client library is used, and hence you should add the --enable-thread-safe-client option to the ./configure as shown below:

  1. Download MySQL source code from www.mysql.com/downloadshttp://www.mysql.com/downloads

  2. Detar it with something like:

    tar xvfz mysql-filename

    Note, the above command requires GNU tar. If you do not have GNU tar, a command such as:

    zcat mysql-filename | tar xvf -

    will probably accomplish the same thing.

  3. cd mysql-source-directory

    where you replace mysql-source-directory with the directory name where you put the MySQL source code.

  4. ./configure --enable-thread-safe-client --prefix=mysql-directory

    where you replace mysql-directory with the directory name where you want to install mysql. Normally for system wide use this is /usr/local/mysql. In my case, I use ~kern/mysql.

  5. make

    This takes a bit of time.

  6. make install

    This will put all the necessary binaries, libraries and support files into the mysql-directory that you specified above.

  7. ./scripts/mysql_install_db

    This will create the necessary MySQL databases for controlling user access. Note, this script can also be found in the bin directory in the installation directory

The MySQL client library mysqlclient requires the gzip compression library libz.a or libz.so. If you are using rpm packages, these libraries are in the libz-devel package. On Debian systems, you will need to load the zlib1g-dev package. If you are not using rpms or debs, you will need to find the appropriate package for your system.

At this point, you should return to completing the installation of Bacula. Later after Bacula is installed, come back to this chapter to complete the installation. Please note, the installation files used in the second phase of the MySQL installation are created during the Bacula Installation.

Installing and Configuring MySQL - Phase II

At this point, you should have built and installed MySQL, or already have a running MySQL, and you should have configured, built and installed Bacula. If not, please complete these items before proceeding.

Please note that the ./configure used to build Bacula will need to include --with-mysql=mysql-directory, where mysql-directory is the directory name that you specified on the ./configure command for configuring MySQL. This is needed so that Bacula can find the necessary include headers and library files for interfacing to MySQL.

Bacula will install scripts for manipulating the database (create, delete, make tables etc) into the main installation directory. These files will be of the form *_bacula_* (e.g. create_bacula_database). These files are also available in the bacula-src/src/cats directory after running ./configure. If you inspect create_bacula_database, you will see that it calls create_mysql_database. The *_bacula_* files are provided for convenience. It doesn't matter what database you have chosen; create_bacula_database will always create your database.

Now you will create the Bacula MySQL database and the tables that Bacula uses.

  1. Start mysql. You might want to use the startmysql script provided in the Bacula release.

  2. cd install-directory This directory contains the Bacula catalog interface routines.

  3. ./grant_mysql_privileges This script creates unrestricted access rights for the user bacula. You may want to modify it to suit your situation. Please note that none of the userids, including root, are password protected. If you need more security, please assign a password to the root user and to bacula. The program mysqladmin can be used for this.

  4. ./create_mysql_database This script creates the MySQL bacula database. The databases you create as well as the access databases will be located in install-dir/var/ in a subdirectory with the name of the database, where install-dir is the directory name that you specified on the --prefix option. This can be important to know if you want to make a special backup of the Bacula database or to check its size.

  5. ./make_mysql_tables This script creates the MySQL tables used by Bacula.

Each of the three scripts (grant_mysql_privileges, create_mysql_database and make_mysql_tables) allows the addition of a command line argument. This can be useful for specifying the user and or password. For example, you might need to add -u root to the command line to have sufficient privilege to create the Bacula tables.

To take a closer look at the access privileges that you have setup with the above, you can do:

<mysql-directory>/bin/mysql -u root mysql
select * from user;

Newer versions of MySQL (e.g. 5.7) do not automatically create a user when granting permissions with the grant_mysql_privileges, and so the script may fail. In that case, you will want to do something similar to the following:

su
(enter root password)
<mysql-directory>/bin/mysql mysql
create user bacula identified by '<password>';

then re-run the script.

Re-initializing the Catalog Database

After you have done some initial testing with Bacula, you will probably want to re-initialize the catalog database and throw away all the test Jobs that you ran. To do so, you can do the following:

  cd <install-directory>
  ./drop_mysql_tables
  ./make_mysql_tables

Please note that all information in the database will be lost and you will be starting from scratch. If you have written on any Volumes, you must write an end of file mark on the volume so that Bacula can reuse it. Do so with:

   (stop Bacula or unmount the drive)
   mt -f /dev/nst0 rewind
   mt -f /dev/nst0 weof

Where you should replace /dev/nst0 with the appropriate tape drive device name for your machine.

Linking Bacula with MySQL

After configuring Bacula with

./configure --enable-thread-safe-client --prefix=mysql-directory where mysql-directory is in my case /home/kern/mysql, you may have to configure the loader so that it can find the MySQL shared libraries. If you have previously followed this procedure and later add the --enable-thread-safe-client options, you will need to rerun the ldconfig program shown below. If you put MySQL in a standard place such as /usr/lib or /usr/local/lib this will not be necessary, but in my case it is. The description that follows is Linux specific. For other operating systems, please consult your manuals on how to do the same thing:

First edit: /etc/ld.so.conf and add a new line to the end of the file with the name of the mysql-directory. In my case, it is:

/home/kern/mysql/lib/mysql then rebuild the loader's cache with:

/sbin/ldconfig If you upgrade to a new version of MySQL, the shared library names will probably change, and you must re-run the /sbin/ldconfig command so that the runtime loader can find them.

Alternatively, your system my have a loader environment variable that can be set. For example, on a Solaris system where I do not have root permission, I use:

LD_LIBRARY_PATH=/home/kern/mysql/lib/mysql

Finally, if you have encryption enabled in MySQL, you may need to add -lssl -lcrypto to the link. In that case, you can either export the appropriate LDFLAGS definition, or alternatively, you can include them directly on the ./configure line as in:

LDFLAGS="-lssl -lcyrpto" \
   ./configure \
      <your-options>

Installing MySQL from RPMs

If you are installing MySQL from RPMs, you will need to install both the MySQL binaries and the client libraries. The client libraries are usually found in a devel package, so you must install:

  mysql
  mysql-devel

This will be the same with most other package managers too.

Upgrading MySQL

If you upgrade MySQL, you must reconfigure, rebuild, and re-install Bacula otherwise you are likely to get bizarre failures. If you install from rpms and you upgrade MySQL, you must also rebuild Bacula. You can do so by rebuilding from the source rpm. To do so, you may need to modify the bacula.spec file to account for the new MySQL version.

MySQL Configuration Caution

Bacula requires that at least one of the TIMESTAMP fields in the database schema to have a valid value of zero. If you turn on the SQL_MODE STRICT_ALL_TABLES, you must be sure that you turn off the NO_ZERO_DATA and the NO_ZERO_IN_DATE restrictions or Bacula will not function correctly.

Kern Sibbald 2018-02-03