使用alembic进行openstack数据库版本管理
在线更新
1. alembic init <YOUR_DIR># 此处,我用的是alembic_v
2.修改alembic.ini。如下:
sqlalchemy.url = driver://user:pass@localhost:port/dbname
具体实例:
sqlalchemy.url = mysql+mysqldb://storage:lenovo@192.168.100.6/storagemgmt
解释:
此部分替换成对应的数据库连接,这个数据库连接的写法是与SQLAlchemy创建engine时是一样的。
比如使用SQLAlchemy与mysqldb,那数据库连接就是如上“具体实例所示”。
3. 修改en.py。把target_metadata = None,改为如下:
import osimport sys# 此处需要将项目路径添加到sys.path,否则from import时找不到
modelssys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../")
from models.base import Base
Modeltarget_metadata = BaseModel.metadata
解释:在env.py中,将target_metadata设置成项目的model,使alembic能获取到项目中model定义的信息
如:我的models.py的目录如下,那么应该如此导入。
/usr/lib/python2.7/site-packages/storagemgmt/storage/sqlalchemy/models.py
其中Base是在models.py中定义的,如下:
4. 创建新的版本。
alembic revision --autogenerate -m "init db"
解释:用 alembic revision -m+注释 创建数据库版本. “版本号+注释”就是版本文件的名字。
这个命名规则是在配置文件中定义的。
5.更新数据库。
alembic upgrade head
6.将数据库降级到最初版本.
alembic downgrade base
7.将数据库降级到执行版本,
使用alembic downgrade+版本号,不包含注释部分.
alembic downgrade <version>
如: alembic downgrade 0e8e73745ff2
离线更新
在某些不适合在线更新的情况,可以采用生成sql脚本的形式,进行离线更新:
alembic upgrade <version> --sql > migration.sql
如:
alembic upgrade ae1027a6acf --sql > migration.sql
从特定起始版本生成sql脚本:
alembic upgrade <vsersion>:<vsersion> --sql > migration.sql
如:
alembic upgrade 1975ea83b712:ae1027a6acf --sql > migration.sql
如果是数据库降级操作,把upgrade替换为downgrade。
Reference:
https://docs.openstack.org/developer/neutron/devref/alembic_migrations.html