用dbconfig-common配置数据库

用dbconfig-common配置数据库

很多 OpenStack 服务组件需要配置对数据库的访问,可以通过下面的命令对 DSN (Database Source Name) 进行配置:

[database]
connection = mysql+pymysql://keystone:0dec658e3f14a7d@localhost/keystonedb

This connection directive will be handled by the dbconfig-common package, which provides a standard Debian interface. It enables you to configure Debian database parameters. It includes localized prompts for many languages and it supports the following database backends: SQLite, MySQL, and PostgreSQL.

默认情况下, ``dbconfig-common``包配置 OpenStack服务使用SQLite。所以如果你使用debconf的非交互模式并且没有进行任何预先配置,那么你安装的 OpenStack 服务会使用SQLite数据库。

默认情况下, dbconfig-common 也不提供通过网络访问数据库服务的方式。如果你想让``dbconfig-common`` 包提示通过网络访问远端数据库服务而不是通过UNIX套接字,像下面这样重新配置它:

# apt-get install dbconfig-common && dpkg-reconfigure dbconfig-common

当你重新配置``dbconfig-common`` 包时会弹出下面的屏幕:

../_images/dbconfig-common_keep_admin_pass.png

../_images/dbconfig-common_used_for_remote_db.png

与其他的debconf 提示不同,你不能使用``debconf-set-selections``对``dbconfig-common``交互提示进行预先应答。而是必须在 /etc/dbconfig-common`中创建文件。例如,你可以 ``dbconfig-common``创建一个keystone配置文件,文件位于 :file:/etc/dbconfig-common/keystone.conf`,像下面这样:

dbc_install='true'
dbc_upgrade='true'
dbc_remove=''
dbc_dbtype='mysql'
dbc_dbuser='keystone'
dbc_dbpass='PASSWORD'
dbc_dbserver=''
dbc_dbport=''
dbc_dbname='keystonedb'
dbc_dbadmin='root'
dbc_basepath=''
dbc_ssl=''
dbc_authmethod_admin=''
dbc_authmethod_user=''

当创建这个文件后,运行下面命令:

# apt-get install keystone

认证服务会安装 MySQL 作为后端数据库, ``keystonedb``作为数据库名和本地套接字文件。相关的DNS会是:

[database]
connection = mysql+pymysql://keystone:PASSWORD@localhost/keystonedb

dbconfig-common 包会配置MySQL这些权限并且为你创建数据库。自从 OpenStack 2014.1.1,所有Debian 的 OpenStack包在数据库创建(如果你决定使用MySQL做后端数据库)后会执行下面的MySQL查询:

ALTER DATABASE keystone CHARACTER SET utf8 COLLATE utf8_unicode_ci

因此,如果使用的是 Debian 系统,您将不需要关心数据库的创建、访问权限以及属性的配置。所有这些都由包来处理。

作为例子,这里的截屏来自 cinder-common 包:

../_images/dbconfig-common_1_configure-with-dbconfig-yes-no.png

../_images/dbconfig-common_2_db-types.png

../_images/dbconfig-common_3_connection_method.png

../_images/dbconfig-common_4_mysql_root_password.png

../_images/dbconfig-common_5_mysql_app_password.png

../_images/dbconfig-common_6_mysql_app_password_confirm.png

在Debian中,默认情况下,你可以从本地通过套接字文件或者127.0.0.1访问MySQL数据库。为了从网络上访问,你必须编辑:file:/etc/mysql/my.cnf`文件和 ``mysql.user` 表。为了完成这些操作,Debian在``openstack-deploy``包中提供了一个帮助脚本。为了使用它,安装包:

# apt-get install openstack-deploy

运行帮助脚本:

# /usr/share/openstack-deploy/mysql-remote-root

或者,如果你没有安装这个包,运行下面脚本,启用远程root访问:

#!/bin/sh

set -e

SQL="mysql --defaults-file=/etc/mysql/debian.cnf -Dmysql -e"

ROOT_PASS=`${SQL} "SELECT Password FROM user WHERE User='root' LIMIT 1;" \
  | tail -n 1`
${SQL} "REPLACE INTO user SET host='%', user='root',\
  password='${ROOT_PASS}', Select_priv='Y', Insert_priv='Y',\
  Update_priv='Y', Delete_priv='Y', Create_priv='Y', Drop_priv='Y',\
  Reload_priv='Y', Shutdown_priv='Y', Process_priv='Y',  File_priv='Y',\
  Grant_priv='Y', References_priv='Y', Index_priv='Y', Alter_priv='Y',\
  Super_priv='Y', Show_db_priv='Y', Create_tmp_table_priv='Y',\
  Lock_tables_priv='Y', Execute_priv='Y', Repl_slave_priv='Y',\
  Repl_client_priv='Y', Create_view_priv='Y', Show_view_priv='Y',\
  Create_routine_priv='Y', Alter_routine_priv='Y', Create_user_priv='Y',\
  Event_priv='Y', Trigger_priv='Y' "
${SQL} "FLUSH PRIVILEGES"
sed -i 's|^bind-address[ \t]*=.*|bind-address = 0.0.0.0|' /etc/mysql/my.cnf
/etc/init.d/mysql restart

在你安装OpenStack服务到多节点上之前必须保证能远程访问。

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.