在开发的过程中,需要修改数据库的模型,而且需要在修改之后更新数据库,最直接就是删除旧表,但是会丢失数据。所有最好的方式就是数据库迁移。 它可以追踪数据库模型的变化,然后把变动应用到数据库中。 在flask中可以使用Flask-Migrate扩展,来实现数据迁移。 会创建migrations文件夹,所有的迁移文件都放在里面。 python manage.py db init 创建自动迁移脚本: upgrade():函数把迁移中的改动应用到数据库中。 自动创建的迁移脚本会 根据模型定义和数据库当前状态的差异,生成upgrade()和downgrade()函数的内容。 对比不一定完全正确,有可能会遗漏一些细节,需要进行检查。 python manage.py db upgrade 更新完之后,在数据库会出现一个表 versions每迁移一次里面都会生成一个文件。
前言: 在我们开发某些项目后,难免会遇到更换服务器,重新部署数据库的时候,那么问题来了? 究竟怎么如何操作才能达到最佳效果; 起源: (1):起初仅仅是为了测试用,所以迁移的时候不必把数据库中的数据全部迁移过去,仅仅需要数据库的架构即可; (2):某些时候需要更换服务器,那么此时已经在内部存储了大量数据了 ,此时只能把架构+数据全部迁移过来; 解说: 以本地“Login”数据库为例,帮助大家理解四种迁移方式; 一:“分离”—>“附加” 说明: (1)或许会遇到分离数据库后,无法在其它服务器附加数据库的问题 (权限不够,自行更改属性) (2)推荐把数据库放到默认的数据库文件存放目录(E:\Microsoft SQL Server\实例根目录\MSSQL12.SQLEXPRESS\MSSQL\DATA); ( ,防止误操作,类似于保存不同版本信息; ---- 四:生成“SQL脚本” 说明:兼容性最好,轻松避免数据库迁移的其它问题 ----
领8888元新春采购礼包,抢爆款2核2G云服务器95元/年起,个人开发者加享折上折
一、为什么要迁移 我的七月小说站点放在JCloud上,恕我直言,配合我的Aliyun服务器进行数据交互,那是相当的慢,没办法,京东云上面十几块钱的公网ip,也就这样了。 所以我决定把web服务器和数据库部署到一起。 二、迁移前导步骤 迁移过程中顺便记录一手,供后面再次迁移到别的服务器上查阅,省的麻烦。 create database novel 三、迁移数据库表和结构 先cd到mysql的运行路径下,再执行一下命令: 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > > 数据库名.sql mysqldump -uroot -p -d dbname > dbname .sql 3.导入数据库 方法一: (1)选择数据库 mysql>use dbname ; mysql -u用户名 -p密码 数据库名 < 数据库名.sql
一、迁移整个库 1.mongodump(导出) 命令格式:mongodump -h host:port -d dbname -o D:datadump 2.mongorestore(导入) 命令格式: dbnameNew -u username -p pwd --authenticationDatabase admin --noIndexRestore --dir D:datadumpdbname 二、迁移单个
批评,这是正常的血液循环,没有它就不免有停滞和生病的现象——奥斯特洛夫斯基 数据库迁移可以使用flyway git地址:https://github.com/flyway/flyway 官网地址:
案例 订单系统中存在这样一组订单表: 数据库: MySQL 表名: order_{0~19}, 其中{0~19}为后缀, 合共20张表. 新分表策略 迁移方案分析 数据迁移的方案从业务层到数据库层各有不同的迁移方案, 我们先列举一些进行比对: 业务层: 在业务层进行硬编码, 数据双写, 以某个时间点进行划分, 新产生的数据同时写入新表, 数据库日志: 从某一时间点T备份数据库, 将备份库的数据迁移至新表, 从时间点T读取日志, 恢复到新表, 并持续写入. 待两份数据保持同步后, 上线新代码. 伪装从库: 相对于方案4的优势是不需要直接去读取日志, 解决了数据库在云上不方便直接读取日志的问题. 相比较之下, 方案4和5都是可选的, 因数据库在云上, 直接读取日志不方便, 且方案5有成熟的开源中间件canal可用, 故笔者选择了方案5.
08.14自我总结 数据库的备份 一数据库的备份 1.单库备份 mysqldump -uroot -p123 db1 > db1.sql #库名 mysqldump -uroot -p123 db1 mysql -u -p < filename.sql; 2.在数据库内 创建空数据库 选择数据库 然后使用source filename; 来进行还原 例如 use db1; source /root /db1.sql 三.数据库迁移 务必保证在相同版本之间迁移 # mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目标IP -uroot -p456 四.备份高阶 1.常用参数 -B:表示的是指定多个库,增加了建库语句和use数据库的语句。 -t : 只备份数据库中的数据 –single-transaction 适合innodb数据库的备份。 2.
在实际项目开发中,一般不会创建模型,然后迁移到数据库,因为同一个数据库,可能对应着多个项目,所以此时我们需要懂得如何反向迁移。 Django django的orm模型已经内置了反向迁移命令 python manage.py inspectdb > models.py # >后面是生成的文件路径和名称 flask flask并没有配置相关的反向迁移模块 我在网上试了多个具体相关功能的迁移包,最后我个人感觉sqlacodegen相对来说还是比较好用的,可通过下方命令安装 pip install sqlacodegen 在命令行执行 sqlacodegen mysql://用户名:密码@ip:端口号/数据库 >models.py 大体跟django的类似,但是多了数据库连接 使用这个包,额外要注意一点,他会报一个错误( mysqldb查找不到的错误)。
---Mysql系统库是MyISAM的,相较而言,PG数据库在这方面要好一些。 是pgsql的模板数据库。 所谓模板数据库就是创建新database时,PostgreSQL会基于模板数据库制作一份副本,其中会包含所有的数据库设置和数据文件。 怎么创建模板数据库? alter database tmpdb is_template false; drop database tmpdb; 数据迁移案例 数据备份 pg_dump -h 192.168.30.1 -p
一日风雨交加,晚上值班时,一业务的数据库空间不够, 报警 。 正常停库 SQL> shutdown immediate Database closed. Database dismounted. -03113: end-of-file on communication channel Process ID: 381 Session ID: 191 Serial number: 3 可能由于昨晚数据库强制关闭 ,导致文件状态可能不一致,因为正常关闭数据库会同步校验各文件,使得重新启动的时候文件时间点一致。
从单机数据库到分库这个过程,我们就需要完整的迁移我们的数据,我们才能成功的分库的方式上使用我们的数据。 在实际业务开发中,我们会根据不同的情况来做出不同的迁移方案,接下来我们来讨论一下到底应该怎么迁移数据。 存量数据迁移 首先我们来说一下存量数据迁移应该怎么做,存量数据迁移在开源社区中搜索了一圈发现没有太好用的工具,目前来说阿里云的DTS提供了存量数据迁移,DTS支持同构和异构不同数据源之间的迁移,基本支持业界常见的数据库比如 那么DTS的存量迁移怎么做的呢? 但是如果系统中没有做规划的预留段怎么办呢?
Django执行数据库迁移 导致原因:因为迁移文件和数据库中的迁移记录不一致 解决办法 python manage.py migrate app名 --fake 迁移文件名 将指定迁移文件标记为已经映射 ,这时将不会执行这个迁移文件的Sql语句。 如果不知道是那个迁移文件出现了问题,可以将这个app下面的所有迁移文件全部删除,然后将数据库中迁移文件表django_migrations中这个app的所有迁移文件全部删除,然后将表的字段和类映射对应清楚后使用 python manage.py makemigrations app_name生成一个迁移文件,然后使用python manage.py migrate --fake-initial将第一个建表的迁移文件保存到数据库中 根据数据库生成模型 令python manage.py inspectdb > 文件路径 需要修正下 名字,可能名字太长,或者会有关键字 模型需要放到相关的app当中 通过外键连接的表需要调整 执行标记命令
1,改动迁移路径 USE master GO ALTER DATABASE 数据库名 –主数据 MODIFY FILE(NAME=’数据库名’, FILENAME=’F:\DataBase\数据库名 .mdf’); GO ALTER DATABASE 数据库名 –日志数据 MODIFY FILE(NAME=’数据库名_log’, FILENAME=’F:\DataBase\数据库名_log.ldf ’); GO ALTER DATABASE 数据库名 –文件流数据 MODIFY FILE(NAME=’PlatformFiles’, FILENAME=’F:\OA_PLUS\PlatformFiles 3,将那些数据文件或日志文件手工移动到相应的文件夹(也就是上面命令中FILENAME相应的文件夹) 4,重新启动SQL Server实例,验证数据文件迁移是否成功。 測试: SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID(‘数据库名’); 发布者:全栈程序员栈长
功能介绍 云开发数据库环境之间的迁移一直是个老大难问题,虽然SDK中提供了单个集合的export和import,但是要达到实现整个数据库的迁移还只是100步中的第一步,该方案便是介绍一种将A环境数据库迁移至 B环境数据库的思路,仅供参考。 使用的资源 两边环境的云函数 两边环境的云数据库 目标环境的云存储 函数介绍 migrate 迁移函数,需部署至被迁移的环境下 记得修改demo中的环境ID为自己的环境ID 需主动发起调用,无需参数。 调用migrate(建议控制台直接调用) 等待返回值 前往新环境数据库查看迁移结果 注意事项 由于 export 这个接口每秒只能调用一次,所以保险起见,在代码层级上每个集合的导出都间隔一秒。 若migrate函数控制台出現 ESOCKETTIMEDOUT 或其他报错,但其他三个函数均运行正常,那可以忽视,以目标环境数据库数据是否正确迁移为准。
XX DB-》MySQL 经常会被“领导”问到从某某数据库迁到MySQL复杂吗?大概需要多长时间能迁完?听到这个问题你会怎么想?你会怎么回答这个问题?想听听我的答案吗?请往下看。 因此,数据库迁移这件事情得去问你的装修公司,也就是实际负责项目实施的团队。当用这个例子解释完以后,基本上领导就会能够理解迁移成本的点在哪里了。 虽然数据库迁移这种事情大部分是由“装修公司”来实施的,但也不排除有打算自己动手操作的。恰巧我的上一份工作主要做的就是数据迁移,这方面的经验还是有一些的,在这里给大家分享一下。 (我参加过的项目没有一个是按时、保质、保量完成的,因此,对于怎么样把一个项目做砸,我有着丰富的经验?) 关于数据库迁移的经验已经分享给大家,如果需要从其他数据库迁移至MySQL,可以使用官方的MySQL Workbench迁移向导。
数据库作为数据的存储媒介,其安全性与稳定性不容小觑,如果数据库的安装路径下分配大小较小,假以时日,该硬盘分区可能就会爆了,极大影响系统的正常运行。 本文以国产化平台为例,分享数据库数据文件的迁移步骤。 第一步 确认数据库当前状态 不同版本的麒麟系统,安装的数据库可能为MySQL或者系统自带的mariadb,千万别搞错了。 打开命令行,输入systemctl status mysql(或者mariadb) 如果数据库处于活动(active)状态,执行命令systemctl stop mysql(或者mariadb),停止数据库运行 需要注意的是,一定要确认数据库文件是否在/var/lib/mysql目录下 第三步 修改配置文件 打开命令行,输入 vim /etc/my.cnf,编辑该文件。 打开命令行,输入systemctl start mysql(或者mariadb) 查看数据库状态,显示为活动状态(active)即可 第七步 数据库开机自启 打开命令行,输入systemctl enable
Alembic 是一款轻量型的数据库迁移工具,它与 SQLAlchemy 一起共同为 Python 提供数据库管理与迁移支持。 自动生成迁移脚本无需考虑数据库相关操作,只需完成 ROM 中相关类的编写即可,通过 Alembic 命令即可在数据库中自动完成数据表的生成和更新。 变更数据库 Alembic 最重要的功能是自动完成数据库的迁移「变更」,所做的配置以及生成的脚本文件都是为数据的迁移做准备的,数据库的迁移主要用到 upgrade 和 downgrade 子命令。 ,此时可以使用 current 来查看线上数据库处于什么版本,也可以通过 history 来查看项目目录中的迁移脚本信息。 Flask-Migrate 是使用 Alembic 处理 Flask 应用中数据库「使用 SQLAlchemy ORM」迁移的扩展库。
app=Flask(name) db=SQLAlchemy(app) migrate=Migrate(app,db) migrate的命令: 初始化 flask db init 生成迁移脚本 flask
该怎么办呢?答案就是,这种双向复制如果仅依赖通道层面来解决基本不可行。 迁移通常说的是数据库的搬迁,将源数据库搬迁到目的数据库,搬迁之后目的数据库代替源数据库继续提供服务,源数据库可以选择下线或者继续提供服务。 迁移有多种场景,比如:同种数据库下异构模式迁移。 例如:Redis 的主从版迁移到集群版;可以是数据库的升级迁移,比如:MongoDB 从 3.0 升级到 4.0;也可以是上云迁移,比如:云下的数据库迁移到云上,或者云上的迁移到云下等等。 迁移的同时,源数据库可写可不写,不写的话稍微简单一些。迁移往往不需要迁移增量,只需要做全量迁移即可,但这通常需要业务停写,很多业务难以接受。 等迁移完毕,用户可以对迁移后的数据进行校验,发现没问题了,等待一个业务时间点进行一次闪断切流,将流量分发到目的端,数据就完成了迁移,源数据库就可以下线了。
腾讯云数据库MySQL是一种高性能、高可靠、高安全、可灵活伸缩的数据库托管服务,其不仅经济实惠,而且提供备份回档、监控、快速扩容、数据传输等数据库运维全套解决方案,为您简化 IT 运维工作,让您能更加专注于业务发展。
扫码关注腾讯云开发者
领取腾讯云代金券