create.sqlでエラーが発生する[CentOS7.6、MariaDB10.4.7、ZabbixServer4.0.11]
Zabbixを使ってみたい!と思って、家の仮想サーバにインストールしようと思いましたが、できません。
環境については、タイトルの通りです。
起きている事象としては
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
のコマンドで実行すると以下のエラーが出てきます。
ERROR 1452 (23000) at line 2172: Cannot add or update a child row:
a foreign key constraint fails (`zabbix`.`dchecks`, CONSTRAINT `c_dchecks_1` FOREIGN KEY (`druleid`) REFERENCES `drules` (`druleid`) ON DELETE CASCADE)
さらに不思議な事にcreate.sqlの2171行目で以下のSQLがあるにも関わらず、drulesテーブルの中身は空っぽでした。
INSERT INTO `drules` (`druleid`,`proxy_hostid`,`name`,`iprange`,`delay`,`status`) values ('2',NULL,'Local network','192.168.0.1-254','1h' ,'1');
エラーの起きた2172行目のSQL文は以下の通りになっており、2171行目のSQLがインサートされてない事で外部キー制約にひっかかったものと考えています。
INSERT INTO `dchecks` (`dcheckid`,`druleid`,`type`,`key_`,`snmp_community`,`ports`,`snmpv3_securityname`,`snmpv3_securitylevel`,`snmpv3_a uthpassphrase`,`snmpv3_privpassphrase`,`uniq`,`snmpv3_authprotocol`,`snmpv3_privprotocol`,`snmpv3_contextname`) values ('2','2','9','syst em.uname','','10050','','0','','','0','0','0','');
なお、こちらのSQL1行のみで実行するとテーブルに値は入ります。
INSERT文が適切に処理されてないせいで起きているのだろうということまではわかったのですが、
だからどうするというのがわかりません。こういった場合どうするべきでしょうか。
(ファイルを分割して、該当SQL箇所のみ手動で入れつつやっていくなんて方法もあるかもしれないですが、
(上記の状況からエラーが出ているところだけの対処で正しく作成されるのか疑問だけど…)
他に何か案があれば教えてほしいです。)
TNK - 投稿数: 4769
恐らく、MariaDB 10.4.7を使用されていることが原因だと思います。
とりあえず試されるということであれば、CentOS 7.6標準のmariadb
を使用してみてください。
ZBX-16465 : Not possible to insert create.sql.gz on MariaDB 10.3.17
https://support.zabbix.com/browse/ZBX-16465
nozomu0321 - 投稿数: 5
TNK様
ご回答ありがとうございました。
MariaDBの問題ということですかね…。
上記リンクのエラーも出ており、こちらは対処済だったのですが…。
とりあえずMariaDB方面でも色々確認して、どうにもならなかったら
古いバージョン使います。
ありがとうございました。
nozomu0321 - 投稿数: 5
勘違いがあったので訂正します。
2155行目にSTART TRANSACTION;
の記載があり、最初の質問の「insert分がうまくいかない。」
という言葉自体間違いはないのですが、
上記の該当行で失敗していたからロールバックされた動きでした。
最初はMariaDBの文字コードとかの設定がうまくいかなくて、
テーブルは作られてるのに、insert文がうまく挿入されてないのかと思ってた。
ちなみに2155行目以前に記載されてるinsert文についてはTABLEにちゃんと入ってましたし、
エラー行付近のSQLを1行のみ実行しても、TABLEに入るのは当然の動作でした。
今はまだ頭の中で多分そうだろうと思ってるだけの段階ですが、
SET FOREIGN_KEY_CHECKS=0;
のコマンドによって、トランザクション中の外部キー制約を無効化すれば良いと思ってます。
TNK - 投稿数: 4769
ZBX-16465に関しては、Zabbix 4.4で対応されるようです。
https://www.zabbix.com/rn/rn4.4.0rc1
nozomu0321 - 投稿数: 5
情報ありがとうございます。
4.4に関して正式版もリリースされたようなので早速インストールしてみました。
なお、結果については変わりませんでした。
ちなみにSET FOREIGN_KEY_CHECKS=0;のオプションについても、
結局失敗したSQLのログが流れまくっただけとなりました。
とりあえず自環境だけで他の人は出てないということは、
やはりMariaDBの設定等の可能性が高いですし、
CentOS8もリリースされたので、クリーンインストールしたり試します。
重ね重ねありがとうございました。
nozomu0321 - 投稿数: 5
今となっては誰も気にしてはいないかもしれないですが、
あまりにも暇だったので再度試したところ
4.4.6のバージョンではうまくいったことご報告します。