练习 - 部署 Azure Database for MySQL 实例

已完成

在本练习中,你将创建 Azure Database for MySQL 灵活服务器实例,并使用示例数据加载它。

获取示例应用程序和脚本

使用以下命令从 GitHub 存储库克隆示例应用程序和 shell 脚本:

git clone https://github.com/MicrosoftDocs/mslearn-jakarta-ee-azure.git

克隆项目将生成以下文件结构:

├── LICENSE
├── README.md
├── mvnw
├── mvnw.cmd
├── pom.xml
├── setup_mysql.sh
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── microsoft
    │   │           └── azure
    │   │               └── samples
    │   │                   ├── JAXRSConfiguration.java
    │   │                   ├── controllers
    │   │                   │   ├── CityService.java
    │   │                   │   └── CountryService.java
    │   │                   ├── entities
    │   │                   │   ├── City.java
    │   │                   │   └── Country.java
    │   │                   └── rest
    │   │                       └── WorldServiceEndpoint.java
    │   ├── resources
    │   │   └── META-INF
    │   │       └── persistence.xml
    │   └── webapp
    │       └── WEB-INF
    │           ├── beans.xml
    │           ├── createMySQLDataSource.sh
    │           └── web.xml
    └── test
        └── java
            └── com
                └── microsoft
                    └── azure
                        └── samples
                            └── SampleTest.java

登录到 Azure

如果尚未登录到 Azure,请使用以下命令登录:

az login

设置默认安装位置

此模块中使用的脚本执行的命令需要一个选项 --location 。 使用以下命令指定此选项的默认值,替换为 <location> 相应的区域。 在本模块的后面部分,应使用相同的区域来部署 Jakarta EE 应用程序。

az configure --defaults location=<location>

创建 Azure Database for MySQL - 灵活服务器实例

导航到 mslearn-jakarta-ee-azure 目录,然后使用以下命令创建 Azure Database for MySQL 灵活服务器实例:

重要

在 IPv4 环境中使用以下命令。 如果环境具有 IPv6 地址,该命令将失败,因为该命令的防火墙配置尚不支持 IPv6 地址。

如果在脚本执行过程中发生错误,则进程在执行过程中停止。 脚本授予权限时可能会出现错误,如输出消息 Granting the User.Read.All, GroupMember.Read.All, and Application.Read.All permissions to the user managed identity所示。 若要修复此错误,请使用具有 Azure AD administrator 特权的用户再次登录到 Azure CLI,然后重新运行脚本。

./setup_mysql.sh flexible

典型输出包括以下成功,以及在本模块的其余部分使用的一些重要值:

[INFO] -------------------------------------------------------
[INFO] Azure Database for MySQL Setup Completed SUCCESS
[INFO] -------------------------------------------------------

请保留输出中显示的键值,因为在后续步骤中使用这些值。

设置环境变量

使用以下命令存储键值。 请务必将 <...> 占位符替换为上一部分中脚本输出的值。

export RESOURCE_GROUP_NAME=<resource-group>
export MYSQL_SERVER_INSTANCE=<MySQL-host-name>
export MYSQL_USER=<MySQL-admin-user-name>
export MYSQL_PASSWORD=<MySQL-password>

注释

Microsoft 建议使用最安全的可用身份验证流。 此过程中所述的身份验证流(例如数据库、缓存、消息传送或 AI 服务)需要对应用程序高度信任,并且存在其他流中不存在的风险。 仅当更安全的选项(例如无密码连接或无密钥连接的托管标识)不可行时,才使用此流。 对于本地计算机操作,首选无密码连接或无密钥连接的用户标识。

从示例数据库获取数据

在本模块中,你将使用从官方 MySQL 网站调用 world 的示例数据库。 若要获取数据,请使用以下步骤:

  1. 使用以下命令下载数据库文件:

    curl -o world-db.zip https://downloads.mysql.com/docs/world-db.zip
    
  2. 使用以下命令解压缩数据库文件:

    unzip world-db.zip
    
  3. 使用以下命令列出 SQL 文件:

    cd world-db
    ls -l world.sql
    

    以下输出是典型的:

    -rw-r--r--  1 ******  wheel  398635  1  7 12:25 world.sql
    

登录到数据库

使用以下命令仅使用用户名和密码连接到数据库,而不是访问令牌:

az mysql flexible-server connect \
    --name $MYSQL_SERVER_INSTANCE \
    --user azureuser \
    --interactive

系统提示时,输入之前检索到的 MySQL 密码。

连接后,可以在 SQL 提示符处使用以下查询来查看可用的用户名和插件:

SELECT user, host, plugin FROM mysql.user;

以下输出是典型的:

+----------------------------------+-----------+-----------------------+
| user                             | host      | plugin                |
+----------------------------------+-----------+-----------------------+
| azureuser                        | %         | mysql_native_password |
| $CURRENT_AZ_LOGIN_USER_NAME#EXT#@| %         | aad_auth              |
| azure_superuser                  | 127.0.0.1 | mysql_native_password |
| azure_superuser                  | localhost | mysql_native_password |
| mysql.infoschema                 | localhost | caching_sha2_password |
| mysql.session                    | localhost | caching_sha2_password |
| mysql.sys                        | localhost | caching_sha2_password |
+----------------------------------+-----------+-----------------------+

为应用程序创建数据库和表

使用以下步骤从 world.sql 脚本为应用程序创建数据库,然后验证其详细信息:

  1. 使用以下命令创建数据库和表:

    az mysql flexible-server execute \
        --name $MYSQL_SERVER_INSTANCE \
        --admin-password azureuser \
        --admin-password '$MYSQL_PASSWORD' \
        --file-path "./world-db/world.sql"
    

    小窍门

    还可以用于 mysql 从脚本文件创建数据库和表,但该命令需要很长时间才能完成。

  2. 使用以下命令确认服务器中的数据库和表:

    az mysql flexible-server connect \
        --name $MYSQL_SERVER_INSTANCE \
        --admin-user $MYSQL_USER \
        --database-name world \
        --interactive
    
  3. 系统提示时,输入之前检索到的 MySQL 密码。

    以下输出是典型的:

    MySQL 8.0.39
    mycli 1.27.2
    Home: http://mycli.net
    Bug tracker: https://github.com/dbcli/mycli/issues
    Thanks to the contributor - Jakub Boukal
    
  4. 在 SQL 提示符下,使用以下查询显示服务器上的数据库:

    show databases;
    

    以下输出是典型的:

    +--------------------+
    | Database           |
    +--------------------+
    | flexibleserverdb   |
    | information_schema |
    | mysql              |
    | newdatabase        |
    | performance_schema |
    | sys                |
    | world              |
    +--------------------+
    
    7 rows in set
    Time: 0.152s
    
  5. 使用以下查询列出数据库中的 world 表:

    show tables;
    

    以下输出是典型的:

    +-----------------+
    | Tables_in_world |
    +-----------------+
    | city            |
    | country         |
    | countrylanguage |
    +-----------------+
    
    3 rows in set
    Time: 0.145s
    

查询示例数据库

使用以下步骤查看数据库的内容 world

  1. 使用以下查询列出所有大洲信息:

    select distinct Continent from country ;
    

    以下输出是典型的:

    +---------------+
    | Continent     |
    +---------------+
    | North America |
    | Asia          |
    | Africa        |
    | Europe        |
    | South America |
    | Oceania       |
    | Antarctica    |
    +---------------+
    
  2. 使用以下查询按大洲列出国家/地区名称和国家/地区代码:

    select code,name from country where Continent='Asia';
    

    以下输出是典型的:

    +------+----------------------+
    | code | Name                 |
    +------+----------------------+
    | AFG  | Afghanistan          |
    | ARE  | United Arab Emirates |
    | ARM  | Armenia              |
    | AZE  | Azerbaijan           |
    | BGD  | Bangladesh           |
    | BHR  | Bahrain              |
    | BRN  | Brunei               |
    | BTN  | Bhutan               |
    | CHN  | China                |
    | CYP  | Cyprus               |
    | GEO  | Georgia              |
    | HKG  | Hong Kong SAR        |
    | IDN  | Indonesia            |
    | IND  | India                |
    | IRN  | Iran                 |
    | IRQ  | Iraq                 |
    | ISR  | Israel               |
    | JOR  | Jordan               |
    | JPN  | Japan                |
    .....
    | VNM  | Vietnam              |
    | YEM  | Yemen                |
    +------+----------------------+
    51 rows in set (0.02 sec)
    
  3. 使用以下查询列出人口超过 100 万的所有城市:

    select * from city where CountryCode='JPN' AND Population > 1000000 ORDER BY Population DESC;
    

    以下输出是典型的:

    +------+---------------------+-------------+-----------+------------+
    | ID   | Name                | CountryCode | District  | Population |
    +------+---------------------+-------------+-----------+------------+
    | 1532 | Tokyo               | JPN         | Tokyo-to  |    7980230 |
    | 1533 | Jokohama [Yokohama] | JPN         | Kanagawa  |    3339594 |
    | 1534 | Osaka               | JPN         | Osaka     |    2595674 |
    | 1535 | Nagoya              | JPN         | Aichi     |    2154376 |
    | 1536 | Sapporo             | JPN         | Hokkaido  |    1790886 |
    | 1537 | Kioto               | JPN         | Kyoto     |    1461974 |
    | 1538 | Kobe                | JPN         | Hyogo     |    1425139 |
    | 1539 | Fukuoka             | JPN         | Fukuoka   |    1308379 |
    | 1540 | Kawasaki            | JPN         | Kanagawa  |    1217359 |
    | 1541 | Hiroshima           | JPN         | Hiroshima |    1119117 |
    | 1542 | Kitakyushu          | JPN         | Fukuoka   |    1016264 |
    +------+---------------------+-------------+-----------+------------+
    11 rows in set (0.33 sec)
    

单元摘要

已完成 Azure Database for MySQL 灵活服务器实例的设置和准备。 下一单元介绍将 Jakarta EE 应用程序部署到 Azure 应用服务上的 JBoss EAP 的过程,以及各种配置选项。