接上一篇 Bluemix云平台实践: CLI应用之DB2控制台(1)来看实际的例子:
将 DB2climate 应用程序部署到 Bluemix
1.. 登录到 Bluemix
usage: cf login [-a API_URL]
example: cf login -a https://api.ng.bluemix.net
2.. 创建一个 SQL Database 服务 实例。
usage: cf create-service SERVICE PLAN SERVICE_INSTANCE_NAME
example: cf create-service sqldb sqldb_small SQLDB_001
3.. 创建此存储库的一个 git 副本。
git clone https://hub.jazz.net/git/felixf/bluemix-db2-cli-mate
4.. 导航到克隆的应用程序的目录。
cd bluemix-db2-cli-mate
5.. 在克隆的 DB2climate app 目录中,使用 –no-start 标记推送应用程序,以便在启动该应用程序之前绑定您的 SQLDB 服务。
usage: cf push APP [--no-start]
example: cf push db2climate --no-start
6.. 将 SQLDB 服务绑定到新的应用程序。
usage: cf bind-service APP SERVICE_INSTANCE_NAME
example: cf bind-service db2climate SQLDB_001
7..启动应用程序。
usage: cf start APP
example: cf start db2climate
8.. 启动过程涉及到下载并安装一些程序包,其中包括 Ruby 运行时、DB2 v9.7 运行时客户端、Dropbox Linux 客户端、Dropbox API 客户端和一个重新包装的 Tmate 服务器。完整的包应该几分钟就能完成安装并正常运行。
请注意,当 Bluemix 第一次显示应用程序正在运行时,初始化可能仍在进行中。完全初始化的应用程序的大小约为 360MB。如果大于该值,则暗示着应用程序未准备就绪。等待 10 秒钟,然后运行以下命令来进行验证。
cf app db2climate
建立连接到 DB2climate 应用程序容器的 SSH 连接
1..发出以下命令:
cf files db2climate logs/tmate.log
3..连接 URL 在日志的最后一行。两个 1000 数字分别是您的终端的高度和宽度,后面跟着连接 URL(connection URL)。
如果使用了 Windows PC,则需要有一个类似 Cygwin 的终端程序。我使用了 Babun Windows shell,可以从 https://github.com/babun/babun 下载它。
备注:在第一次尝试建立 SSH 连接之前,确保您是在主目录中运行 ssh-keygen 程序;否则,您会获得一个 connection denied 错误。
4.. 在运行 ssh-keygen 程序之后,可以建立到应用程序容器的 SSH 连接。
将 Dropbox 设置为非临时性存储器
这时候需要了, 因为国内dropbox用不了。默认情况下,没有可用于 DB2climate 的持久性存储器,因此,如果应用程序停止或重启,那么写入磁盘的所有更改都将丢失。所以,我们需要添加一些非临时性的存储器来存储我们的数据库备份和导出的表格。
在本教程中,我将向您展示如何使用 Dropbox 作为持久存储。这不是惟一的解决方案,但这是让应用程序正常工作的快速方法。使用 Dropbox API 的优势大于使用 Dropbox Linux 客户端:Dropbox API 没有自动与云存储同步,因此,使用您的现有 Dropbox 帐户是安全的。
1.. DB2climate 提供了已安装的 Dropbox 核心 API 客户端的副本。为了避免每次重启 DB2climate 时都必须输入 Dropbox API 密钥,可以将 Dropbox API 密钥安全地存储在 SQLDB 内部,将它绑定到 DB2climate 应用程序。
运行 set_dbox_api.rb 脚本并按照提示输入 API key 和 API secret。接下来,选择适当的 access type。在创建 API 应用程序时,access type 必须与您的 API 应用程序的 permission type 相匹配。
2.. 在将 Dropbox API 密钥存储到数据库之后,就可以开始使用 Dropbox API 程序了。
运行 dropbox-api 命令。将屏幕上显示的 URL 复制/粘贴到一个浏览器中。登录您的 Dropbox 帐户并单击 Allow。在做完这些之后,返回到 SSH 控制台并按下 Enter 来结束设置。
恭喜您!您已经成功地将您的应用程序容器链接到了您的 Dropbox 帐户!
3.. 运行 dropbox.api help 获得可用命令的列表。例如,要从容器将 local.tar 文件上传到 Dropbox 根目录,请发出以下命令:
$ dropbox-api put local.tar dropbox:/
要列出 Dropbox 帐户中的所有文件,可以发出以下命令:
$ dropbox-api ls
使用 DB2climate 作为一个 DB2 客户端
在使用 SSH 访问 warden 容器之后,可以对 SQLDB 运行所有受支持的 DB2 CLI 命令。所有 TCPIP 节点和数据库都已自动为您编目。
此外,在运行 DB2 命令的时候,为了避免用户引用 VCAP_SERVICE 文件来获得数据库凭据,以下脚本可以帮助您轻松管理您的数据库。
通用脚本
- 脚本名称:ls_db.rb
用途:列出绑定到应用程序的所有数据库并显示其凭据。
syntax: $ ls_db.rb
Example: ls_db.rb
Syntax: $ catalog_db.rb db_name (where db_name is the instance name of your created SQLDB service)
Example: $ catalog_db.rb SQLDB_001
备注:此脚本是自动在您建立 SSH 连接时执行的,用于设置您的数据库环境,因此您无需单独运行它。
脚本名称:connect_db.rb
用途:连接到数据库。
Syntax: connectdb.rbdbname(wheredbnameistheinstancenameofyourcreatedSQLDBservice)Example: connect_db.rb SQLDB_001
脚本名称:gen_dbSchema.rb
用途:生成一种数据库模式。
Syntax: $ gen_dbSchema.rb [database_db_name] schema_name
Example 1: $ gen_dbSchema.rb BX (single db instance bound to the app)
Example 2: $ gen_dbSchema.rb SQLDB_002 BX (multi db instances bound to the app)
syntax: $ cr_sample_tables.rb db_Name
Example: $ cr_sample_tables.rb SQLDB_001
syntax: $ ls_tables.rb [db_name] schema_name
Example 1: $ ls_tables.rb BX (single db instance bound to the app)
Example 2: $ ls_tables.rb SQLDB_002 BX (multi db instances bound to the app)
导出和导入 table 脚本
- 脚本名称:export_table.rb
用途:用受支持的格式(.ixf 或 .del)导出一个表格。
Output file: the name of exported table with export format as extension
syntax: $ export_table.rb [db_name] schema_name table_Name export_format
Example 1: $ export_table.rb BX country ixf (single db instance bound to the app)
Output file name is country.ixf
Example 2: $ export_table.rb SQLDB_002 BX CITY del
(multi db instances bound to the app)
Output file name is CITY.del
syntax: $ import_table.rb [db_name] schema_name table_file_name [import_mode]
Supported Import mode are: 1=insert(default), 2=insert_update,
3=replace, 4=replace_create (ixf only), 5=create (ixf only)
Example 1: $ import_table.rb BX country.ixf
(single db instance bound to the app with default insert mode)
Example 2: $ import_table.rb SQLDB_002 BX country.ixf 2
(multi db instances bound to the app with insert_update mode)
备份和还原数据库的脚本
不幸的是,我们不能在 DB2climate 中运行内置的 db2 backup 或 db2 restore 实用程序。这是因为使用了 db2 get authorizations 命令 “tells all”,因此默认用户没有获得足够的授权来执行备份和还原。
DB2 备份/还原实用程序需要一个实例级的授权,比如 SYSADM、SYSCTRL 或 SYSMAINT。但是,默认用户只有 DBADM 授权,因此,执行备份和还原的任何尝试都将导致以下错误:
解决方法 I 推荐使用 db2move 命令,我们通常使用该命令将数据库从一个操作系统迁移到另一个操作系统。此命令将会以 IXF 格式导出所有表格,这样就可以将备份导入一个新数据库。该命令是自动运行的,而且极易使用。请注意,db2move 没有提供 DB2 运行时客户端。因此它只能在服务器版本上使用,但您可以免费 下载 DB2 Express-C。
Bluemix 应用程序容器的大小被限制为最大 2GB,因此,安装完整的 DB2 Express-C 服务器副本将会使用太多的容器空间。幸运的是,我们只需三个文件来安装 db2move 实用程序并让它正常运行:db2move、db2common.bnd 和 db2move.bnd。
将 db2move 放入 sqllib/bin 目录,并将两个 .bnd 文件放入 sqllib/bnd 目录。这将为您提供完全正常工作的 db2move 实用程序。
备注:db2move 实用程序已经与 DB2climate 应用程序打包在一起,因此,您不必对此样例应用程序执行上述任务。
以下是备份和还原数据库的脚本:
Syntax: $ export_db.rb db_name
Example: $ export_db.rb SQLDB_001
Sample output file : `$ SQLDB_001.tar.gz
Syntax: $ import_db.rb db_name db_backup_file_name
Example: $ import_db.rb SQLDB_001 SQLDB_001.tar.gz