rss ログイン
JJ1RLWのXOOPS Cube Siteにようこそ

メインメニュー

ログイン


ユーザー名:


パスワード:





パスワード紛失  |新規登録

オンライン状況

5 人のユーザが現在オンラインです。 (1 人のユーザが xpress ブログ を参照しています。)

登録ユーザ: 0
ゲスト: 5

もっと...

アーカイブ

カテゴリー

アクセスカウンタ

今日 : 188188188
昨日 : 284284284
総計 : 271733271733271733271733271733271733

カレンダー

2018年10月
« 9月    
 123456
78910111213
14151617181920
21222324252627
28293031  

xpress ブログ » » JJ1RLW

  投稿者 ‘JJ1RLW’ のアーカイブ
WordPress for XOOPS

MySQL 8.0のクラッシュ、その後3

以前にも書いたのですが、MySQL 8.0のクラッシュ、その後、MySQL 8.0.11から8.0.12にアップグレード後、mysql_upgradeコマンドを実行し、正常に終了しました。
mysqldを再起動してテストしても、やはりクラッシュしてしまいます。

今回は、システムが使うデータベース(information_schema、mysql、performance_schema、sys)以外のデータベースを一旦削除し、MySQL 5.7から改めてインポートしたら、クラッシュの発生は無くなりました。
しかし、レスポンスが異常に遅い。

どの処理が遅いのか、スロークエリーログから改善策を探すことにしました。
my.iniの内容は、
slow_query_log=1
long_query_time=2

ひとつ目の遅いクエリーは、logcounterxモジュールのlogcounterx_logテーブルを参照している
SELECT MAX(acccnt), COUNT(recid) FROM hoge_logcounterx_log;
そこで、
PRIMARY KEY (recid)

PRIMARY KEY (recid),
KEY acccnt (acccnt)

ふたつ目の遅いクエリーは、analyzer for XCモジュールのanalyzer_dataテーブルを参照している
SELECT DISTINCT d.mods, COUNT(d.mods) cnt, m.dirname FROM hoge_analyzer_data d,x174_modules m WHERE d.analysis = 1 AND m.dirname IN ( ‘xpress’,’pico’,’d3forum’,’hypconf’,’search’,’ccenter’,’zen-cart-menu’,’sitemap’,’myalbum’,’stdCache’,’NWiki-menu’,’d3downloads’,’d3pipes’,’links’,’xoops-menu’ ) AND d.analysis = 1 AND d.date > 20000101 AND d.mods != ‘index’ AND d.mods = m.name GROUP BY d.mods, m.dirname ORDER BY cnt DESC;
そこで
PRIMARY KEY (time,ip,mods),
KEY date (date),
KEY ip (ip)

PRIMARY KEY (time,ip,mods),
KEY date (date),
KEY ip (ip),
KEY mods (mods),
KEY analysis (analysis)

以下のクエリーでインデックスを追加出来ます。
ALTER TABLE プリフィクス_logcounterx_log ADD KEY acccnt (acccnt);
ALTER TABLE プリフィクス_analyzer_data ADD KEY mods (mods);
ALTER TABLE プリフィクス_analyzer_data ADD KEY analysis (analysis);
※2018/10/15追記

いずれもインデックスを追加することで、劇的にレスポンスが改善されましたが、まだMySQL 5.7の2~3倍の処理時間が掛かっています。

しかし、以前のクラッシュの原因については不明です。
推測ですが、データベースを作成した際に不具合が紛れ込んだのかも知れません。

試しに再び、MySQL 8.0での運用をしばらく続けようと思います。

周辺市町村のハザードマップをチェックして見た

西日本豪雨、台風21号や北海道地震で被災された皆様に心よりお見舞い申し上げます。

最近、自然災害が多い様に感じ、改めて周辺市町村のハザードマップをチェックして見ました。

チェックしたのは、香取市、多古町、匝瑳市、旭市などの千葉県北東部です。
中でも、判り易くまとめられていたのは、匝瑳市のハザードマップです。

土砂災害、大雨や津波での浸水域を地図上に表示されているので、一目で判る様に上手くまとめられ、より詳細な情報は別に示されいます

参考サイト
香取市 – 災害への備え
多古町 – 災害に備えて
匝瑳市ハザードマップ
旭市 – 「旭市防災マップ」を配布します

Raspberry Pi3(ルーター)初めてのトラブル

Raspberry pi3(ルーター)初めてのトラブルを経験しました。

昨日(2018/08/13)16時過ぎ頃に停電(瞬間停電)があった様で、マイロSDカードのルートファイルシステムに矛盾が発生し、起動時にエマージェンシー(メンテナンス)モードになって入力待ち状態で止まって、普通に起動してくれない。

Give root password for maintenance
(or type Control-D to continue):
の様なメッセージで入力待ち状態で止まる。

ディスプレイ、マウス、キーボードを繋ぎ、入力待ち状態でrootのパスワードを入力してログインし、

umount /dev/mmcblk0p2
fsck -y /dev/mmcblk0p2
reboot

正常に起動していることを確認してトラブルシューティングは終わりです。

参考サイト
RaspbianでWelcome to emergency mode!
Linuxを強制終了した場合に、起動不良→回復方法

PHP7対応のまとめ

以前に投稿したxpress ブログのPHP7対応の記事を資料室にまとめて見ました。

※リンクをクリックするとブラウザの新しいウインドウが開きます。
xpress ブログ記事へのリンク、
Analyzer for xcの改造
Analyzer for XC Ver 0.51のPHP7対応
Analyzer for XC Ver 0.51のPHP7対応その2

logcounterx Ver 2.74のUTF-8、MySQL、PHP7対応

myx_backup Ver 1.10のPHP7対応

PHP7とXOOPS Cube環境下でのPHPエラーメッセージ

zen-cart Ver1.5.1-jpのPHP7対応での変更点

資料室の記事へのリンク
Analyzer for XC Ver 0.51のPHP7対応などまとめ

logcounterx Ver 2.74のUTF-8、MySQL、PHP7対応などまとめ

myx_backup Ver 1.10のPHP7対応まとめ

PHP7とXOOPS Cube環境下でのPHPエラーメッセージ

zen-cart Ver1.5.1-jpのPHP7対応での変更点

MySQL 8.0のクラッシュ、その後2

MySQL 8.0のクラッシュ、その後、MySQL 8.0.11から8.0.12にアップグレード後、mysql_upgradeコマンドを実行し、正常に終了しました。
mysqldを再起動してテストしても、やはりクラッシュします。

MyISAMとInnoDBの両方のデータベースエンジンで、クラッシュが発生します。
作成したばかりのデータベースで、「SHOW TABLE STATUS FROM hogehoge」のクエリーでクラッシュが発生します。
やはり、以前と同じで、
[ERROR] [MY-000000] [InnoDB] InnoDB: Assertion failure: row0sel.cc:4603
とのエラーログが出力されて、mysqldが落ちてしまいます。

ほかにもクエリーの応答時間が、MySQL 5.7と較べて「激遅」なのも問題です。

MySQL 8.0のバージョンアップで改善することを期待していましたが、改善していません。

DDNSの情報が他のDNSに反映されない

2018/07/13~16にかけて、DDNSの情報が他のDNSに反映されない状況となり、当サイトにアクセス出来ませんでした。

当サイトが利用しているDDNS(ieServer.netのDDNSサービス)は、結構堅牢なサーバ構成をとっているので、トラブルはめったに無いのですが、一応、DDNSの管理者に連絡し対応して頂きました。

DDNSを無料で提供してくれている管理者の方に感謝します。

参考サイト
無料ダイナミックDNS(DDNS)サービス

MySQL 8.0のクラッシュ、その後

MySQL 8.0のクラッシュ、その後、MySQL 8.0インストール初期のmy.ini(my.cnf)を使って、mysqldを起動してテストしても、やはりクラッシュします。

MyISAMとInnoDBの両方のデータベースエンジンで、クラッシュが発生します。
作成したばかりのデータベースで、「SHOW TABLE STATUS FROM hogehoge」のコマンドでクラッシュが発生します。
MyISAMのデータベースを選択した場合でも、
[ERROR] [MY-012856] [InnoDB] InnoDB: MySQL is trying to perform a consistent read but the read view is not assigned!
[ERROR] [MY-000000] [InnoDB] InnoDB: Assertion failure: row0sel.cc:4603
とのログが出力されて、mysqldが落ちてしまいます。

MySQLのバグリポートに「Bug #90694 Server crashes」という同様の現象が報告されているが、解決策は不明です。

MySQL 8.0ではシステム関連テーブルがInnoDBになっているので、MySQLのシステムに近いレベルで、エラーが発生している様に思えます。
MySQL 8.0の次のバージョンで改善することを期待したいと思います。

※2018/07/04バグリポートについて追記

xCCKモジュールのデータをXOOPSの検索から利用できる様にする

xCCKモジュールのデータをXOOPSの検索から利用できる様にする為に、3個のPHPファイルを弄りまた。

1. html/modules/xcck/search.php
を新しく設置
<?php
/**
* @file
* @package xcck
* @version $Id$
**/

if(!defined(‘XOOPS_ROOT_PATH’))
{
exit;
}

$myDirName = basename(dirname(__FILE__));
require XOOPS_TRUST_PATH . ‘/modules/xcck/search.php’;

?>

2. xoops_trust_path/modules/xcck/xoops_version.php

// Search
//$modversion[‘hasSearch’] = 1;
$modversion[‘hasSearch’] = 0;

// Search
$modversion[‘hasSearch’] = 1;
//$modversion[‘hasSearch’] = 0;
に変更

3. xcckモジュールのアップデートを実行することで、XOOPSの検索対象モジュールとして認識される。

4.xwordsモジュールの html/modules/xwords/include/search.inc.php を参考にして、
xoops_trust_path/modules/xcck/search.php
を変更

<?php

eval( ‘

function xcck_search( $queryarray , $andor , $limit , $offset , $userid )
{
return xcck_search_base( $queryarray , $andor , $limit , $offset , $userid ) ;
}

‘ ) ;

if( ! function_exists( ‘xcck_search_base’ ) ) {

function xcck_search_base( $queryarray, $andor, $limit, $offset, $userid )
{

if(!defined(‘XOOPS_ROOT_PATH’))
{
exit;
}

if(!defined(‘XCCK_TRUST_PATH’))
{
define(‘XCCK_TRUST_PATH’,XOOPS_TRUST_PATH . ‘/modules/xcck’);
}

$ret = array();
// XOOPS Search module

$sql = “SELECT page_id, category_id, title, content, uid, posttime FROM ” . $xoopsDB -> prefix( “xcck_page” ) . ” WHERE posttime < '".time()."' AND posttime > ‘0’ “;

if ( $userid != 0 && strlen($userid) < 9) { $sql .= " AND uid = '".$userid."' "; } // because count() returns 1 even if a supplied variable // is not an array, we must check if $querryarray is really an array $count = count( $queryarray ); if ( $count > 0 && is_array( $queryarray ) )
{
$sql .= “AND (“;
for ( $i = 0; $i < $count; $i++ ) { $binary = (preg_match('/^[[:alnum:]]+$/',$queryarray[$i])) ? "":"BINARY"; $sql .= ($i > 0) ? ” $andor ” : “”;
$sql .= (strlen($userid) > 8) ? “(title LIKE $binary ‘%$queryarray[$i]%’)” : “(content LIKE $binary ‘%$queryarray[$i]%’ )” ;
}
$sql .= ‘) ‘;
}
$sql .= ‘ORDER BY page_id ASC’;
$result = $xoopsDB -> query( $sql, $limit, $offset );
$ret = array() ;
$context = ” ;
$i = 0;
while ( $myrow = $xoopsDB -> fetchArray( $result ) )
{
// $ret[$i][‘image’] = ‘images/xw.gif’;
$ret[$i][‘link’] = ‘index.php?action=PageView&page_id=’.$myrow[‘page_id’];
$ret[$i][‘title’] = $myrow[‘title’];
$ret[$i][‘time’] = $myrow[‘posttime’];
$ret[$i][‘uid’] = $myrow[‘uid’];
$ret[$i][‘context’] = mb_substr( $myrow[‘content’], 0, 100 );

$i++;
}
return $ret;
}
}

?>

なお、xCCKモジュールのほかに以下のモジュールをインストールしています。
1). lecat(カテゴリ(アクセス管理用))
2). letag(タグ管理)

参考サイト
XOOPS Cube Developer Site – Menu/xcck xCCK – wiki

MySQLの運用を8.0から5.7に戻した

ここ一ヶ月程MySQL8.0で運用していましたが、問題がありMySQL5.7に戻しました。

問題点
1.MyISAMテーブルのクラッシュにより、MySQLのサービス(mysqld自体)が落ちる。
これが最大の問題で、長年MySQLを運用しているが初めての経験です。
MySQLの起動パラメーターの問題なのかは判りません。

2.パフォーマンス(レスポンス)の低下。
レスポンス比較(秒)の表
レスポンス比較(秒)の表
上の表は、XOOPS Cubeに設置してある「db response checker」のデータを簡単に集計した結果です。
MySQL8.0での運用だと明らかにWebの応答が遅く感じます。

あくまでも、テストした非力なサーバ環境での話です。
テスト環境
O S:Windows Server 2008R2 x64
メモリ:2GB
HDD:1TB(普通のSATA HDD)
Webサーバ:IIS7.5
PHP:7.0
Webアプリ:XOOPS Cube
※メモリが少なすぎますね。

IPTables log analyzerをulogd2.xで使う

IPTables log analyzerをulogd2.xで使える様に、いつもの「ちょとだけ改造」をして見ました。

おもな変更点は、
1.PHP7.0への対応で、mysql拡張からmysqli拡張へ、廃止された関数の書き換え
2.ulogd2.xでは、IPアドレスの格納形式がlong型からIPv6対応のバイナリ型となったことへの対応

DNSのキャッシュテーブルを参照できない時の画面
DNSのキャッシュテーブルを参照できない時の画面

DNSのキャッシュテーブルを参照できている時の画面
DNSのキャッシュテーブルを参照できている時の画面

サブネットを指定してフィルタリングをした時の画面
サブネットを指定してフィルタリングをした時の画面

参考サイト
[Linux]ファイルの圧縮、解凍方法
Debian 9(Stretch)にPostgreSQL 9.6をapt-getでインストールし、外部アクセスを許可する
postgreSQLにコマンドラインからSQLファイルを実行
18.2.5. vsftpd 設定オプション
[ulogd] seems something wrong with mysql-ulogd2.sql
【PHP】関数 mysql_… を mysqli_… へ書き換える。
MySQL IPアドレスをlong型で記録する方法
ip2long
long2ip
Net_IPv4 – PEARマニュアル
■[MySQL][メモ]MySQLでIPアドレスを記録する方法
MySQLの1つのカラムでIPv4、IPv6両方のIPアドレスを格納する方法を考える
mysqlからmysqliへ移行変換
PHPのip2longとMySQLのINET_ATON
iptablesログ解析(IPTables log analyzer) (最終更新日:2010/02/16)
Raspberry Piでcrondは動いているのにcron.hourlyが動かない?
Debian 6.0 (squeeze) での、cronのログ有効化
run-partsが認識するファイル名ではまった
/etc/crontabと/etc/cron.d設定ファイルの書き方
IPアドレスが指定したIPアドレス範囲の中にあるかチェック
DBでバイナリ型にSELECT文実行
IPv6アドレスを完全表記(省略されていない表記)に変換するPHPコード
PHPでIPアドレス+ネットマスクに適合するかチェック


 

Powered by XOOPS Cube 2.2 © 2001-2016 XOOPS Cube Project Distributed by XOOPS Cube 2.2 Distribution Team.