Module cvpysdk.subclients.mysqlsubclient
File for operating on a MYSQL Subclient
MYSQLSubclient is the only class defined in this file.
MYSQLSubclient: Derived class from Subclient Base class, representing a MYSQL subclient, and to perform operations on that subclient
Mysqlsubclient
init() – constructor for the class
is_failover_to_production() – Sets the isFailOverToProduction flag for the subclient as the value provided as input
_backup_request_json() – prepares the json for the backup request
_get_subclient_properties() – Gets the subclient related properties of MYSQL subclient
_get_subclient_properties_json() – get the all subclient related properties of this subclient
content() – Creates the list of content JSON to pass to the API to add/update content of a MYSQL Subclient
backup() – Runs a backup job for the subclient of the level specified
restore_in_place() – Restores the mysql data/log files specified in the input paths list to the same location
MYSQLSubclient instance Attributes:
**is_blocklevel_backup_enabled** -- Returns True if block level backup is
enabled else returns false
**is_proxy_enabled** -- Returns True if proxy is enabled in the subclient
**is_failover_to_production** -- Returns the isFailOverToProduction flag of the subclient
**content** -- Returns the appropriate content from
the Subclient relevant to the user
Expand source code Browse git
# -*- coding: utf-8 -*-
# --------------------------------------------------------------------------
# Copyright Commvault Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# --------------------------------------------------------------------------
"""File for operating on a MYSQL Subclient
MYSQLSubclient is the only class defined in this file.
MYSQLSubclient: Derived class from Subclient Base class, representing a MYSQL subclient,
and to perform operations on that subclient
MYSQLSubclient:
__init__() -- constructor for the class
is_failover_to_production() -- Sets the isFailOverToProduction flag for the
subclient as the value provided as input
_backup_request_json() -- prepares the json for the backup request
_get_subclient_properties() -- Gets the subclient related properties of MYSQL subclient
_get_subclient_properties_json() -- get the all subclient related properties of this
subclient
content() -- Creates the list of content JSON to pass to the API to
add/update content of a MYSQL Subclient
backup() -- Runs a backup job for the subclient of the level
specified
restore_in_place() -- Restores the mysql data/log files specified in
the input paths list to the same location
MYSQLSubclient instance Attributes:
===================================
**is_blocklevel_backup_enabled** -- Returns True if block level backup is
enabled else returns false
**is_proxy_enabled** -- Returns True if proxy is enabled in the subclient
**is_failover_to_production** -- Returns the isFailOverToProduction flag of the subclient
**content** -- Returns the appropriate content from
the Subclient relevant to the user
"""
from __future__ import unicode_literals
from ..subclient import Subclient
from ..exception import SDKException
class MYSQLSubclient(Subclient):
"""Derived class from Subclient Base class, representing a MYSQL subclient,
and to perform operations on that subclient."""
def __init__(self, backupset_object, subclient_name, subclient_id=None):
"""Initialise the Subclient object.
Args:
backupset_object (object) -- instance of the Backupset class
subclient_name (str) -- name of the subclient
subclient_id (str) -- id of the subclient
default: None
Returns:
object - instance of the MYSQLSubclient class
"""
self.mysql_subclient_prop = None
self.dfs_subclient_prop = None
self.plan_entity = None
self.cassandra_props = None
self.analytics_subclient_prop = None
super(MYSQLSubclient, self).__init__(backupset_object, subclient_name, subclient_id)
@property
def is_blocklevel_backup_enabled(self):
"""returns True if block level backup is enabled else returns false
Returns:
(bool) - boolean value based on blocklevel enable status
True if block level is enabled
False if block level is not enabled
"""
return bool(self._subclient_properties.get(
'mySqlSubclientProp', {}).get('isUseBlockLevelBackup', False))
@property
def is_proxy_enabled(self):
"""Returns True if proxy is enabled in the subclient
Returns:
(bool) - boolean value based on proxy enable status
True if proxy is enabled
False if proxy is not enabled
"""
return self._subclient_properties.get(
'mySqlSubclientProp', {}).get('proxySettings', {}).get(
'isProxyEnabled', False)
@property
def is_failover_to_production(self):
"""Returns the isFailOverToProduction flag of the subclient.
Returns:
(bool) -- True if flag is set
False if the flag is not set
"""
return self._subclient_properties.get(
'mySqlSubclientProp', {}).get(
'proxySettings', {}).get('isFailOverToProduction', False)
@is_failover_to_production.setter
def is_failover_to_production(self, value):
"""Sets the isFailOverToProduction flag for the subclient as the value provided as input.
Args:
value (bool) -- Boolean value to set as flag
Raises:
SDKException:
if failed to set isFailOverToProduction flag
if the type of value input is not bool
"""
if isinstance(value, bool):
self._set_subclient_properties(
"_subclient_properties['mySqlSubclientProp']\
['proxySettings']['isFailOverToProduction']",
value)
else:
raise SDKException(
'Subclient', '102', 'Expecting a boolean value here'
)
def _backup_request_json(
self,
backup_level,
inc_with_data=False,
truncate_logs_on_source=False,
do_not_truncate_logs=False,
schedule_pattern=None
):
"""
prepares the json for the backup request
Args:
backup_level (list) -- level of backup the user wish to run
Accepted Values:
Full / Incremental / Differential
inc_with_data (bool) -- flag to determine if the incremental backup
includes data or not
truncate_logs_on_source (bool) -- flag to determine if the logs to be
truncated on master client
default: False
do_not_truncate_logs (bool) -- flag to determine if the proxy logs
needs to be truncated or not
default: False
schedule_pattern (dict) -- scheduling options to be included for the task
Please refer schedules.schedulePattern.createSchedule()
doc for the types of Jsons
Returns:
dict - JSON request to pass to the API
"""
request_json = self._backup_json(backup_level, False, "BEFORE_SYNTH", schedule_pattern=schedule_pattern)
backup_options = {
"truncateLogsOnSource":truncate_logs_on_source,
"sybaseSkipFullafterLogBkp":False,
"notSynthesizeFullFromPrevBackup":False,
"incrementalDataWithLogs":inc_with_data,
"backupLevel":backup_level,
"incLevel":"NONE",
"adHocBackup":False,
"runIncrementalBackup":False,
"doNotTruncateLog":do_not_truncate_logs,
"dataOpt":{
"skipCatalogPhaseForSnapBackup":True,
"createBackupCopyImmediately":True,
"useCatalogServer":True,
"followMountPoints":False,
"enforceTransactionLogUsage":False,
"skipConsistencyCheck":False,
"createNewIndex":False
},
"mediaOpt":{
}
}
request_json["taskInfo"]["subTasks"][0]["options"][
"backupOpts"] = backup_options
return request_json
def _get_subclient_properties(self):
"""Gets the subclient related properties of MYSQL subclient"""
super(MYSQLSubclient, self)._get_subclient_properties()
if 'mySqlSubclientProp' in self._subclient_properties:
self.mysql_subclient_prop = self._subclient_properties['mySqlSubclientProp']
if 'dfsSubclientProp' in self._subclient_properties:
self.dfs_subclient_prop = self._subclient_properties['dfsSubclientProp']
if 'planEntity' in self._subclient_properties:
self.plan_entity = self._subclient_properties['planEntity']
if 'cassandraProps' in self._subclient_properties:
self.cassandra_props = self._subclient_properties['cassandraProps']
if 'content' in self._subclient_properties:
self._content = self._subclient_properties['content']
if 'analyticsSubclientProp' in self._subclient_properties:
self.analytics_subclient_prop = self._subclient_properties['analyticsSubclientProp']
def _get_subclient_properties_json(self):
"""get the all subclient related properties of this subclient.
Returns:
dict - all subclient properties put inside a dict
"""
subclient_json = {
"subClientProperties":
{
"proxyClient": self._proxyClient,
"mySqlSubclientProp": self.mysql_subclient_prop,
"subClientEntity": self._subClientEntity,
"dfsSubclientProp": self.dfs_subclient_prop,
"planEntity": self.plan_entity,
"cassandraProps": self.cassandra_props,
"content": self._content,
"commonProperties": self._commonProperties,
"analyticsSubclientProp": self.analytics_subclient_prop,
"contentOperationType": 1
}
}
return subclient_json
@property
def content(self):
"""Returns the appropriate content from the Subclient relevant to the user.
Returns:
list - list of content associated with the subclient
"""
cont = []
# Getting the database names from subclient content details
for path in self._content:
for key, value in path.items():
if key == "mySQLContent":
cont.append(value["databaseName"])
return cont
@content.setter
def content(self, subclient_content):
"""Creates the list of content JSON to pass to the API to add/update content of a
MYSQL Subclient.
Args:
subclient_content (list) -- list of the content to add to the subclient
Returns:
list - list of the appropriate JSON for an agent to send to the POST Subclient API
"""
cont = []
for mysql_cont in subclient_content:
mysql_dict = {
"mySQLContent": {
"databaseName": mysql_cont
}
}
cont.append(mysql_dict)
self._set_subclient_properties("_content", cont)
def backup(
self,
backup_level="Differential",
inc_with_data=False,
truncate_logs_on_source=False,
do_not_truncate_logs=False,
schedule_pattern=None
):
"""Runs a backup job for the subclient of the level specified.
Args:
backup_level (str) -- level of backup the user wish to run
Full / Incremental / Differential / Synthetic_full
default: Differential
inc_with_data (bool) -- flag to determine if the incremental backup
includes data or not
truncate_logs_on_source (bool) -- flag to determine if the logs to be
truncated on master client
default: False
do_not_truncate_logs (bool) -- flag to determine if the proxy logs
needs to be truncated or not
default: False
schedule_pattern (dict) -- scheduling options to be included for the task
Please refer schedules.schedulePattern.createSchedule()
doc for the types of Jsons
Returns:
object - instance of the Job class for this backup job if its an immediate Job
instance of the Schedule class for the backup job if its a scheduled Job
Raises:
SDKException:
if backup level specified is not correct
if response is empty
if response is not success
"""
backup_level = backup_level.lower()
if backup_level not in ['full', 'incremental', 'differential', 'synthetic_full']:
raise SDKException('Subclient', '103')
if not (inc_with_data or truncate_logs_on_source or do_not_truncate_logs or schedule_pattern):
return super(MYSQLSubclient, self).backup(backup_level)
request_json = self._backup_request_json(
backup_level,
inc_with_data,
truncate_logs_on_source=truncate_logs_on_source,
do_not_truncate_logs=do_not_truncate_logs,
schedule_pattern=schedule_pattern
)
flag, response = self._commcell_object._cvpysdk_object.make_request(
'POST', self._commcell_object._services['CREATE_TASK'], request_json
)
return self._process_backup_response(flag, response)
def restore_in_place(
self,
paths=None,
staging=None,
dest_client_name=None,
dest_instance_name=None,
data_restore=True,
log_restore=False,
overwrite=True,
copy_precedence=None,
from_time=None,
to_time=None,
media_agent=None,
table_level_restore=False,
clone_env=False,
clone_options=None,
redirect_enabled=False,
redirect_path=None,
browse_jobid=None):
"""Restores the mysql data/log files specified in the input paths list to the same location.
Args:
paths (list) -- list of database/databases to be restored
staging (str) -- staging location for mysql logs during restores
dest_client_name (str) -- destination client name where files are
to be restored
dest_instance_name (str) -- destination mysql instance name of
destination client
data_restore (bool) -- for data only/data+log restore
log_restore (bool) -- for log only/data+log restore
overwrite (bool) -- unconditional overwrite files during restore
default: True
copy_precedence (int) -- copy precedence value of storage policy copy
default: None
from_time (str) -- time to retore the contents after
format: YYYY-MM-DD HH:MM:SS
default: None
to_time (str) -- time to retore the contents before
format: YYYY-MM-DD HH:MM:SS
default: None
media_agent (str) -- media agent associated
default: None
table_level_restore (bool) -- Table level restore flag
default: False
clone_env (bool) -- boolean to specify whether the database
should be cloned or not
default: False
clone_options (dict) -- clone restore options passed in a dict
default: None
Accepted format: {
"stagingLocaion": "/gk_snap",
"forceCleanup": True,
"port": "5595",
"libDirectory": "",
"isInstanceSelected": True,
"reservationPeriodS": 3600,
"user": "",
"binaryDirectory": "/usr/bin"
}
redirect_enabled (bool) -- boolean to specify if redirect restore is
enabled
default: False
redirect_path (str) -- Path specified in advanced restore options
in order to perform redirect restore
default: None
browse_jobid (int) -- Browse jobid to browse and restore from
default: None
Returns:
object - instance of the Job class for this restore job
Raises:
SDKException:
if paths is not a list
if failed to initialize job
if response is empty
if response is not success
"""
if not (isinstance(paths, list) and
isinstance(overwrite, bool)):
raise SDKException('Subclient', '101')
if paths == []:
raise SDKException('Subclient', '104')
instance_object = self._backupset_object._instance_object
if dest_client_name is None:
dest_client_name = instance_object._agent_object._client_object.client_name
if dest_instance_name is None:
dest_instance_name = instance_object.instance_name
instance_object._restore_association = self._subClientEntity
return instance_object.restore_in_place(
path=paths,
staging=staging,
dest_client_name=dest_client_name,
dest_instance_name=dest_instance_name,
data_restore=data_restore,
log_restore=log_restore,
overwrite=overwrite,
copy_precedence=copy_precedence,
from_time=from_time,
to_time=to_time,
media_agent=media_agent,
table_level_restore=table_level_restore,
clone_env=clone_env,
clone_options=clone_options,
redirect_enabled=redirect_enabled,
redirect_path=redirect_path,
browse_jobid=browse_jobid
)
Classes
class MYSQLSubclient (backupset_object, subclient_name, subclient_id=None)
-
Derived class from Subclient Base class, representing a MYSQL subclient, and to perform operations on that subclient.
Initialise the Subclient object.
Args
backupset_object (object) – instance of the Backupset class
subclient_name (str) – name of the subclient
subclient_id (str) – id of the subclient default: None
Returns
object - instance of the MYSQLSubclient class
Expand source code Browse git
class MYSQLSubclient(Subclient): """Derived class from Subclient Base class, representing a MYSQL subclient, and to perform operations on that subclient.""" def __init__(self, backupset_object, subclient_name, subclient_id=None): """Initialise the Subclient object. Args: backupset_object (object) -- instance of the Backupset class subclient_name (str) -- name of the subclient subclient_id (str) -- id of the subclient default: None Returns: object - instance of the MYSQLSubclient class """ self.mysql_subclient_prop = None self.dfs_subclient_prop = None self.plan_entity = None self.cassandra_props = None self.analytics_subclient_prop = None super(MYSQLSubclient, self).__init__(backupset_object, subclient_name, subclient_id) @property def is_blocklevel_backup_enabled(self): """returns True if block level backup is enabled else returns false Returns: (bool) - boolean value based on blocklevel enable status True if block level is enabled False if block level is not enabled """ return bool(self._subclient_properties.get( 'mySqlSubclientProp', {}).get('isUseBlockLevelBackup', False)) @property def is_proxy_enabled(self): """Returns True if proxy is enabled in the subclient Returns: (bool) - boolean value based on proxy enable status True if proxy is enabled False if proxy is not enabled """ return self._subclient_properties.get( 'mySqlSubclientProp', {}).get('proxySettings', {}).get( 'isProxyEnabled', False) @property def is_failover_to_production(self): """Returns the isFailOverToProduction flag of the subclient. Returns: (bool) -- True if flag is set False if the flag is not set """ return self._subclient_properties.get( 'mySqlSubclientProp', {}).get( 'proxySettings', {}).get('isFailOverToProduction', False) @is_failover_to_production.setter def is_failover_to_production(self, value): """Sets the isFailOverToProduction flag for the subclient as the value provided as input. Args: value (bool) -- Boolean value to set as flag Raises: SDKException: if failed to set isFailOverToProduction flag if the type of value input is not bool """ if isinstance(value, bool): self._set_subclient_properties( "_subclient_properties['mySqlSubclientProp']\ ['proxySettings']['isFailOverToProduction']", value) else: raise SDKException( 'Subclient', '102', 'Expecting a boolean value here' ) def _backup_request_json( self, backup_level, inc_with_data=False, truncate_logs_on_source=False, do_not_truncate_logs=False, schedule_pattern=None ): """ prepares the json for the backup request Args: backup_level (list) -- level of backup the user wish to run Accepted Values: Full / Incremental / Differential inc_with_data (bool) -- flag to determine if the incremental backup includes data or not truncate_logs_on_source (bool) -- flag to determine if the logs to be truncated on master client default: False do_not_truncate_logs (bool) -- flag to determine if the proxy logs needs to be truncated or not default: False schedule_pattern (dict) -- scheduling options to be included for the task Please refer schedules.schedulePattern.createSchedule() doc for the types of Jsons Returns: dict - JSON request to pass to the API """ request_json = self._backup_json(backup_level, False, "BEFORE_SYNTH", schedule_pattern=schedule_pattern) backup_options = { "truncateLogsOnSource":truncate_logs_on_source, "sybaseSkipFullafterLogBkp":False, "notSynthesizeFullFromPrevBackup":False, "incrementalDataWithLogs":inc_with_data, "backupLevel":backup_level, "incLevel":"NONE", "adHocBackup":False, "runIncrementalBackup":False, "doNotTruncateLog":do_not_truncate_logs, "dataOpt":{ "skipCatalogPhaseForSnapBackup":True, "createBackupCopyImmediately":True, "useCatalogServer":True, "followMountPoints":False, "enforceTransactionLogUsage":False, "skipConsistencyCheck":False, "createNewIndex":False }, "mediaOpt":{ } } request_json["taskInfo"]["subTasks"][0]["options"][ "backupOpts"] = backup_options return request_json def _get_subclient_properties(self): """Gets the subclient related properties of MYSQL subclient""" super(MYSQLSubclient, self)._get_subclient_properties() if 'mySqlSubclientProp' in self._subclient_properties: self.mysql_subclient_prop = self._subclient_properties['mySqlSubclientProp'] if 'dfsSubclientProp' in self._subclient_properties: self.dfs_subclient_prop = self._subclient_properties['dfsSubclientProp'] if 'planEntity' in self._subclient_properties: self.plan_entity = self._subclient_properties['planEntity'] if 'cassandraProps' in self._subclient_properties: self.cassandra_props = self._subclient_properties['cassandraProps'] if 'content' in self._subclient_properties: self._content = self._subclient_properties['content'] if 'analyticsSubclientProp' in self._subclient_properties: self.analytics_subclient_prop = self._subclient_properties['analyticsSubclientProp'] def _get_subclient_properties_json(self): """get the all subclient related properties of this subclient. Returns: dict - all subclient properties put inside a dict """ subclient_json = { "subClientProperties": { "proxyClient": self._proxyClient, "mySqlSubclientProp": self.mysql_subclient_prop, "subClientEntity": self._subClientEntity, "dfsSubclientProp": self.dfs_subclient_prop, "planEntity": self.plan_entity, "cassandraProps": self.cassandra_props, "content": self._content, "commonProperties": self._commonProperties, "analyticsSubclientProp": self.analytics_subclient_prop, "contentOperationType": 1 } } return subclient_json @property def content(self): """Returns the appropriate content from the Subclient relevant to the user. Returns: list - list of content associated with the subclient """ cont = [] # Getting the database names from subclient content details for path in self._content: for key, value in path.items(): if key == "mySQLContent": cont.append(value["databaseName"]) return cont @content.setter def content(self, subclient_content): """Creates the list of content JSON to pass to the API to add/update content of a MYSQL Subclient. Args: subclient_content (list) -- list of the content to add to the subclient Returns: list - list of the appropriate JSON for an agent to send to the POST Subclient API """ cont = [] for mysql_cont in subclient_content: mysql_dict = { "mySQLContent": { "databaseName": mysql_cont } } cont.append(mysql_dict) self._set_subclient_properties("_content", cont) def backup( self, backup_level="Differential", inc_with_data=False, truncate_logs_on_source=False, do_not_truncate_logs=False, schedule_pattern=None ): """Runs a backup job for the subclient of the level specified. Args: backup_level (str) -- level of backup the user wish to run Full / Incremental / Differential / Synthetic_full default: Differential inc_with_data (bool) -- flag to determine if the incremental backup includes data or not truncate_logs_on_source (bool) -- flag to determine if the logs to be truncated on master client default: False do_not_truncate_logs (bool) -- flag to determine if the proxy logs needs to be truncated or not default: False schedule_pattern (dict) -- scheduling options to be included for the task Please refer schedules.schedulePattern.createSchedule() doc for the types of Jsons Returns: object - instance of the Job class for this backup job if its an immediate Job instance of the Schedule class for the backup job if its a scheduled Job Raises: SDKException: if backup level specified is not correct if response is empty if response is not success """ backup_level = backup_level.lower() if backup_level not in ['full', 'incremental', 'differential', 'synthetic_full']: raise SDKException('Subclient', '103') if not (inc_with_data or truncate_logs_on_source or do_not_truncate_logs or schedule_pattern): return super(MYSQLSubclient, self).backup(backup_level) request_json = self._backup_request_json( backup_level, inc_with_data, truncate_logs_on_source=truncate_logs_on_source, do_not_truncate_logs=do_not_truncate_logs, schedule_pattern=schedule_pattern ) flag, response = self._commcell_object._cvpysdk_object.make_request( 'POST', self._commcell_object._services['CREATE_TASK'], request_json ) return self._process_backup_response(flag, response) def restore_in_place( self, paths=None, staging=None, dest_client_name=None, dest_instance_name=None, data_restore=True, log_restore=False, overwrite=True, copy_precedence=None, from_time=None, to_time=None, media_agent=None, table_level_restore=False, clone_env=False, clone_options=None, redirect_enabled=False, redirect_path=None, browse_jobid=None): """Restores the mysql data/log files specified in the input paths list to the same location. Args: paths (list) -- list of database/databases to be restored staging (str) -- staging location for mysql logs during restores dest_client_name (str) -- destination client name where files are to be restored dest_instance_name (str) -- destination mysql instance name of destination client data_restore (bool) -- for data only/data+log restore log_restore (bool) -- for log only/data+log restore overwrite (bool) -- unconditional overwrite files during restore default: True copy_precedence (int) -- copy precedence value of storage policy copy default: None from_time (str) -- time to retore the contents after format: YYYY-MM-DD HH:MM:SS default: None to_time (str) -- time to retore the contents before format: YYYY-MM-DD HH:MM:SS default: None media_agent (str) -- media agent associated default: None table_level_restore (bool) -- Table level restore flag default: False clone_env (bool) -- boolean to specify whether the database should be cloned or not default: False clone_options (dict) -- clone restore options passed in a dict default: None Accepted format: { "stagingLocaion": "/gk_snap", "forceCleanup": True, "port": "5595", "libDirectory": "", "isInstanceSelected": True, "reservationPeriodS": 3600, "user": "", "binaryDirectory": "/usr/bin" } redirect_enabled (bool) -- boolean to specify if redirect restore is enabled default: False redirect_path (str) -- Path specified in advanced restore options in order to perform redirect restore default: None browse_jobid (int) -- Browse jobid to browse and restore from default: None Returns: object - instance of the Job class for this restore job Raises: SDKException: if paths is not a list if failed to initialize job if response is empty if response is not success """ if not (isinstance(paths, list) and isinstance(overwrite, bool)): raise SDKException('Subclient', '101') if paths == []: raise SDKException('Subclient', '104') instance_object = self._backupset_object._instance_object if dest_client_name is None: dest_client_name = instance_object._agent_object._client_object.client_name if dest_instance_name is None: dest_instance_name = instance_object.instance_name instance_object._restore_association = self._subClientEntity return instance_object.restore_in_place( path=paths, staging=staging, dest_client_name=dest_client_name, dest_instance_name=dest_instance_name, data_restore=data_restore, log_restore=log_restore, overwrite=overwrite, copy_precedence=copy_precedence, from_time=from_time, to_time=to_time, media_agent=media_agent, table_level_restore=table_level_restore, clone_env=clone_env, clone_options=clone_options, redirect_enabled=redirect_enabled, redirect_path=redirect_path, browse_jobid=browse_jobid )
Ancestors
Instance variables
var content
-
Returns the appropriate content from the Subclient relevant to the user.
Returns
list - list of content associated with the subclient
Expand source code Browse git
@property def content(self): """Returns the appropriate content from the Subclient relevant to the user. Returns: list - list of content associated with the subclient """ cont = [] # Getting the database names from subclient content details for path in self._content: for key, value in path.items(): if key == "mySQLContent": cont.append(value["databaseName"]) return cont
var is_blocklevel_backup_enabled
-
returns True if block level backup is enabled else returns false
Returns
(bool) - boolean value based on blocklevel enable status
True if block level is enabled False if block level is not enabled
Expand source code Browse git
@property def is_blocklevel_backup_enabled(self): """returns True if block level backup is enabled else returns false Returns: (bool) - boolean value based on blocklevel enable status True if block level is enabled False if block level is not enabled """ return bool(self._subclient_properties.get( 'mySqlSubclientProp', {}).get('isUseBlockLevelBackup', False))
var is_failover_to_production
-
Returns the isFailOverToProduction flag of the subclient.
Returns
(bool) – True if flag is set False if the flag is not set
Expand source code Browse git
@property def is_failover_to_production(self): """Returns the isFailOverToProduction flag of the subclient. Returns: (bool) -- True if flag is set False if the flag is not set """ return self._subclient_properties.get( 'mySqlSubclientProp', {}).get( 'proxySettings', {}).get('isFailOverToProduction', False)
var is_proxy_enabled
-
Returns True if proxy is enabled in the subclient
Returns
(bool) - boolean value based on proxy enable status
True if proxy is enabled False if proxy is not enabled
Expand source code Browse git
@property def is_proxy_enabled(self): """Returns True if proxy is enabled in the subclient Returns: (bool) - boolean value based on proxy enable status True if proxy is enabled False if proxy is not enabled """ return self._subclient_properties.get( 'mySqlSubclientProp', {}).get('proxySettings', {}).get( 'isProxyEnabled', False)
Methods
def backup(self, backup_level='Differential', inc_with_data=False, truncate_logs_on_source=False, do_not_truncate_logs=False, schedule_pattern=None)
-
Runs a backup job for the subclient of the level specified.
Args
backup_level (str) – level of backup the user wish to run Full / Incremental / Differential / Synthetic_full
default: Differential
inc_with_data (bool) – flag to determine if the incremental backup includes data or not
truncate_logs_on_source (bool) – flag to determine if the logs to be truncated on master client
default: False
do_not_truncate_logs (bool) – flag to determine if the proxy logs needs to be truncated or not
default: False
schedule_pattern (dict) – scheduling options to be included for the task
Please refer schedules.schedulePattern.createSchedule() doc for the types of Jsons
Returns
object - instance of the Job class for this backup job if its an immediate Job
instance of the Schedule class for the backup job if its a scheduled Job
Raises
SDKException: if backup level specified is not correct
if response is empty if response is not success
Expand source code Browse git
def backup( self, backup_level="Differential", inc_with_data=False, truncate_logs_on_source=False, do_not_truncate_logs=False, schedule_pattern=None ): """Runs a backup job for the subclient of the level specified. Args: backup_level (str) -- level of backup the user wish to run Full / Incremental / Differential / Synthetic_full default: Differential inc_with_data (bool) -- flag to determine if the incremental backup includes data or not truncate_logs_on_source (bool) -- flag to determine if the logs to be truncated on master client default: False do_not_truncate_logs (bool) -- flag to determine if the proxy logs needs to be truncated or not default: False schedule_pattern (dict) -- scheduling options to be included for the task Please refer schedules.schedulePattern.createSchedule() doc for the types of Jsons Returns: object - instance of the Job class for this backup job if its an immediate Job instance of the Schedule class for the backup job if its a scheduled Job Raises: SDKException: if backup level specified is not correct if response is empty if response is not success """ backup_level = backup_level.lower() if backup_level not in ['full', 'incremental', 'differential', 'synthetic_full']: raise SDKException('Subclient', '103') if not (inc_with_data or truncate_logs_on_source or do_not_truncate_logs or schedule_pattern): return super(MYSQLSubclient, self).backup(backup_level) request_json = self._backup_request_json( backup_level, inc_with_data, truncate_logs_on_source=truncate_logs_on_source, do_not_truncate_logs=do_not_truncate_logs, schedule_pattern=schedule_pattern ) flag, response = self._commcell_object._cvpysdk_object.make_request( 'POST', self._commcell_object._services['CREATE_TASK'], request_json ) return self._process_backup_response(flag, response)
def restore_in_place(self, paths=None, staging=None, dest_client_name=None, dest_instance_name=None, data_restore=True, log_restore=False, overwrite=True, copy_precedence=None, from_time=None, to_time=None, media_agent=None, table_level_restore=False, clone_env=False, clone_options=None, redirect_enabled=False, redirect_path=None, browse_jobid=None)
-
Restores the mysql data/log files specified in the input paths list to the same location.
Args
paths (list) – list of database/databases to be restored
staging (str) – staging location for mysql logs during restores
dest_client_name (str) – destination client name where files are to be restored
dest_instance_name (str) – destination mysql instance name of destination client
data_restore (bool) – for data only/data+log restore
log_restore (bool) – for log only/data+log restore
overwrite (bool) – unconditional overwrite files during restore default: True
copy_precedence (int) – copy precedence value of storage policy copy default: None
from_time (str) – time to retore the contents after format: YYYY-MM-DD HH:MM:SS
default: None
to_time (str) – time to retore the contents before format: YYYY-MM-DD HH:MM:SS
default: None
media_agent (str) – media agent associated
default: None
table_level_restore (bool) – Table level restore flag
default: False
clone_env (bool) – boolean to specify whether the database should be cloned or not
default: False
clone_options (dict) – clone restore options passed in a dict
default: None Accepted format: { "stagingLocaion": "/gk_snap", "forceCleanup": True, "port": "5595", "libDirectory": "", "isInstanceSelected": True, "reservationPeriodS": 3600, "user": "", "binaryDirectory": "/usr/bin" }
redirect_enabled (bool) – boolean to specify if redirect restore is enabled
default: False
redirect_path (str) – Path specified in advanced restore options in order to perform redirect restore
default: None
browse_jobid (int) – Browse jobid to browse and restore from
default: None
Returns
object - instance of the Job class for this restore job
Raises
SDKException: if paths is not a list
if failed to initialize job if response is empty if response is not success
Expand source code Browse git
def restore_in_place( self, paths=None, staging=None, dest_client_name=None, dest_instance_name=None, data_restore=True, log_restore=False, overwrite=True, copy_precedence=None, from_time=None, to_time=None, media_agent=None, table_level_restore=False, clone_env=False, clone_options=None, redirect_enabled=False, redirect_path=None, browse_jobid=None): """Restores the mysql data/log files specified in the input paths list to the same location. Args: paths (list) -- list of database/databases to be restored staging (str) -- staging location for mysql logs during restores dest_client_name (str) -- destination client name where files are to be restored dest_instance_name (str) -- destination mysql instance name of destination client data_restore (bool) -- for data only/data+log restore log_restore (bool) -- for log only/data+log restore overwrite (bool) -- unconditional overwrite files during restore default: True copy_precedence (int) -- copy precedence value of storage policy copy default: None from_time (str) -- time to retore the contents after format: YYYY-MM-DD HH:MM:SS default: None to_time (str) -- time to retore the contents before format: YYYY-MM-DD HH:MM:SS default: None media_agent (str) -- media agent associated default: None table_level_restore (bool) -- Table level restore flag default: False clone_env (bool) -- boolean to specify whether the database should be cloned or not default: False clone_options (dict) -- clone restore options passed in a dict default: None Accepted format: { "stagingLocaion": "/gk_snap", "forceCleanup": True, "port": "5595", "libDirectory": "", "isInstanceSelected": True, "reservationPeriodS": 3600, "user": "", "binaryDirectory": "/usr/bin" } redirect_enabled (bool) -- boolean to specify if redirect restore is enabled default: False redirect_path (str) -- Path specified in advanced restore options in order to perform redirect restore default: None browse_jobid (int) -- Browse jobid to browse and restore from default: None Returns: object - instance of the Job class for this restore job Raises: SDKException: if paths is not a list if failed to initialize job if response is empty if response is not success """ if not (isinstance(paths, list) and isinstance(overwrite, bool)): raise SDKException('Subclient', '101') if paths == []: raise SDKException('Subclient', '104') instance_object = self._backupset_object._instance_object if dest_client_name is None: dest_client_name = instance_object._agent_object._client_object.client_name if dest_instance_name is None: dest_instance_name = instance_object.instance_name instance_object._restore_association = self._subClientEntity return instance_object.restore_in_place( path=paths, staging=staging, dest_client_name=dest_client_name, dest_instance_name=dest_instance_name, data_restore=data_restore, log_restore=log_restore, overwrite=overwrite, copy_precedence=copy_precedence, from_time=from_time, to_time=to_time, media_agent=media_agent, table_level_restore=table_level_restore, clone_env=clone_env, clone_options=clone_options, redirect_enabled=redirect_enabled, redirect_path=redirect_path, browse_jobid=browse_jobid )
Inherited members
Subclient
:allow_multiple_readers
browse
data_readers
deduplication_options
description
disable_backup
disable_intelli_snap
display_name
enable_backup
enable_backup_at_time
enable_intelli_snap
enable_trueup
enable_trueup_days
encryption_flag
exclude_from_sla
find
find_latest_job
get_ma_associated_storagepolicy
is_backup_enabled
is_default_subclient
is_intelli_snap_enabled
is_on_demand_subclient
is_trueup_enabled
last_backup_time
list_media
name
network_agent
next_backup_time
plan
properties
read_buffer_size
refresh
restore_out_of_place
set_backup_nodes
set_proxy_for_snap
snapshot_engine_name
software_compression
storage_ma
storage_ma_id
storage_policy
subclient_guid
subclient_id
subclient_name
unset_proxy_for_snap
update_properties