在开发的过程中,需要修改数据库的模型,而且需要在修改之后更新数据库,最直接就是删除旧表,但是会丢失数据。所有最好的方式就是数据库迁移。 它可以追踪数据库模型的变化,然后把变动应用到数据库中。 在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); ( 3)数据库文件可以设置jia兼容级别,高版本兼容低版本 ---- 二:“脱机”—>“附加” 说明:暂时脱离管理数据库,进行资料拷贝后,在重新联机即可; ---- 三: “备份”—>“还原” 说明:为的是还原原始数据 ,防止误操作,类似于保存不同版本信息; ---- 四:生成“SQL脚本” 说明:兼容性最好,轻松避免数据库迁移的其它问题 ----
Configuration File for keepalived global_defs { router_id LVS_slave01 } vrrp_instance VI_3 { state MASTER interface eth0 virtual_router_id 3 priority 85 advert_int 1 authentication
keepalived reload ; watch -n .2 ip a 使用给新master keepalived 升优先级重载的方式切IP 使用 watch 来观察ip变化 ---- 从两边密切监控观察检查应用与数据库状态 使用netstat 观察到数据库的连接比如 :3306 在数据库里可以使用 show processlist 来看连接 (必要的时候可以停止原master数据库) [root@origin-master
所以我决定把web服务器和数据库部署到一起。 二、迁移前导步骤 迁移过程中顺便记录一手,供后面再次迁移到别的服务器上查阅,省的麻烦。 CentOS 7.4 1.再次安装MariaDB yum -y install mariadb mariadb-server 2.启动MariaDB systemctl start mariadb 3. create database novel 三、迁移数据库表和结构 先cd到mysql的运行路径下,再执行一下命令: 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > > 数据库名.sql mysqldump -uroot -p -d dbname > dbname .sql 3.导入数据库 方法一: (1)选择数据库 mysql>use dbname ; (2)设置数据库编码 mysql>set names utf8; (3)导入数据(注意sql文件的路径) mysql>source /home/xxxx/dbname .sql; 方法二:
时隔一年多,gevent 的作者 Denis Bilenko 终于从创业的百忙之中,抽出时间打算 review 我在 2012 年的时候完成的 gevent 到 Python 3 的迁移工作。 我尝试了做 merge,发现结果不是很理想,再加上对当时修改又不是很满意了,于是乎,我选择了参考原来的改动,重新迁移一次。 插叙一段小插曲。 接下来我分段介绍我这几个月用业余时间几乎做完的第二次迁移工作,希望能对也在做向 Python 3 迁移工作的同学们有点帮助。 Denis 对迁移工作的要求是,用同一套代码,同时支持 Python 2.6, 2.7 和 3.3。 这个美好的功能在这次 gevent 的迁移最后引来了好大一个麻烦,等讲到时再细说。 (未完待续,附项目地址:https://github.com/fantix/gevent)
一、迁移整个库 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 官网地址:
中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分: Web服务器 代理服务器 ZooKeeper Kafka(本章节) 在我以前的工作中遇到过多次数据库迁移,如果数据库是一样的,其实相对都是比较简单的 因为基本上都可用利用数据库自身的同步原理就可以实现,但是现实中还有需求就是异构数据库的迁移。就好比Oracle到MYSQL,当然这里我为了简单,我这里用了简单的MYSQL迁移到PG。 消费者从Kafka里面消费数据,然后写入PG数据库。 环境准备 一个MYSQL数据库,里面有一个库,一个表,表里面有部分数据。 一个PG数据库,里面已经提前创建了和MYSQL同样的库表(无数据)。 [root@localhost ~]# python3 prod.py >>> 启动MySQL到Kafka的生产者 <<< -已同步至ID: 100- -[INFO]- 没有新数据,等待10秒... 启动消费者 [root@localhost ~]# python3 cour.py >>> 启动 Kafka 到 PostgreSQL 数据同步消费者 <<< -目标表已创建/验证- -开始消费主题:
本文将系统讲解数据库迁移的核心概念、常见场景、迁移策略、风险控制与最佳实践,帮助你在不同环境或版本之间安全、稳定地完成数据库迁移。一、什么是数据库迁移? 数据库迁移(DatabaseMigration)指将数据库中的数据、结构、配置从一个环境迁移到另一个环境,或从一个版本迁移到另一个版本。 3.跨平台迁移自建MySQL→阿里云RDS自建PostgreSQL→AWSAuroraMongoDB→MongoDBAtlas特点:参数、权限、网络、安全策略差异大。 3.搭建目标环境安装数据库配置参数(字符集、时区、连接数)创建用户与权限配置网络与安全组初始化空库结构4.执行迁移全量数据迁移增量数据同步(如有)校验数据一致性(行数、校验和)切换业务流量5.验证与回滚功能验证 :预演迁移流程选择低峰时段保留旧库可快速回滚3.兼容性问题风险来源:SQL语法变化字符集不一致索引行为变化(如MySQL8.0的隐式主键)规避策略:使用官方兼容性检查工具(如MySQLShell)全量SQL
在实际项目开发中,一般不会创建模型,然后迁移到数据库,因为同一个数据库,可能对应着多个项目,所以此时我们需要懂得如何反向迁移。 Django django的orm模型已经内置了反向迁移命令 python manage.py inspectdb > models.py # >后面是生成的文件路径和名称 flask flask并没有配置相关的反向迁移模块 我在网上试了多个具体相关功能的迁移包,最后我个人感觉sqlacodegen相对来说还是比较好用的,可通过下方命令安装 pip install sqlacodegen 在命令行执行 sqlacodegen mysql://用户名:密码@ip:端口号/数据库 >models.py 大体跟django的类似,但是多了数据库连接 使用这个包,额外要注意一点,他会报一个错误( mysqldb查找不到的错误)。
一日风雨交加,晚上值班时,一业务的数据库空间不够, 报警 。 正常停库 SQL> shutdown immediate Database closed. Database dismounted. ORA-03113: end-of-file on communication channel Process ID: 381 Session ID: 191 Serial number: 3 可能由于昨晚数据库强制关闭 ,导致文件状态可能不一致,因为正常关闭数据库会同步校验各文件,使得重新启动的时候文件时间点一致。 57671680 512 1 NO CURRENT 1179952814 12-DEC-16 2.8147E+14 3 52428800 512 1 YES UNUSED 0 0 3
是pgsql的模板数据库。 所谓模板数据库就是创建新database时,PostgreSQL会基于模板数据库制作一份副本,其中会包含所有的数据库设置和数据文件。 怎么创建模板数据库? alter database tmpdb is_template false; drop database tmpdb; 数据迁移案例 数据备份 pg_dump -h 192.168.30.1 -p CREATE DATABASE "articledb"; 创建用户 CREATE USER admin WITH PASSWORD 'hrkx0&3iZ1#RG^bO'; CREATE USER readonly
table1 table2 > db1-table1-table2.sql #库名 表名 2.多库备份 mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql 3.备份所有库 mysqldump -uroot -p123 --all-databases > all.sql 二.备份恢复 1.退出数据库后 mysql 三.数据库迁移 务必保证在相同版本之间迁移 # mysqldump -h 源IP -uroot -p123 --databases db1 | mysql -h 目标IP -uroot -p456 四 -t : 只备份数据库中的数据 –single-transaction 适合innodb数据库的备份。 2. -uroot -ppassword -B test >/tmp/test.sql 多库 mysqldump -uroot -ppassword -B 库1 库2 >/tmp/test.sql 3.
什么是应用数据库迁移 应用数据库迁移,通常简称为数据库迁移,涉及将数据从一个数据库系统转移到另一个数据库系统。 优点: 风险较低,可以在每次迁移后进行验证和调整, 缺点: 是迁移过程可能会较长。 3. 并行运行(Parallel Run): 描述:旧系统和新系统同时运行一段时间,确保新系统稳定后再完全切换。 3. 例如: SELECT MD5(column1 || column2 || column3) FROM source_table; SELECT MD5(column1 || column2 || column3) FROM target_table; 数据抽样校验:随机抽取部分数据进行详细比较,确保数据一致性。
三、迁移 原则上迁移也只需要以下几步操作: 在新的Jenkins服务器上安装配置好Jenkins(先不要启动Jenkins') 停掉老的Jenkins服务,并将老Jenkins服务器上的$JENKINS_HOME 跑一个项目,测试迁移是否成功 由于每个公司Jenkins的配置不一样,所以在步骤a中配置也不一样。这里以我们公司Jinkensi环境为例,看看我们配置Jenkins需要做哪些事情。 Jenkins启动后去更改 B、拷贝settings.xml文件 在Jenkins服务器上随便运行一个mvn命令,例如#mvn -v,这样会在家目录下生成一个.m2的隐藏目录 drwxr-xr-x 3
应用程序级迁移还可能实现其他数据迁移方法无法提供的应用程序转换功能。一个例子是在不兼容的主要数据库版本之间传输数据。 应用程序级数据迁移的局限性 有限的可用性。 只有大型企业应用程序(如数据库和文件服务器)可能提供此类功能。关键词是“可能”。可用性将很大程度上取决于您要迁移到最新版本的应用程序的年代和类型。 单一用途。 例如,数据库复制是在数据库记录、事务或SQL语句级别进行的。 例如,在将 Oracle 数据库实例从 AIX 主机迁移到 Linux 主机时,由于两个操作系统架构之间字节序的差异,可能更倾向于使用应用程序级别的逻辑迁移。 迁移是应用程序、文件还是块? https://www.infoworld.com/article/3694888/understand-the-3-major-approaches-to-data-migration.html
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当中 通过外键连接的表需要调整 执行标记命令
参考链接 MySQL 5.7.27 迁移 DM 8 · 语雀 达梦数据库DTS工具使用方法 | 达梦技术社区 迁移前准备 以下中的命名,密码都是可修改的,这里给出的就只是一个例子 1)创建表空间 dbTest default tablespace "dbTest" -- 指定用户 dbTest 索引表空间为 dbTest default index tablespace "dbTest"; 3) 授予权限 -- 授予用户 dbTest 常规权限 grant "PUBLIC","RESOURCE","SOI","SVI","VTI" to "dbTest"; 迁移 1)打开 dm 数据迁移工具 2)点击新建迁移 3)选择迁移方式 4)源数据库连接(mysql) 5)目的数据库连接(dm数据库) 6)选择迁移选项 保持对象名大小写:这里建议不要勾选 勾选:模式名以及表名会按照原先 ,比如 列超出定义 7)勾选需要迁移的数据库 建议 目的模式 改为全大写,还是尽量 用户名,模式名 全大写并且一致 8)勾选要迁移的表 我的转换配置,可参考 9)迁移 迁移问题 列长度超出定义
功能介绍 云开发数据库环境之间的迁移一直是个老大难问题,虽然SDK中提供了单个集合的export和import,但是要达到实现整个数据库的迁移还只是100步中的第一步,该方案便是介绍一种将A环境数据库迁移至 使用的资源 两边环境的云函数 两边环境的云数据库 目标环境的云存储 函数介绍 migrate 迁移函数,需部署至被迁移的环境下 记得修改demo中的环境ID为自己的环境ID 需主动发起调用,无需参数。 a0ca1e0b50e5" } }, "requestId": "ff84c3dc-d3fa-11eb-bb41-525400be5245" }, 调用migrate(建议控制台直接调用) 等待返回值 前往新环境数据库查看迁移结果 注意事项 由于 export 这个接口每秒只能调用一次,所以保险起见,在代码层级上每个集合的导出都间隔一秒。 若migrate函数控制台出現 ESOCKETTIMEDOUT 或其他报错,但其他三个函数均运行正常,那可以忽视,以目标环境数据库数据是否正确迁移为准。