trove upgrade 源码阅读
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,trove upgrade 用于将数据库从一个版本更新到另一个版本,如:将mysql5.5更换到mysql5.6trove/taskmanager/manager.py 368行 def upg
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
涨乐互联网科技
腾讯科技 互联网女皇
佰商互联网科技有限公司
人人互联网科技是培训
科技互联网的估值
互联网科技创新服务
互联网和黑科技的看法
互联网公司科技股
华夏互联网科技业
互联网保险科技创业
晋城互联网科技
高科技互联网发展前景如何
玉溪新华互联网科技好不好
世界互联网领先科技成果获奖
互联网科技圈年度人物
黑科技 体验场景 互联网大会
互联网领先科技宣传片
广州梦谷互联网科技有限公司领导
互联网科技创业计划的风险分析
瑞安市蟠桃会互联网科技有限公司
瑰夏咖啡
互联网科技公司官网
青岛中康互联网医疗科技有限公司
昊天互联网科技有限公司
辽宁互联网新科技
互联网金融科技名词解释
工业互联网山东科技大学
怎样加入科技互联网
皮皮虾互联网科技有限公司
山东蛋芒互联网科技有限公司