trove upgrade 源码阅读
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,trove upgrade 用于将数据库从一个版本更新到另一个版本,如:将mysql5.5更换到mysql5.6trove/taskmanager/manager.py 368行 def upg
千家信息网最后更新 2025年01月23日trove upgrade 源码阅读
trove upgrade 用于将数据库从一个版本更新到另一个版本,如:将mysql5.5更换到mysql5.6
trove/taskmanager/manager.py 368行
def upgrade(self, context, instance_id, datastore_version_id): instance_tasks = models.BuiltInstanceTasks.load(context, instance_id) datastore_version = DatastoreVersion.load_by_uuid(datastore_version_id) with EndNotification(context): instance_tasks.upgrade(datastore_version)
instance_tasks.upgrade(datastore_version)调用
trove/taskmanager/models.py 1501行
def upgrade(self, datastore_version): ... try: upgrade_info = self.guest.pre_upgrade() ... self.server.rebuild(datastore_version.p_w_picpath_id, files=injected_files) ... if volume: upgrade_info['device'] = volume_device self.guest.post_upgrade(upgrade_info) self.reset_task_status() ...
upgrade instance 主要是以下几步完成:
self.guest.pre_upgrade:更新前的一些操作,主要是将mysql的配置文件保存在cinder volume中
self.server.rebuild:用新的数据库基础镜像重建trove的nova实例
self.guest.post_upgrade:重建nova instance後的一些操作,主要操作是从cinder volume中恢复mysql配置文件,启动mysql
self.guest.pre_upgrade,self.guest.post_upgrade 通过rcp方式调用运行在nova instance上的trove-guestagent的中对应方法
trove/guestagent/datastore/mysql/_common/manager.py 245行
def pre_upgrade(self, context): app = self.mysql_app(self.mysql_app_status.get()) data_dir = app.get_data_dir() mount_point, _data = os.path.split(data_dir) save_dir = "%s/etc_mysql" % mount_point save_etc_dir = "%s/etc" % mount_point home_save = "%s/trove_user" % mount_point app.status.begin_restart() app.stop_db() if operating_system.exists("/etc/my.cnf", as_root=True): operating_system.create_directory(save_etc_dir, as_root=True) operating_system.copy("/etc/my.cnf", save_etc_dir, preserve=True, as_root=True) operating_system.copy("/etc/mysql/.", save_dir, preserve=True, as_root=True) operating_system.copy("%s/." % os.path.expanduser('~'), home_save, preserve=True, as_root=True) self.unmount_volume(context, mount_point=data_dir) return { 'mount_point': mount_point, 'save_dir': save_dir, 'save_etc_dir': save_etc_dir, 'home_save': home_save }
pre_upgrade备份数据库的配置文件、guestagent位于trove home 目录下的配置信息,返回包含备份信息的一个字典
trove/guestagent/datastore/mysql/_common/manager.py 275行
def post_upgrade(self, context, upgrade_info): app = self.mysql_app(self.mysql_app_status.get()) app.stop_db() if 'device' in upgrade_info: self.mount_volume(context, mount_point=upgrade_info['mount_point'], device_path=upgrade_info['device'], write_to_fstab=True) if operating_system.exists(upgrade_info['save_etc_dir'], is_directory=True, as_root=True): operating_system.copy("%s/." % upgrade_info['save_etc_dir'], "/etc", preserve=True, as_root=True) operating_system.copy("%s/." % upgrade_info['save_dir'], "/etc/mysql", preserve=True, as_root=True) operating_system.copy("%s/." % upgrade_info['home_save'], os.path.expanduser('~'), preserve=True, as_root=True) self.configuration_manager.refresh_cache() app.start_mysql()
post_upgrade恢复备份中的配置文件,不对老数据库的任何文件作修改,直接使用老数据库的配置文件与数据文件启动数据库
数据
文件
数据库
配置
备份
信息
版本
更新
不对
基础
字典
实例
方式
方法
目录
镜像
运行
源码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
在数据库窗口新建
荒野行动哪个服务器有高级武器
崇明区创新软件开发服务收费
网络安全民用
长沙银行外包软件开发
张店包装软件开发咨询
数据库修复显示不是有效的文件夹
安丘电力系统软件开发
武大新校区 网络安全学院
第三次国土调查数据库使用软件
网络安全隔离vlan步骤
云南省网络安全答题
申论作文文化科技互联网
2000怎么用数据库
开启mssql数据库日志
关于软件开发方面的证书
什么是星环数据库
低压u软件开发
宝山区节能软件开发密度
网络技术应用教辅资料
数据库没权限创建用户
联想rd450服务器刷bios
明厨亮灶软件开发
网络安全运营工程师有什么用
游戏服务器 安全测试
战地3服务器网址
网络技术与社会的发展带来的影响
gps管理监控系统服务器
合肥软件开发主要在哪个区
oppo手机的服务器安全吗