e263c82e |
#!/bin/bash
# |
6d04fd7b |
# lib/databases/mysql
# Functions to control the configuration and operation of the **MySQL** database backend |
428af5a2 |
# Dependencies: |
6a5aa7c6 |
#
# - DATABASE_{HOST,USER,PASSWORD} must be defined |
428af5a2 |
# Save trace setting |
523f4880 |
_XTRACE_DB_MYSQL=$(set +o | grep xtrace) |
428af5a2 |
set +o xtrace
|
b3d8822e |
MYSQL_DRIVER=${MYSQL_DRIVER:-PyMySQL} |
cc6b4435 |
|
428af5a2 |
register_database mysql
|
1d968d7a |
MYSQL_SERVICE_NAME=mysql |
ec47bc1d |
if is_fedora && ! is_oraclelinux; then |
1d968d7a |
MYSQL_SERVICE_NAME=mariadb |
53753293 |
fi |
cc6b4435 |
# Functions
# ---------
|
0eec4f86 |
function get_database_type_mysql {
if [[ "$MYSQL_DRIVER" == "PyMySQL" ]]; then
echo mysql+pymysql
else
echo mysql
fi
}
|
995eb927 |
# Get rid of everything enough to cleanly change database backends
function cleanup_database_mysql { |
1d968d7a |
stop_service $MYSQL_SERVICE_NAME |
995eb927 |
if is_ubuntu; then
# Get ruthless with mysql |
8f90f765 |
apt_get purge -y mysql* mariadb* |
995eb927 |
sudo rm -rf /var/lib/mysql |
4376ae04 |
sudo rm -rf /etc/mysql |
995eb927 |
return |
1d968d7a |
elif is_oraclelinux; then |
ec47bc1d |
uninstall_package mysql-community-server
sudo rm -rf /var/lib/mysql |
1d968d7a |
elif is_suse || is_fedora; then |
1f316beb |
uninstall_package mariadb-server
sudo rm -rf /var/lib/mysql |
995eb927 |
else
return
fi
}
|
428af5a2 |
function recreate_database_mysql {
local db=$1 |
2832f280 |
mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$MYSQL_HOST -e "DROP DATABASE IF EXISTS $db;" |
157c84b8 |
mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -h$MYSQL_HOST -e "CREATE DATABASE $db CHARACTER SET utf8;" |
428af5a2 |
}
function configure_database_mysql { |
3ef23bce |
local my_conf mysql slow_log |
428af5a2 |
echo_summary "Configuring and starting MySQL"
|
c18b9651 |
if is_ubuntu; then |
3ef23bce |
my_conf=/etc/mysql/my.cnf |
ec47bc1d |
elif is_suse || is_oraclelinux; then
my_conf=/etc/my.cnf |
00011c08 |
elif is_fedora; then |
3ef23bce |
my_conf=/etc/my.cnf |
13e81ad1 |
local cracklib_conf=/etc/my.cnf.d/cracklib_password_check.cnf
if [ -f "$cracklib_conf" ]; then
inicomment -sudo "$cracklib_conf" "mariadb" "plugin-load-add"
fi |
00011c08 |
else
exit_distro_not_supported "mysql configuration" |
428af5a2 |
fi
# Start mysql-server |
00011c08 |
if is_fedora || is_suse; then
# service is not started by default |
1d968d7a |
start_service $MYSQL_SERVICE_NAME |
00011c08 |
fi
# Set the root password - only works the first time. For Ubuntu, we already |
9abb26d6 |
# did that with debconf before installing the package, but we still try,
# because the package might have been installed already.
sudo mysqladmin -u root password $DATABASE_PASSWORD || true |
00011c08 |
|
ea21eb4f |
# Update the DB to give user '$DATABASE_USER'@'%' full control of the all databases: |
428af5a2 |
sudo mysql -uroot -p$DATABASE_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON *.* TO '$DATABASE_USER'@'%' identified by '$DATABASE_PASSWORD';"
# Now update ``my.cnf`` for some local needs and restart the mysql service
|
ea21eb4f |
# Change bind-address from localhost (127.0.0.1) to any (::) and |
0526bb82 |
# set default db type to InnoDB |
dc7b4294 |
iniset -sudo $my_conf mysqld bind-address "$(ipv6_unquote $SERVICE_LISTEN_ADDRESS)" |
88b84094 |
iniset -sudo $my_conf mysqld sql_mode TRADITIONAL |
9c0b9f30 |
iniset -sudo $my_conf mysqld default-storage-engine InnoDB |
4b59fbb8 |
iniset -sudo $my_conf mysqld max_connections 1024 |
9c0b9f30 |
iniset -sudo $my_conf mysqld query_cache_type OFF
iniset -sudo $my_conf mysqld query_cache_size 0 |
428af5a2 |
|
c4f47345 |
if [[ "$DATABASE_QUERY_LOGGING" == "True" ]]; then
echo_summary "Enabling MySQL query logging" |
1f316beb |
if is_fedora; then |
3b53aeba |
slow_log=/var/log/mariadb/mariadb-slow.log
else
slow_log=/var/log/mysql/mysql-slow.log
fi |
0526bb82 |
sudo sed -e '/log.slow.queries/d' \
-e '/long.query.time/d' \
-e '/log.queries.not.using.indexes/d' \ |
3ef23bce |
-i $my_conf |
0526bb82 |
# Turn on slow query log, log all queries (any query taking longer than
# 0 seconds) and log all non-indexed queries |
9c0b9f30 |
iniset -sudo $my_conf mysqld slow-query-log 1
iniset -sudo $my_conf mysqld slow-query-log-file $slow_log
iniset -sudo $my_conf mysqld long-query-time 0
iniset -sudo $my_conf mysqld log-queries-not-using-indexes 1 |
c4f47345 |
fi |
7c73e8de |
|
1d968d7a |
restart_service $MYSQL_SERVICE_NAME |
428af5a2 |
}
function install_database_mysql { |
c18b9651 |
if is_ubuntu; then |
428af5a2 |
# Seed configuration with mysql password so that apt-get install doesn't
# prompt us for a password upon install. |
90333437 |
sudo debconf-set-selections <<MYSQL_PRESEED
mysql-server mysql-server/root_password password $DATABASE_PASSWORD
mysql-server mysql-server/root_password_again password $DATABASE_PASSWORD
mysql-server mysql-server/start_on_boot boolean true |
428af5a2 |
MYSQL_PRESEED
fi
# while ``.my.cnf`` is not needed for OpenStack to function, it is useful
# as it allows you to access the mysql databases via ``mysql nova`` instead
# of having to specify the username/password each time.
if [[ ! -e $HOME/.my.cnf ]]; then
cat <<EOF >$HOME/.my.cnf
[client]
user=$DATABASE_USER
password=$DATABASE_PASSWORD |
199d8574 |
host=$MYSQL_HOST |
428af5a2 |
EOF
chmod 0600 $HOME/.my.cnf
fi
# Install mysql-server |
1d968d7a |
if is_oraclelinux; then
install_package mysql-community-server
elif is_fedora || is_suse; then |
ec47bc1d |
install_package mariadb-server |
1d968d7a |
sudo systemctl enable $MYSQL_SERVICE_NAME |
ec47bc1d |
elif is_ubuntu; then
install_package mysql-server |
ca5c4713 |
else |
00011c08 |
exit_distro_not_supported "mysql installation" |
ca5c4713 |
fi |
5686dbc4 |
} |
b1d8e8e2 |
|
5686dbc4 |
function install_database_python_mysql { |
b1d8e8e2 |
# Install Python client module |
37421991 |
pip_install_gr $MYSQL_DRIVER
if [[ "$MYSQL_DRIVER" == "MySQL-python" ]]; then
ADDITIONAL_VENV_PACKAGES+=",MySQL-python" |
0f63eb3a |
elif [[ "$MYSQL_DRIVER" == "PyMySQL" ]]; then
ADDITIONAL_VENV_PACKAGES+=",PyMySQL" |
37421991 |
fi |
428af5a2 |
}
function database_connection_url_mysql { |
7e79d913 |
local db=$1
echo "$BASE_SQL_CONN/$db?charset=utf8" |
428af5a2 |
}
|
cc6b4435 |
|
428af5a2 |
# Restore xtrace |
523f4880 |
$_XTRACE_DB_MYSQL |
584d90ec |
# Local variables:
# mode: shell-script
# End: |