From 589baa5d24abe0f88a8c430d66513386d83f4b13 Mon Sep 17 00:00:00 2001 From: menno Date: Wed, 20 Feb 2019 13:41:05 +0100 Subject: [PATCH 1/2] make sql backend compatible with MySQL As is backy2 was unable to use sqlalchemy's MySQL backend. This is resolved by defining the length of strings and enable PrimaryKeyConstraint. --- src/backy2/meta_backends/sql.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/backy2/meta_backends/sql.py b/src/backy2/meta_backends/sql.py index b0dcb6cc..5777509e 100644 --- a/src/backy2/meta_backends/sql.py +++ b/src/backy2/meta_backends/sql.py @@ -3,7 +3,7 @@ from backy2.logging import logger from backy2.meta_backends import MetaBackend as _MetaBackend from collections import namedtuple -from sqlalchemy import Column, String, Integer, BigInteger, ForeignKey +from sqlalchemy import Column, String, Integer, BigInteger, ForeignKey, PrimaryKeyConstraint from sqlalchemy import func, distinct, desc from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker @@ -30,7 +30,7 @@ class Stats(Base): __tablename__ = 'stats' date = Column("date", DateTime , default=func.now(), nullable=False) version_uid = Column(String(36), primary_key=True) - version_name = Column(String, nullable=False) + version_name = Column(String(512), nullable=False) version_size_bytes = Column(BigInteger, nullable=False) version_size_blocks = Column(BigInteger, nullable=False) bytes_read = Column(BigInteger, nullable=False) @@ -48,8 +48,8 @@ class Version(Base): __tablename__ = 'versions' uid = Column(String(36), primary_key=True) date = Column("date", DateTime , default=func.now(), nullable=False) - name = Column(String, nullable=False, default='') - snapshot_name = Column(String, nullable=False, server_default='', default='') + name = Column(String(512), nullable=False, default='') + snapshot_name = Column(String(512), nullable=False, server_default='', default='') size = Column(BigInteger, nullable=False) size_bytes = Column(BigInteger, nullable=False) valid = Column(Integer, nullable=False) @@ -68,7 +68,7 @@ def __repr__(self): class Tag(Base): __tablename__ = 'tags' version_uid = Column(String(36), ForeignKey('versions.uid'), primary_key=True, nullable=False) - name = Column(String, nullable=False, primary_key=True) + name = Column(String(512), nullable=False, primary_key=True) def __repr__(self): return "" % ( @@ -80,7 +80,7 @@ class Block(Base): __tablename__ = 'blocks' uid = Column(String(32), nullable=True, index=True) version_uid = Column(String(36), ForeignKey('versions.uid'), primary_key=True, nullable=False) - id = Column(Integer, primary_key=True, nullable=False) + id = Column(Integer, primary_key=True, nullable=False, autoincrement=False) date = Column("date", DateTime , default=func.now(), nullable=False) checksum = Column(String(128), index=True, nullable=True) size = Column(BigInteger, nullable=True) From 725eae4199525bbb678bb0ac700521a93db19247 Mon Sep 17 00:00:00 2001 From: menno Date: Wed, 20 Feb 2019 14:38:59 +0100 Subject: [PATCH 2/2] add mysql engine config example It's the same as postgresql because of the used backend but an example prevents some guessing. --- etc/backy.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/etc/backy.cfg b/etc/backy.cfg index 1c665334..b3ebcb2a 100644 --- a/etc/backy.cfg +++ b/etc/backy.cfg @@ -43,6 +43,7 @@ type: backy2.meta_backends.sql # sqlite:////path/to/sqlitefile # postgresql:///database # postgresql://user:password@host:port/database +# mysql://user:password@host:port/database engine: sqlite:////var/lib/backy2/backy.sqlite