练习 - 部署 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
的示例数据库。 若要获取数据,请使用以下步骤:
使用以下命令下载数据库文件:
curl -o world-db.zip https://downloads.mysql.com/docs/world-db.zip
使用以下命令解压缩数据库文件:
unzip world-db.zip
使用以下命令列出 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 脚本为应用程序创建数据库,然后验证其详细信息:
使用以下命令创建数据库和表:
az mysql flexible-server execute \ --name $MYSQL_SERVER_INSTANCE \ --admin-password azureuser \ --admin-password '$MYSQL_PASSWORD' \ --file-path "./world-db/world.sql"
小窍门
还可以用于
mysql
从脚本文件创建数据库和表,但该命令需要很长时间才能完成。使用以下命令确认服务器中的数据库和表:
az mysql flexible-server connect \ --name $MYSQL_SERVER_INSTANCE \ --admin-user $MYSQL_USER \ --database-name world \ --interactive
系统提示时,输入之前检索到的 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
在 SQL 提示符下,使用以下查询显示服务器上的数据库:
show databases;
以下输出是典型的:
+--------------------+ | Database | +--------------------+ | flexibleserverdb | | information_schema | | mysql | | newdatabase | | performance_schema | | sys | | world | +--------------------+ 7 rows in set Time: 0.152s
使用以下查询列出数据库中的
world
表:show tables;
以下输出是典型的:
+-----------------+ | Tables_in_world | +-----------------+ | city | | country | | countrylanguage | +-----------------+ 3 rows in set Time: 0.145s
查询示例数据库
使用以下步骤查看数据库的内容 world
:
使用以下查询列出所有大洲信息:
select distinct Continent from country ;
以下输出是典型的:
+---------------+ | Continent | +---------------+ | North America | | Asia | | Africa | | Europe | | South America | | Oceania | | Antarctica | +---------------+
使用以下查询按大洲列出国家/地区名称和国家/地区代码:
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)
使用以下查询列出人口超过 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 的过程,以及各种配置选项。