0
# MySQL Single Server Management
1
2
Complete management capabilities for MySQL single server deployments on Azure. This service provides server lifecycle management, database operations, security configuration, performance monitoring, and advisory recommendations.
3
4
## Capabilities
5
6
### Management Client
7
8
Main client for MySQL single server operations with comprehensive resource management capabilities.
9
10
```python { .api }
11
class MySQLManagementClient:
12
"""
13
MySQL management client for single server deployments.
14
15
Parameters:
16
- credential: TokenCredential for Azure authentication
17
- subscription_id: str, Azure subscription ID
18
- base_url: str, management endpoint (default: https://management.azure.com)
19
- polling_interval: int, LRO polling interval in seconds
20
21
Attributes:
22
- servers: Server lifecycle operations
23
- databases: Database management operations
24
- firewall_rules: Firewall configuration operations
25
- virtual_network_rules: Virtual network rule operations
26
- configurations: Server parameter operations
27
- server_parameters: Server parameter operations (legacy)
28
- log_files: Log file access operations
29
- server_administrators: Azure AD administrator operations
30
- recoverable_servers: Disaster recovery operations
31
- replicas: Read replica operations
32
- server_based_performance_tier: Performance tier operations (server-specific)
33
- location_based_performance_tier: Performance tier operations (location-based)
34
- check_name_availability: Name availability validation
35
- operations: Available API operations listing
36
- server_security_alert_policies: Threat detection policies
37
- query_texts: Performance query text operations
38
- top_query_statistics: Query performance statistics
39
- wait_statistics: Wait event statistics
40
- advisors: Performance advisory operations
41
- recommended_actions: Performance recommendations
42
- location_based_recommended_action_sessions_operation_status: Recommendation session status
43
- location_based_recommended_action_sessions_result: Recommendation session results
44
- private_endpoint_connections: Private endpoint connections
45
- private_link_resources: Private link resource operations
46
- server_keys: Customer-managed encryption keys
47
"""
48
def __init__(
49
self,
50
credential,
51
subscription_id: str,
52
base_url: str = "https://management.azure.com",
53
**kwargs
54
): ...
55
56
def close(self): ...
57
def __enter__(self): ...
58
def __exit__(self, *exc_details): ...
59
```
60
61
### Server Operations
62
63
Core server lifecycle management including creation, updates, deletion, restart, and upgrade operations.
64
65
```python { .api }
66
class ServersOperations:
67
"""Server lifecycle and management operations."""
68
69
def begin_create(self, resource_group_name: str, server_name: str, parameters, **kwargs):
70
"""
71
Creates a new MySQL server or updates an existing server.
72
73
Parameters:
74
- resource_group_name: str, resource group name
75
- server_name: str, server name (must be globally unique)
76
- parameters: ServerForCreate, server creation parameters
77
78
Returns:
79
LROPoller[Server] for server creation operation
80
"""
81
82
def begin_update(self, resource_group_name: str, server_name: str, parameters, **kwargs):
83
"""
84
Updates an existing MySQL server configuration.
85
86
Parameters:
87
- resource_group_name: str, resource group name
88
- server_name: str, server name
89
- parameters: ServerUpdateParameters, server update parameters
90
91
Returns:
92
LROPoller[Server] for server update operation
93
"""
94
95
def begin_delete(self, resource_group_name: str, server_name: str, **kwargs):
96
"""
97
Deletes a MySQL server and all its resources.
98
99
Parameters:
100
- resource_group_name: str, resource group name
101
- server_name: str, server name
102
103
Returns:
104
LROPoller[None] for server deletion operation
105
"""
106
107
def begin_restart(self, resource_group_name: str, server_name: str, **kwargs):
108
"""
109
Restarts a MySQL server.
110
111
Parameters:
112
- resource_group_name: str, resource group name
113
- server_name: str, server name
114
115
Returns:
116
LROPoller[None] for server restart operation
117
"""
118
119
def begin_start(self, resource_group_name: str, server_name: str, **kwargs):
120
"""
121
Starts a stopped MySQL server.
122
123
Parameters:
124
- resource_group_name: str, resource group name
125
- server_name: str, server name
126
127
Returns:
128
LROPoller[None] for server start operation
129
"""
130
131
def begin_stop(self, resource_group_name: str, server_name: str, **kwargs):
132
"""
133
Stops a running MySQL server.
134
135
Parameters:
136
- resource_group_name: str, resource group name
137
- server_name: str, server name
138
139
Returns:
140
LROPoller[None] for server stop operation
141
"""
142
143
def begin_upgrade(self, resource_group_name: str, server_name: str, parameters, **kwargs):
144
"""
145
Upgrades a MySQL server version.
146
147
Parameters:
148
- resource_group_name: str, resource group name
149
- server_name: str, server name
150
- parameters: ServerUpgradeParameters, upgrade parameters
151
152
Returns:
153
LROPoller[None] for server upgrade operation
154
"""
155
156
def get(self, resource_group_name: str, server_name: str, **kwargs):
157
"""
158
Gets details of a MySQL server.
159
160
Parameters:
161
- resource_group_name: str, resource group name
162
- server_name: str, server name
163
164
Returns:
165
Server object with current properties
166
"""
167
168
def list(self, **kwargs):
169
"""
170
Lists all MySQL servers in the subscription.
171
172
Returns:
173
Paged collection of Server objects
174
"""
175
176
def list_by_resource_group(self, resource_group_name: str, **kwargs):
177
"""
178
Lists MySQL servers in a resource group.
179
180
Parameters:
181
- resource_group_name: str, resource group name
182
183
Returns:
184
Paged collection of Server objects
185
"""
186
187
```
188
189
### Database Operations
190
191
Database management within MySQL servers including creation, deletion, and property queries.
192
193
```python { .api }
194
class DatabasesOperations:
195
"""Database management operations within MySQL servers."""
196
197
def begin_create_or_update(self, resource_group_name: str, server_name: str, database_name: str, parameters, **kwargs):
198
"""
199
Creates or updates a database within a MySQL server.
200
201
Parameters:
202
- resource_group_name: str, resource group name
203
- server_name: str, server name
204
- database_name: str, database name
205
- parameters: Database, database parameters (charset, collation)
206
207
Returns:
208
LROPoller[Database] for database operation
209
"""
210
211
def begin_delete(self, resource_group_name: str, server_name: str, database_name: str, **kwargs):
212
"""
213
Deletes a database from a MySQL server.
214
215
Parameters:
216
- resource_group_name: str, resource group name
217
- server_name: str, server name
218
- database_name: str, database name
219
220
Returns:
221
LROPoller[None] for deletion operation
222
"""
223
224
def get(self, resource_group_name: str, server_name: str, database_name: str, **kwargs):
225
"""
226
Gets database properties.
227
228
Parameters:
229
- resource_group_name: str, resource group name
230
- server_name: str, server name
231
- database_name: str, database name
232
233
Returns:
234
Database object with properties
235
"""
236
237
def list_by_server(self, resource_group_name: str, server_name: str, **kwargs):
238
"""
239
Lists databases in a MySQL server.
240
241
Parameters:
242
- resource_group_name: str, resource group name
243
- server_name: str, server name
244
245
Returns:
246
Paged collection of Database objects
247
"""
248
```
249
250
### Firewall Rules Operations
251
252
IP-based access control configuration for MySQL servers.
253
254
```python { .api }
255
class FirewallRulesOperations:
256
"""Firewall rule management for MySQL servers."""
257
258
def create_or_update(self, resource_group_name: str, server_name: str, firewall_rule_name: str, parameters, **kwargs):
259
"""
260
Creates or updates a firewall rule.
261
262
Parameters:
263
- resource_group_name: str, resource group name
264
- server_name: str, server name
265
- firewall_rule_name: str, firewall rule name
266
- parameters: Firewall rule parameters (start_ip_address, end_ip_address)
267
268
Returns:
269
LROPoller for firewall rule operation
270
"""
271
272
def delete(self, resource_group_name: str, server_name: str, firewall_rule_name: str, **kwargs):
273
"""
274
Deletes a firewall rule.
275
276
Parameters:
277
- resource_group_name: str, resource group name
278
- server_name: str, server name
279
- firewall_rule_name: str, firewall rule name
280
281
Returns:
282
LROPoller for deletion operation
283
"""
284
285
def get(self, resource_group_name: str, server_name: str, firewall_rule_name: str, **kwargs):
286
"""
287
Gets a firewall rule.
288
289
Parameters:
290
- resource_group_name: str, resource group name
291
- server_name: str, server name
292
- firewall_rule_name: str, firewall rule name
293
294
Returns:
295
FirewallRule object
296
"""
297
298
def list_by_server(self, resource_group_name: str, server_name: str, **kwargs):
299
"""
300
Lists firewall rules for a MySQL server.
301
302
Parameters:
303
- resource_group_name: str, resource group name
304
- server_name: str, server name
305
306
Returns:
307
Paged collection of FirewallRule objects
308
"""
309
```
310
311
### Virtual Network Rules Operations
312
313
VNet-based access control configuration for MySQL servers.
314
315
```python { .api }
316
class VirtualNetworkRulesOperations:
317
"""Virtual network rule management for MySQL servers."""
318
319
def create_or_update(self, resource_group_name: str, server_name: str, virtual_network_rule_name: str, parameters, **kwargs):
320
"""
321
Creates or updates a virtual network rule.
322
323
Parameters:
324
- resource_group_name: str, resource group name
325
- server_name: str, server name
326
- virtual_network_rule_name: str, virtual network rule name
327
- parameters: VNet rule parameters (virtual_network_subnet_id, ignore_missing_vnet_service_endpoint)
328
329
Returns:
330
LROPoller for virtual network rule operation
331
"""
332
333
def delete(self, resource_group_name: str, server_name: str, virtual_network_rule_name: str, **kwargs):
334
"""
335
Deletes a virtual network rule.
336
337
Parameters:
338
- resource_group_name: str, resource group name
339
- server_name: str, server name
340
- virtual_network_rule_name: str, virtual network rule name
341
342
Returns:
343
LROPoller for deletion operation
344
"""
345
346
def get(self, resource_group_name: str, server_name: str, virtual_network_rule_name: str, **kwargs):
347
"""
348
Gets a virtual network rule.
349
350
Parameters:
351
- resource_group_name: str, resource group name
352
- server_name: str, server name
353
- virtual_network_rule_name: str, virtual network rule name
354
355
Returns:
356
VirtualNetworkRule object
357
"""
358
359
def list_by_server(self, resource_group_name: str, server_name: str, **kwargs):
360
"""
361
Lists virtual network rules for a MySQL server.
362
363
Parameters:
364
- resource_group_name: str, resource group name
365
- server_name: str, server name
366
367
Returns:
368
Paged collection of VirtualNetworkRule objects
369
"""
370
```
371
372
### Configuration Operations
373
374
Server parameter and configuration management for MySQL instances.
375
376
```python { .api }
377
class ConfigurationsOperations:
378
"""MySQL server configuration and parameter management."""
379
380
def create_or_update(self, resource_group_name: str, server_name: str, configuration_name: str, parameters, **kwargs):
381
"""
382
Updates a configuration parameter.
383
384
Parameters:
385
- resource_group_name: str, resource group name
386
- server_name: str, server name
387
- configuration_name: str, parameter name
388
- parameters: Configuration value and properties
389
390
Returns:
391
LROPoller for configuration update
392
"""
393
394
def get(self, resource_group_name: str, server_name: str, configuration_name: str, **kwargs):
395
"""
396
Gets a configuration parameter value.
397
398
Parameters:
399
- resource_group_name: str, resource group name
400
- server_name: str, server name
401
- configuration_name: str, parameter name
402
403
Returns:
404
Configuration object with current value
405
"""
406
407
def list_by_server(self, resource_group_name: str, server_name: str, **kwargs):
408
"""
409
Lists all configuration parameters for a server.
410
411
Parameters:
412
- resource_group_name: str, resource group name
413
- server_name: str, server name
414
415
Returns:
416
Paged collection of Configuration objects
417
"""
418
```
419
420
### Performance Monitoring Operations
421
422
MySQL-specific performance insight capabilities including query analysis and performance recommendations.
423
424
```python { .api }
425
class QueryTextsOperations:
426
"""Query text retrieval for performance analysis."""
427
428
def get(self, resource_group_name: str, server_name: str, query_id: str, **kwargs):
429
"""
430
Gets query text by query ID.
431
432
Parameters:
433
- resource_group_name: str, resource group name
434
- server_name: str, server name
435
- query_id: str, query identifier
436
437
Returns:
438
QueryText object with query details
439
"""
440
441
def list_by_server(self, resource_group_name: str, server_name: str, query_ids: List[str], **kwargs):
442
"""
443
Lists query texts for specified query IDs.
444
445
Parameters:
446
- resource_group_name: str, resource group name
447
- server_name: str, server name
448
- query_ids: List[str], query identifiers
449
450
Returns:
451
Paged collection of QueryText objects
452
"""
453
454
class TopQueryStatisticsOperations:
455
"""Top query performance statistics operations."""
456
457
def get(self, resource_group_name: str, server_name: str, query_statistic_id: str, **kwargs):
458
"""
459
Gets query performance statistics.
460
461
Parameters:
462
- resource_group_name: str, resource group name
463
- server_name: str, server name
464
- query_statistic_id: str, statistic identifier
465
466
Returns:
467
QueryStatistic object with performance metrics
468
"""
469
470
def list_by_server(self, resource_group_name: str, server_name: str, parameters, **kwargs):
471
"""
472
Lists top query statistics for a server.
473
474
Parameters:
475
- resource_group_name: str, resource group name
476
- server_name: str, server name
477
- parameters: Query parameters (aggregation window, observed metrics)
478
479
Returns:
480
Paged collection of QueryStatistic objects
481
"""
482
483
class AdvisorsOperations:
484
"""Performance advisor operations for MySQL servers."""
485
486
def get(self, resource_group_name: str, server_name: str, advisor_name: str, **kwargs):
487
"""
488
Gets performance advisor details.
489
490
Parameters:
491
- resource_group_name: str, resource group name
492
- server_name: str, server name
493
- advisor_name: str, advisor name
494
495
Returns:
496
Advisor object with recommendations
497
"""
498
499
def list_by_server(self, resource_group_name: str, server_name: str, **kwargs):
500
"""
501
Lists performance advisors for a server.
502
503
Parameters:
504
- resource_group_name: str, resource group name
505
- server_name: str, server name
506
507
Returns:
508
Paged collection of Advisor objects
509
"""
510
511
class RecommendedActionsOperations:
512
"""Recommended action operations for MySQL servers."""
513
514
def get(self, resource_group_name: str, server_name: str, advisor_name: str, recommended_action_name: str, **kwargs):
515
"""
516
Gets a recommended action for performance improvement.
517
518
Parameters:
519
- resource_group_name: str, resource group name
520
- server_name: str, server name
521
- advisor_name: str, advisor name
522
- recommended_action_name: str, recommended action name
523
524
Returns:
525
RecommendedAction object with implementation details
526
"""
527
528
def list_by_server(self, resource_group_name: str, server_name: str, advisor_name: str, **kwargs):
529
"""
530
Lists recommended actions for a specific advisor.
531
532
Parameters:
533
- resource_group_name: str, resource group name
534
- server_name: str, server name
535
- advisor_name: str, advisor name
536
537
Returns:
538
Paged collection of RecommendedAction objects
539
"""
540
541
class PrivateEndpointConnectionsOperations:
542
"""Private endpoint connection operations for MySQL servers."""
543
544
def get(self, resource_group_name: str, server_name: str, private_endpoint_connection_name: str, **kwargs):
545
"""
546
Gets a private endpoint connection.
547
548
Parameters:
549
- resource_group_name: str, resource group name
550
- server_name: str, server name
551
- private_endpoint_connection_name: str, connection name
552
553
Returns:
554
PrivateEndpointConnection object
555
"""
556
557
def create_or_update(self, resource_group_name: str, server_name: str, private_endpoint_connection_name: str, parameters, **kwargs):
558
"""
559
Creates or updates a private endpoint connection.
560
561
Parameters:
562
- resource_group_name: str, resource group name
563
- server_name: str, server name
564
- private_endpoint_connection_name: str, connection name
565
- parameters: Connection parameters including private link service connection state
566
567
Returns:
568
LROPoller for private endpoint connection operation
569
"""
570
571
def delete(self, resource_group_name: str, server_name: str, private_endpoint_connection_name: str, **kwargs):
572
"""
573
Deletes a private endpoint connection.
574
575
Parameters:
576
- resource_group_name: str, resource group name
577
- server_name: str, server name
578
- private_endpoint_connection_name: str, connection name
579
580
Returns:
581
LROPoller for deletion operation
582
"""
583
584
def list_by_server(self, resource_group_name: str, server_name: str, **kwargs):
585
"""
586
Lists private endpoint connections for a server.
587
588
Parameters:
589
- resource_group_name: str, resource group name
590
- server_name: str, server name
591
592
Returns:
593
Paged collection of PrivateEndpointConnection objects
594
"""
595
596
class ServerKeysOperations:
597
"""Customer-managed encryption key operations for MySQL servers."""
598
599
def get(self, resource_group_name: str, server_name: str, key_name: str, **kwargs):
600
"""
601
Gets a server key used for encryption.
602
603
Parameters:
604
- resource_group_name: str, resource group name
605
- server_name: str, server name
606
- key_name: str, key name
607
608
Returns:
609
ServerKey object with key details
610
"""
611
612
def create_or_update(self, resource_group_name: str, server_name: str, key_name: str, parameters, **kwargs):
613
"""
614
Creates or updates a server key for encryption.
615
616
Parameters:
617
- resource_group_name: str, resource group name
618
- server_name: str, server name
619
- key_name: str, key name
620
- parameters: Key parameters including server key type and URI
621
622
Returns:
623
LROPoller for server key operation
624
"""
625
626
def delete(self, resource_group_name: str, server_name: str, key_name: str, **kwargs):
627
"""
628
Deletes a server key.
629
630
Parameters:
631
- resource_group_name: str, resource group name
632
- server_name: str, server name
633
- key_name: str, key name
634
635
Returns:
636
LROPoller for deletion operation
637
"""
638
639
def list(self, resource_group_name: str, server_name: str, **kwargs):
640
"""
641
Lists server keys for a MySQL server.
642
643
Parameters:
644
- resource_group_name: str, resource group name
645
- server_name: str, server name
646
647
Returns:
648
Paged collection of ServerKey objects
649
"""
650
```
651
652
## Key Models
653
654
```python { .api }
655
class Server:
656
"""MySQL server resource representation."""
657
id: str
658
name: str
659
type: str
660
location: str
661
tags: Dict[str, str]
662
administrator_login: str
663
version: str # MySQL version (5.6, 5.7, 8.0)
664
ssl_enforcement: str # Enabled, Disabled
665
user_visible_state: str # Ready, Dropping, Disabled, etc.
666
fully_qualified_domain_name: str
667
earliest_restore_date: datetime
668
storage_profile: StorageProfile
669
replication_role: str # None, Master, Replica
670
master_server_id: str
671
replica_capacity: int
672
673
class Database:
674
"""Database within MySQL server."""
675
id: str
676
name: str
677
type: str
678
charset: str
679
collation: str
680
681
class FirewallRule:
682
"""IP-based access rule for MySQL server."""
683
id: str
684
name: str
685
type: str
686
start_ip_address: str
687
end_ip_address: str
688
689
class Configuration:
690
"""MySQL server configuration parameter."""
691
id: str
692
name: str
693
type: str
694
value: str
695
description: str
696
default_value: str
697
data_type: str
698
allowed_values: str
699
source: str
700
701
class StorageProfile:
702
"""Storage configuration for MySQL server."""
703
backup_retention_days: int
704
geo_redundant_backup: str # Enabled, Disabled
705
storage_mb: int
706
storage_autogrow: str # Enabled, Disabled
707
708
class VirtualNetworkRule:
709
"""VNet-based access rule for MySQL server."""
710
id: str
711
name: str
712
type: str
713
virtual_network_subnet_id: str
714
ignore_missing_vnet_service_endpoint: bool
715
state: str # Ready, Deleting, Unknown, etc.
716
717
class PrivateEndpointConnection:
718
"""Private endpoint connection for MySQL server."""
719
id: str
720
name: str
721
type: str
722
private_endpoint: PrivateEndpointProperty
723
private_link_service_connection_state: PrivateLinkServiceConnectionStateProperty
724
provisioning_state: str
725
726
class ServerKey:
727
"""Customer-managed encryption key for MySQL server."""
728
id: str
729
name: str
730
type: str
731
kind: str
732
server_key_type: str # AzureKeyVault
733
uri: str
734
creation_date: datetime
735
736
class QueryText:
737
"""Query text for performance analysis."""
738
id: str
739
name: str
740
type: str
741
query_id: str
742
query_text: str
743
744
class QueryStatistic:
745
"""Query performance statistics."""
746
id: str
747
name: str
748
type: str
749
query_id: str
750
start_time: datetime
751
end_time: datetime
752
aggregation_function: str
753
database_names: List[str]
754
query_execution_count: int
755
metric_name: str
756
metric_display_name: str
757
metric_value: float
758
metric_value_unit: str
759
760
class Advisor:
761
"""Performance advisor for MySQL server."""
762
id: str
763
name: str
764
type: str
765
properties: Dict[str, Any]
766
767
class RecommendedAction:
768
"""Performance recommendation for MySQL server."""
769
id: str
770
name: str
771
type: str
772
advisor_name: str
773
session_id: str
774
action_id: int
775
created_time: datetime
776
expiration_time: datetime
777
reason: str
778
recommendation_type: str
779
details: Dict[str, Any]
780
```
781
782
## Usage Examples
783
784
### Creating a MySQL Server
785
786
```python
787
from azure.identity import DefaultAzureCredential
788
from azure.mgmt.rdbms.mysql import MySQLManagementClient
789
from azure.mgmt.rdbms.mysql.models import ServerForCreate, ServerPropertiesForDefaultCreate, StorageProfile
790
791
credential = DefaultAzureCredential()
792
client = MySQLManagementClient(credential, "subscription-id")
793
794
# Define server parameters
795
server_creation_parameters = ServerForCreate(
796
properties=ServerPropertiesForDefaultCreate(
797
administrator_login="myadmin",
798
administrator_login_password="SecurePassword123!",
799
version="8.0",
800
ssl_enforcement="Enabled",
801
storage_profile=StorageProfile(
802
backup_retention_days=7,
803
geo_redundant_backup="Disabled",
804
storage_mb=5120,
805
storage_autogrow="Enabled"
806
)
807
),
808
location="East US",
809
tags={"environment": "production"}
810
)
811
812
# Create server (async operation)
813
server_operation = client.servers.begin_create(
814
"my-resource-group",
815
"my-mysql-server",
816
server_creation_parameters
817
)
818
server = server_operation.result() # Wait for completion
819
print(f"Server created: {server.name}")
820
```
821
822
### Managing Databases and Firewall Rules
823
824
```python
825
# Create a database
826
database_params = {"charset": "utf8mb4", "collation": "utf8mb4_general_ci"}
827
db_operation = client.databases.begin_create_or_update(
828
"my-resource-group",
829
"my-mysql-server",
830
"my-application-db",
831
database_params
832
)
833
database = db_operation.result()
834
835
# Add firewall rule for office network
836
firewall_params = {
837
"start_ip_address": "203.0.113.0",
838
"end_ip_address": "203.0.113.255"
839
}
840
fw_operation = client.firewall_rules.begin_create_or_update(
841
"my-resource-group",
842
"my-mysql-server",
843
"office-network",
844
firewall_params
845
)
846
firewall_rule = fw_operation.result()
847
848
# Configure server parameter
849
config_params = {"value": "3600"}
850
config_operation = client.configurations.begin_create_or_update(
851
"my-resource-group",
852
"my-mysql-server",
853
"wait_timeout",
854
config_params
855
)
856
configuration = config_operation.result()
857
```