顯示具有 mysql 標籤的文章。 顯示所有文章
顯示具有 mysql 標籤的文章。 顯示所有文章

2026/08/09






librenms的php 官方建議要升到8.4以上了

比照之前記錄一下流程

列出之前 hold住的 package

apt-mark showhold

php-cli     php-curl  php-gd   php-json      php-mysql  php-snmp  php-zip php-common  php-fpm   php-gmp  php-mbstring  php-pear   php-xml


apt-mark unold php-cli     php-curl  php-gd   php-json      php-mysql  php-snmp  php-zip php-common  php-fpm   php-gmp  php-mbstring  php-pear   php-xml


移除先前版本

apt remove php8.3-zip php8.3-xml php8.3-snmp php8.3-readline php8.3-opcache php8.3-mysql php8.3-mbstring php8.3-gmp php8.3-common php8.3-curl php8.3-gd php8.3


安裝新版本

apt install php-cli     php-curl  php-gd   php-json      php-mysql  php-snmp  php-zip php-common  php-fpm   php-gmp  php-mbstring  php-pear   php-xml


設定timezone

/etc/php/8.4/cli/php.ini

date.timezone = Asia/Taipei


複制 /etc/php/8.3/fpm/pool.d/librenms.conf 到 /etc/php/8.4/fpm/pool.d


apt-mark hold

php-cli
php-common
php-curl
php-fpm
php-gd
php-gmp
php-json
php-mbstring
php-mysql
php-pear
php-snmp
php-xml
php-zip
php


重跑validate

出現







找了全部的檔案都沒找到這行

目前安裝的版本是 rrdtoold 1,7,2


最後找到是放在db裡

 select * from config where config_value like "%1.4.8%";
+-----------+-----------------+--------------+
| config_id | config_name     | config_value |
+-----------+-----------------+--------------+
|       820 | rrdtool_version | "1.4.8"      |
+-----------+-----------------+--------------+
1 row in set (0.001 sec)


直接update

MariaDB [librenms]>update config set config_value = '"1.5.5"' where config_id=820;
Query OK, 1 row affected (0.000 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [librenms]>
MariaDB [librenms]>
MariaDB [librenms]> select * from config where config_id=820;
+-----------+-----------------+--------------+
| config_id | config_name     | config_value |
+-----------+-----------------+--------------+
|       820 | rrdtool_version | "1.5.5"      |
+-----------+-----------------+--------------+
1 row in set (0.000 sec)

再跑validate就沒出現了

2025/05/15

昨天有人介紹了一個可以管制登入並且螢幕錄影的軟体


今天試了一下
先安裝 本次都以docker 安裝
先pull四個image

網頁前端
docker pull guacamole/guacamole

主体程式
docker pull guacamole/guacd

資料庫
docker pull mysql

影像檔轉檔程式
docker pull litios/guacenc


在宿主几建立存放影像檔的資料夾 並提供給docker 掛載
mkdir /opt/screen_record
cd /opt
chmod -R 777 screen_record

啟動資料庫
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=guacamole mysql


生成並導入Guacamole初始化資料庫:

docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
docker cp initdb.sql mysql:/
docker exec -it mysql bash
mysql -uroot -p
create database guac;
use guac;
source /initdb.sql;
exit
exit

啟動guacd 同時掛載影像檔目錄

docker run --name guacd -d -v /opt/screen_record:/recordings guacamole/guacd


啟動Guacamole Web應用,連結guacd和mysql:

docker run --name guacamole --link guacd:guacd --link mysql:mysql \
-e MYSQL_DATABASE=guac -e MYSQL_USER=root -e MYSQL_PASSWORD=guacamole \
-d -p 9090:8080 guacamole/guacamole


啟動guacenc 同時掛載影像檔目錄

docker run -v /opt/screen_record:/recordings -d -it --name guacenc litios/guacenc


瀏覽器訪問 http://你的IP:9090/guacamole,預設帳號密碼均為 guacadmin。


影像檔轉檔為m4v 指令
docker exec -it guacenc guacenc -s 1280x720 -r 20000000 -f /recordings/record_file_name


更新docker 開几重啟
docker update --restart always <容器ID或名稱>


下篇再補上操作介面說明

2024/08/03

上次librenms升完OS後
一直出現hd容量不夠的狀況
今天才發現 /var/log/syslog 這個檔變的很大
內容都是以下的log

2024-08-03T12:14:01.608311+08:00 W-librenms-debian12 mariadbd[221]: 2024-08-03 12:14:01 283381 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'histogram' at position 10 to have type longblob, found type varbinary(255).
2024-08-03T12:14:01.608631+08:00 W-librenms-debian12 mariadbd[221]: 2024-08-03 12:14:01 283381 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'hist_type' at position 9 to have type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'), found type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB').
2024-08-03T12:14:01.608659+08:00 W-librenms-debian12 mariadbd[221]: 2024-08-03 12:14:01 283381 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'histogram' at position 10 to have type longblob, found type varbinary(255).

google了一下
說是升OS時DB沒升造成
使用以下指令升級DB

mysql_upgrade --user=root --password=passwd

目前看來正常了
再觀察看看

2020/10/07

近期OCS inventory官方 announce 2.8 版

想說來升看看

果不期然 又出問題

在原机升完後

管理頁面完全出不來

後來在官方網站找到已經提供rpm了

不過前几天還沒release 2.8 直到昨天

重裝一台好了

裝完後client 資料一直進不去

看了一下error log

Can't call method "rollback" on an undefined value at /usr/share/perl5/vendor_perl/Apache/Ocsinventory/Server/System.pm line 312.\n

forum上說是帳號密碼沒設定好

/etc/ocsinventory/ocsinventory-reports/dbconfig.inc.php

這個檔我有設

不過

/etc/httpd/conf.d/ocsinventory-server.conf

這個也要設

改完 mysql的帳號密碼後重啟就沒問題了

再觀察看看吧

2019/02/21

昨天登入 librenms 時出現以下的訊息

Error: PHP version too low
PHP version 7.1.3 is the minimum supported version as of February 1st, 2019. We recommend you update to PHP a supported version of PHP (7.2 suggested) to continue to receive updates. If you do not update PHP, LibreNMS will continue to function but stop receiving bug fixes and updates.

目前使用的版本是php 7.0 所以一定要升級

首先使用原机升級
把原有的php 7.0的rpm全部移除後再新安裝 php 7.2
再來碰到是 php-fpm的問題
程式同步的問題
花了很多時間
daily.php
validate.php
也都沒有異常
登入後全部的圖都無法顯示

再來試第二種方法

把資料庫跟rrd file 備份後重新放到新机器上
可是資料庫匯入時 到 sensor那個table就死了
試了好几次都是如此

最後沒辦法了
下載新的ova
所有的device全部再建進去一次
因為是用來monitor的
所以歷史資料應該也還好
沒有再去試把舊的rrd 再放進去可不可行

先醬吧

2019/02/23

在web管理介面上再執行一次validate

出現權限的問題

usermod -a -G apache nginx

改完之後
就全部正常了
XD

如果在文字介面上跑完 
daily.php
validate.php
都無異常 可是登入後還是有問題
記得在web管理介面上再執行一次validate

2019/01/11

最近有台電腦中毒
在snort造成三百多萬筆的log

TOTAL        ip_src
3019640    192.168.101.56

導致web的管理介面開啟緩慢
於是想說來清理一下
碰到几個問題

首先用sql下指令
半小時大約只能delete 2百多筆
醬可能要搞到天荒地老

再來想說不然匯出 用 shell處理完再匯入
用grep直接當掉
只能用sed
可是用sed的速度比sql快不了多少

最後解決的方式是
先把發生當天的資料全砍了

delete from event where timestamp like '2019-01-07%';

再清理一次
快多了

2018/09/18

librenms 自動更新三不五時要debug好像已經變成日常了

今天打開頁面又是一片空白

先跑一下 /opt/librenms/validate.php

./validate.php
====================================
Component | Version
--------- | -------
LibreNMS  | 1.43-82-gcf31776
DB Schema | 267
PHP       | 7.0.31
MySQL     | 5.5.60-MariaDB
RRDTool   | 1.4.8
SNMP      | NET-SNMP 5.7.2
====================================

[OK]    Composer Version: 1.7.2
[OK]    Dependencies up-to-date.
[OK]    Database connection successful
[OK]    Database schema correct
[FAIL]  Missing PHP extension: mysqlnd
[FIX] Please install mysqlnd
[WARN]  Some devices have not been polled in the last 5 minutes. You may have performance issues.
[FIX] Check your poll log and see: http://docs.librenms.org/Support/Performance/
Devices:
192.168.0.1
192.168.0.2
 192.168.15.254
192.168.19.254
  and 22 more...
[WARN]  Your install is over 24 hours out of date, last update: Sun, 16 Sep 2018 17:23:12 +0000
[FIX] Make sure your daily.sh cron is running and run ./daily.sh by hand to see if there are any errors.

說我沒有安裝mysqlnd 補一下吧

但發現因為我已經安裝 php70w-mysql 所以不能再裝

Processing Conflict: php70w-mysql-7.0.31-1.w7.x86_64 conflicts php70w-mysqlnd
--> Finished Dependency Resolution
Error: php70w-mysql conflicts with php70w-mysqlnd-7.0.31-1.w7.x86_64

google到以下的文章

https://community.librenms.org/t/fail-missing-php-extension-mysqlnd-fix-please-install-mysqlnd/5130/5


yum swap php70w-mysql php70w-mysqlnd

裝好後再跑一次

./validate.php
====================================
Component | Version
--------- | -------
LibreNMS  | 1.43-82-gcf31776
DB Schema | ?
PHP       | 7.0.31
MySQL     | ?
RRDTool   | 1.4.8
SNMP      | NET-SNMP 5.7.2
====================================

[FAIL]  Missing dependencies! [FIX] ./scripts/composer_wrapper.php install --no-dev
fideloper/proxy
[FAIL]  Outdated dependencies [FIX] ./scripts/composer_wrapper.php install --no-dev
psy/psysh
[OK]    Composer Version: 1.7.2
[FAIL]  Missing dependencies!
[FIX] composer install --no-dev
Dependencies:
fideloper/proxy

照他說的再執行

./scripts/composer_wrapper.php install --no-dev

再跑一次

./daily.sh
Updating to latest codebase                        OK
Updating Composer packages                         OK
Updated from cf31776 to 8f89cd5                    OK
Updating SQL-Schema                                OK
Updating submodules                                OK
Cleaning up DB                                     OK
Fetching notifications                             OK
Caching PeeringDB data                             OK

以上
ok了

2018/01/07

延續昨天的問題
程式跑一個晚上砍不到10000筆 XD
早上停掉
找了一下資料
改用另一種跑法

一樣是先把要砍的欄位資料撈出來
之後以一萬筆為單位拆開 做完後從資料中清除
如下

先把找出來的cid先排序 才能使用 comm 指令

sort data > data_s
mv data_s data

get_10000

sed -n '1,10000p' data > data_del
#grep -v -f data_del data > data_tmp
comm -1 -3 data_del data > data_tmp
mv -f data_tmp data

利用上述的檔案生成sql 語法

del_data_10000

for i in `cat data_del`
do
    echo -n $i" ,"
done > 000

echo -n 999999999 >> 000

mysql -u user -p123456 snort -e"delete from event where cid in (`cat 000`);"



一次跑100個loop

#!/bin/bash

for i in {1..100};
do
    echo $i" times"

    ./get_10000
    echo "get ok"
    ./del_data_10000
    echo "del ok"

    wc data
    echo " "

done

速度快多了

2017/10/02

昨天晚上server發生filesystem錯誤

重開後mariadb出現問題
到log去看時發現以下資訊

171002  8:51:09  InnoDB: cannot calculate statistics for table ABC/def
InnoDB: because the .ibd file is missing.  For help, please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
171002  8:51:09 [ERROR] MySQL is trying to open a table handle but the .ibd file for
table ABC/def does not exist.
Have you deleted the .ibd file from the database directory under
the MySQL datadir, or have you used DISCARD TABLESPACE?
See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html
how you can resolve the problem.

到目錄去看時
def.idb這個檔真的不見了
查了一下
這個檔不見是沒辦法由目前的資料再產生的
只能recovery

找了一下備分
倒回去
目前看來正常
再觀察看看

2017/08/24

今天要登入awacs(網管軟体)時
出現無法連接的訊息
登入主机發現mariadb的daemon不見了
systemctl restart mariadb也起不來
看了一下 /var/log/mariadb/mariadb.log 發現以下的記錄

170824 19:02:01  InnoDB: Page checksum 2583736692 (32bit_calc: 3902863637), prior-to-4.0.14-form checksum 2992650943
InnoDB: stored checksum 218772529, prior-to-4.0.14-form stored checksum 775370784
InnoDB: Page lsn 825440558 909582385, low 4 bytes of lsn at page end 825373998
InnoDB: Page number (if stored to page already) 775303712,
InnoDB: space id (if created with >= MySQL-4.1.1 and stored already) 775041840
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page 7.
InnoDB: You may have to recover from a backup.
InnoDB: It is also possible that your operating
InnoDB: system has corrupted its own file cache
InnoDB: and rebooting your computer removes the
InnoDB: error.
InnoDB: If the corrupt page is an index page
InnoDB: you can also try to fix the corruption
InnoDB: by dumping, dropping, and reimporting
InnoDB: the corrupt table. You can use CHECK
InnoDB: TABLE to scan your table for corruption.
InnoDB: See also http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.

按照說明
在/etc/my.cnf 加上

[mysqld]
innodb_force_recovery = 1

重啟mariadb

再查一下log

170824 19:02:01  InnoDB: Error: space id and page n:o stored in the page
InnoDB: read in are 1553519:2, should be 1553541:2!
170824 19:02:01  InnoDB: Error: space id and page n:o stored in the page
InnoDB: read in are 1553519:3, should be 1553541:3!

InnoDB: Apply batch completed
InnoDB: Starting in background the rollback of uncommitted transactions
170824 19:02:01  InnoDB: Rolling back trx with id 127203F, 451 rows to undo
170824 19:02:01  InnoDB: Waiting for the background threads to start

InnoDB: Rolling back of trx id 127203F completed
170824 19:02:01  InnoDB: Rollback of non-prepared transactions completed
170824 19:02:02 Percona XtraDB (http://www.percona.com) 5.5.40-MariaDB-36.1 started; log sequence number 653240202086
170824 19:02:02 InnoDB: !!! innodb_force_recovery is set to 1 !!!
170824 19:02:02 [Note] Plugin 'FEEDBACK' is disabled.
170824 19:02:02 [Note] Server socket created on IP: '0.0.0.0'.
170824 19:02:02 [Note] Event Scheduler: Loaded 0 events
170824 19:02:02 [Note] /usr/libexec/mysqld: ready for connections.
Version: '5.5.41-MariaDB'  socket: '/home/Alopex/mysql/mysql.sock'  port: 3306  MariaDB Server
InnoDB: A new raw disk partition was initialized or
InnoDB: innodb_force_recovery is on: we do not allow
InnoDB: database modifications by the user. Shut down
InnoDB: mysqld and edit my.cnf so that newraw is replaced
InnoDB: with raw, and innodb_force_... is removed.
InnoDB: A new raw disk partition was initialized or
InnoDB: innodb_force_recovery is on: we do not allow
InnoDB: database modifications by the user. Shut down
InnoDB: mysqld and edit my.cnf so that newraw is replaced
InnoDB: with raw, and innodb_force_... is removed.

看來是修好了
不過user還是不能用

InnoDB: innodb_force_recovery is on: we do not allow
InnoDB: database modifications by the user. Shut down
InnoDB: mysqld and edit my.cnf so that newraw is replaced
InnoDB: with raw, and innodb_force_... is removed.

要再把

[mysqld]
innodb_force_recovery = 1

mark掉再重開

目前看來是正常了
再觀察看看


https://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html

2017/05/10

之前在centos上執行python的cgi都沒問題
但移植到ubuntu 16.04上後一直出現如下的error

File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 210, in execute
    query = query % args
TypeError: not all arguments converted during string formatting

程式完全一樣都沒改啊

google了半天 才解決問題
差異如下

ubuntu 16.04

sql = "delete from abc where ip=%s"
cursor.execute(sql, [ip])

變數一定要用 [ ] 包住

centos 7

sql = "delete from abc where ip=%s"
cursor.execute(sql, ip)


http://stackoverflow.com/questions/21740359/python-mysqldb-typeerror-not-all-arguments-converted-during-string-formatting

2017/03/14

如何在shell中直接下mysql的指令

mysql -u root -p1234 database -e"select * from data;" >> $tmp/data_from_db

如果不想顯示column 名稱 要加上 -N

mysql -u root -p1234 database -N -e"select * from data;" >> $tmp/data_from_db

2016/07/23

在某些情況下table內只能有一筆唯一的資料存在
而此時在insert時一般會先select看看存不存在
mysql提供了一個方便的語法

mysql INSERT ... ON DUPLICATE KEY UPDATE (新增或是更新一行完成)

必要條件:
  1. 資料表中必須有 PRIMARY或UNIQUE的索引。
  2. INSERT時須帶入1. 欄位的資料

SQL語法範例
INSERT INTO `gamePlayer` (`pNode`, `gsn`,`out`, `monster`, `club3`, `changecolor`) VALUES ('K',4, 100, -1, 0, 1) ON DUPLICATE KEY UPDATE `out`=100, `monster`=-1, `club3`=0, `changecolor`=1


http://note.tc.edu.tw/765.html

2016/06/18

在python中撈取mysql的資料
在cursor.execute後可以用cursor.fetchone()及cursor.fetchall()

如果回傳的只有一筆資料 可以使用cursor.fetchone() 可以少一點code
語法

cursor.execute(select count(*) from table)
result = cursor.fetchone()
print result[0]

如果回傳的資料有很多 則使用cursor.fetchall()

語法
cursor.execute(select * from table)
result = cursor.fetchall()
if result:
for record in result:
print record[0]


2016/06/17

今天找了一下有關mysql 日期時間的使用
大約記一下
分為

NOW()        2001-02-02 19:00:46

CURDATE()    2001-02-02

CURTIME()    19:00:46

使用加減功能

NOW() - INTERVAL 1 DAY  結果       2001-02-01 19:00:46

CURDATE() + INTERVAL 1 DAY  結果      2001-02-03 00:00:00


未來      >         NOW()       <        過去

select * from table where enddate > NOW()          表示在NOW()之後的時間      表示未來    大未來

select * from table where enddate < NOW()          表示在NOW()之前的時間      表示過去    小過去

http://wen198599.pixnet.net/blog/post/22450019-mysql%E6%97%A5%E6%9C%9F%E5%92%8C%E6%99%82%E9%96%93%E5%87%BD%E6%95%B8%E4%B8%8D%E6%B1%82%E4%BA%BA

http://www.webasp.net/article/25/24538.htm

http://www.w3school.com.cn/sql/func_now.asp

http://www.mysqltutorial.org/mysql-now/
今天又有一個需求
因為資料在計算的過程中會有時間差
所以有可能會產生二筆相同的資料
如下圖













可是因為某些原因
不希望讓使用者看到
原本想用DISTINCT來解決
但DISTINCT只能用在一個欄位
花時間找了一下資料
發現直接用group by就可以解決了

select user,ip from table group by ip;












http://tc.wangchao.net.cn/bbs/detail_1846934.html

2016/06/15

最近的工作就是一直用python來連mariadb

今天有個需求
要把從db撈出來的資料寫到檔案
找到這個方便的方法

cursor.execute("test from  test_table")
result = cursor.fetchall()
if result:
f = open("/tmp/data",'w')
        for record in result:
                print record[0],          #在畫面上印出資料
print>>f, record[0]    #把資料寫進檔案

2016/06/11

今天使用python要把資料塞進mysql時一直出問題
明明就有執行
也沒錯誤訊訊息
但資料就是沒進去
本來以為是跳脫字元的問題
試了也沒有
後來找到一個方便的語法
也不用再考慮單引號 雙引號要使用跳脫字元的情況
語法如下
最後的 db.commit() 一定要下
就是因為這個沒下
才試了一下午
最後還是問了高手才知道的

sql="insert into table values(%s,%s,%s,)"
cursor.execute(sql,(now,i,88888))
db.commit()

now是現在時間
i是變數
88888是數字

對應到table
datetime
varchar(50)
bigint(20)

2016/03/05

最近把從mysql撈資料的程式用python改寫 之前是用php

改完後發生的第一個問題就是中文全變成了???

192.168.105.61 || 2016-03-04 00:05:05 || 2016-03-07 00:05:05 || Flow Checking ????????????(1368>????:700) to Deny this IP cannot access network

原因是從mysql撈出來時中文就亂了 所以不管之後怎麼轉碼 都沒有用了
所以必須在撈時就要指定編碼 加上下方紅色字部分

db = MySQLdb.connect(host="localhost", user="abc", passwd="pwd", db="test", charset='utf8')

但加完後網頁反而出不來了
再查了一下資料 說是要再指定sys的編碼 於是程式內必需再加入以下三行

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

加完後之後的結果變成

192.168.105.61 || 2016-03-04 00:05:05 || 2016-03-07 00:05:05 || Flow Checking �訫�銝餅�����賊�蝬脰楝�輻�(1368>�𣂼��賊�:700) to Deny this IP cannot access network

看來中文有出來了 接下來是顯示的問題了 因為這個os比較久了 所以apache預設的編碼是設為big5 如果要去改會影響到其他東東 所以只能在程式加上指定編碼來處理了 比較新版本os的apache應該都預設為utf8了 應該不會碰到這個問題

print '<html>'
print '<head>'
print '<meta charset="UTF-8">'
print '</head>'
print '<body>'

print '</body>'
print '</html>'

網頁正常 搞定

192.168.105.61 || 2016-03-04 00:05:05 || 2016-03-07 00:05:05 || Flow Checking 違反主機連線數量網路政策(1368>限制數量:700) to Deny this IP cannot access network

完整程式碼如下

#!/usr/bin/python
# -*- coding: utf-8 -*-
print "Content-type: text/html"
print
# 引入 MySQL 模組
import MySQLdb
#引入 sys 並指定sys為utf-8編碼
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
# 連接 MySQL
db = MySQLdb.connect(host="localhost", user="abc", passwd="pwd", db="test", charset='utf8')
cursor = db.cursor()
# 執行 SQL
cursor.execute("select ip from table;")
result = cursor.fetchall()
# 輸出結果
a=0
for record in result:
        if (a%2)==1:
                print "<FONT  COLOR=FF0000>"
        else:
                print "<FONT  COLOR=000000>"

        print record[0]
        print "<br>"
        print "<br>"
        a=a+1
db.close()

2015/12/04

最近開始直接向各國回報攻擊我們的ip
今天終於有一個國家回信 是日本
好感動
請我再提供log的時區及純文字檔

snort base 無法直接匯出

記錄一下sql語法

select event.cid,signature,sig_name,inet_ntoa(iphdr.ip_src),tcphdr.tcp_sport,inet_ntoa(iphdr.ip_dst),tcphdr.tcp_dport,timestamp from iphdr,event,signature,tcphdr where event.signature=signature.sig_id and event.cid=iphdr.cid and event.cid=tcphdr.cid and event.timestamp like '2015-12-04%' and inet_ntoa(iphdr.ip_src)="133.208.26.134" into outfile '/tmp/133.208.26.134.log';

事件的唯一值是 event裡的cid 其他table都要參考這個值

iphdr 放的是ip資料
tcphdr 放的是tcp的相關port 資料
udphdr 放的是udp的相關port 資料