我从BurnsHA视频中收集了以下关于将Home助手从sqlite3迁移到mariadb的信息。19463331伟德国际我确实添加了一些在他的视频中没有提到的步骤,这是我迁移所需的。
非常感谢先前踩过这种水的所有人。

我使用Raspberry pi 3作为HA服务器运行hassbian,我已经完成以下步骤从sqlite3迁移到mariadb:

这里的前几个步骤是mariadb的典型安装和配置。sudo apt install libmariadb- server mariadb-client sudo apt install libmariadb-dev sqlite3Sqlite3 home-assistant_v2.db .dump > hadump。SQL git clone https://github.com/athlite/sqlite3-to-mysql将sqlite3-to-mysql复制到与hadump相同的目录。SQL bash sqlite3-to-mysql hadump。sql > haimport。SQL mysql -u hass -p -h localhost hass < haimport。上面的mysql语句在状态和事件中导入了大约55K条记录,在recorder_runs中导入了360条记录,在schema_changes中导入了6条记录,这是我的home-assistant的2天历史。你的里程会有所不同。update events set event_data = REPLACE(event_data, ' ', ' ', ' ' ');update状态set attributes = REPLACE(attributes, '", '"');注意:上面的两个更新显示后引号有问题。 select max(run_id) from recorder_runs; alter table recorder_runs modify column run_id INT NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=NNNNN; ## this is 1 more than the max above from table_recorder alter table states drop foreign key states_ibfk_1; select max(event_id) from events; alter table events modify column event_id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=NNNNN; ### this is 1 more than the max above from events select max(state_id) from states; alter table states modify column state_id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=NNNNN; ###### This is 1 more than the max above from states SELECT MAX(change_id) FROM schema_changes; ALTER TABLE schema_changes MODIFY COLUMN change_id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=NNNNN; ###### This is 1 more than the max above from schema_changes; ### I am not certain that the next step is required, but was in sqlite and not in mariadb. alter table states add foreign key(event_id) references events (event_id); #### Finally, modify configuration.yaml to include the following statements: #### use the server ip address with mysql installed and userid, password, and database you created above recorder: db_url: mysql://hass:PASSWORD@localhost/hass # db_url: !secret mariadb_url ### If you use !secret above, you will need to add the secret to secrets.yaml as follows: mariadb_url: mysql://hass:PASSWORD@localhost/hass

启动Hass服务器。

8喜欢

抱歉说这些指示对我不起作用皱着眉头:

安装官方MariaDB插件,然后停止homassistant,创建并复制haimport.sql
在Mariadb Docker Container中,然后在它内部做了以下内容:

mysql -u hass -p-h localhost hass (花了6个小时〜2GB)

此时哈斯无法读取数据,所以我继续执行以下步骤:

更新事件SET EVENT_DATA =替换(event_data,'','“');更新状态集属性=替换(属性,'','');Select max(run_id) from recorder_runs;alter table recorder_runs modify column run_id INT NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=NNNNN;alter table states drop foreign key state_ibfk_1; / /删除外键Select max(event_id) from events;alter table events modify column event_id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=NNNNN;###从事件中选择Max (state_id)alter table states modify column state_id int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=NNNNN;######这是一个比上面的最大值超过状态,我不确定下一步是必需的,但在SQLite中而不是在MariaDB中。ALTER表格状态添加外键(EVENT_ID)引用事件(EVENT_ID);

然后,家庭遗传物确实加载了历史组件,但没有任何数据。

我不确定你的意思是没有加载任何数据。如果在HomeAssistant.log或Syslog中,您应该有一些错误或信息,指示您在主页助理日志中为您的主助理日志工作。19463331伟德国际

另一个想法:当您创建数据库时,您是否给用户拥有数据库的所有权限?

我的家庭助理版本在骚扰和覆盆19463331伟德国际子PI 3上运行。如所示,DB也位于同一RPI上,因此参考上面的LocalHost。我没有使用任何码头或黑索。

以上步骤是我需要迁移的所有步骤。

我的意思是,当我查看历史并选择一个完全在我的“sqlite时间”内的日期时,没有任何记录。

我偶然发现了这个:


声明

SQLite数据库不支持本机日期。这就是为什么所有日期都在unix时代以来的时间。使用手动转换它们这个网站或在Python中:

从datetime导入datetime datetime.fromtimestamp(1422830502)

自从您的迁移以来是否有可能改变,并且需要转换SQLite日期?

当我在转换期间查看我的原始数据时,SQLite3转储出来的数据有SQL样式日期。

注意,我使用的是sqlite3,而不是更早的版本。
注2:我也启用了历史记录。

下面是sqlite3转储中的一个示例记录,在运行转换之前显示了正确的datetime格式:

INSERT INTO " states " VALUES(3712076, ' sensor ', ' sensor.zha_04a87e7c_1_2820 ', ' 0.0 ', ' {" unit_of_measurement ": " W ", " friendly_name ": " Zignore "} ',3884192, ' 2019-02-02 02:40:44.167261 ', ' 2019-02-02 02:40:44.167261 ', ' 2019-02-02 02:40:44.269919 ', ' 9e7bf549f25f498a9aabd0b736105f3b ',NULL);

您是否查看从SQLite执行转储时获得的原始数据?

这个脚本对我很有效:

所有历史都被迁移了!:least_smile:

这工作时,跑回家助理在码头太?19463331伟德国际
不确定我将如何安装mysqlclient在virtualenv在这种情况下

我不熟悉Hassio / Docker。我在骚扰者上演了顶部的台阶。
请注意,我没有任何性能问题,mariadb安装在相同的树莓派3作为家庭助理安装上。19463331伟德国际

好一个jr3us。伟大的工作。我还得调整一下你的后引号更新。看起来好像它不是形成正确的或在后面的引号中丢失了一个引号或在post中丢失了一些东西转换引号时,你复制他们。多谢! !

j

编辑:顺便问一下,每次重新启动时都会在日志中看到这一行是正常的吗?

2019-11-13 20:07:00警告(录像机)[homeassistant.components.recorder]结束未完成的会话(ID = 112从2019-11-14 01:58:10

我注意到上面关于更新声明中缺少的后票。我相信我已经修复了它现在将上面的代码块转换为预格式化的文本,它看起来像背引号正确地显示出正确。

我不知道你说的那个警告。我不记得以前见过它。

问候

当你在Docker中有HA时,这也能工作吗?改变的原因是什么?
用phpmyadmin看看sql内部?或者有更多的理由改为mysql db?

我迁移到mariadb是为了在使用sqlite(默认的数据库)时遇到性能问题。
当去历史和日志侧标签,hassbian永远载入。

我不知道如何将Docker / HA转换为使用MariaDB,但如果您知道SQLite DB和Configuration.yaml位于文件系统中,我想象一下是难点。
你的旅费可能会改变。

问候

大家好,
我尝试使用这些指令迁移到哈斯彼朋的MariaDB,但我一直在收到以下错误:
连接安装期间错误:libmariadb.so.3:无法打开共享对象文件:没有这样的文件或目录(在3秒内重试)

我已经尝试安装所有的依赖项,但我仍然得到这个错误。有人有类似的经历吗?
谢谢你。

你好,
你说的是国家/事件迁移的历史,对吗?
我之前经历过这个并放弃了,因为录音机无论如何都要定期被吹来,并且它不值得麻烦。
我错过了什么,这不是录音机数据吗?

编辑:就实际数据而言,我以较长/无限保留将其记录为涌入,因此我可以访问温度等的东西......但不在日志中。
我也用了Postgres,但这只是我的偏好,原理是一样的。

你使用的是哪个版本的MariaDB ?

mysql Ver 15.1 distributable 10.1.38-MariaDB, for debian-linux-gnueabihf (armv7l) using readline 5.2

好的,这是录音机集成的Docs的启动可以在此处提供帮助:

对于MariaDB,您可能需要安装一些依赖项。如果你使用的是MariaDB 10.2,libmariadbclient-dev被改名为libmariadb-dev。如果您使用的是MariaDB 10.3,那么包装libmariadb-dev-compat也必须安装。仅适用于MariaDB v10.0.34libmariadb-dev-compat是必要的。请根据MariaDB版本安装正确的包。

但是你正在运行10.1.38所以我不是100%确定需要什么依赖性,你可能需要经历!尝试libmariadb-dev-compat首先看看这是否有帮助。

我尝试了所有组合,没有成功......

我认为你试着从docker连接到你的主机数据库@localhost”权限。

  1. 尝试在数据库上创建新用户,其中包含来自无处不在的权限
授予哈斯的用法。* TO 'myuser'@'%' IDENTIFIED BY 'mypassword';
  1. 允许从任何主机连接到你的MariaDB数据库:
sudo vim /etc/mysql/mariadb.conf.d / 50-server.cnf

然后做以下改变:

bind-address = 127.0.0.1

bind-address = 0.0.0.0
  1. 重新启动服务器或重新启动主机。
1像

你好,

我也想从sqlite迁移到mariadbb。我在用家庭助手的核做树莓派。除此之外,我还运行一个叫做DSMR读者读取、存储和导出通过DSMR协议传输的数据。这个程序运行在VEnv中,使用的是PostgreSQL数据库。

我可以期待mariaDB和PostgreSQL之间的一些冲突,还是应该两者一起工作?