Author Archives: Lorand Szekely

Analiza performantei si stabilitatii unui server MySQL folosind utilitarul mysqltuner

MySQLTuner este un script scris in Perl care permite analiza rapida a unei instalari MySQL si propune ajustarea unor parametri pentru cresterea performantei si stabilitatii acesteia.

In ultima versiune (1.7.19) MySQLTuner suporta aprox. 300 de indicatori pentru MySQL/MariaDB/Percona Server.

Este foarte important sa intelegeti pe deplin fiecare modificare pe care o faceti in configurarea serverului MySQL. Testati intotdeauna fiecare modificare pe un server de test si tineti cont ca fiecare imbunatatire poate sa influenteze negativ server-ul in alta parte.

De asemenea, este important ca server-ul MySQL sa functioneze de cel putin o zi pentru ca rezultatul analizei sa fie relevant. Rularea utilizatului mysqltuner pe un server proaspat restartat este complet inutila.

Cea mai simpla metoda de descarcare a utilitarului:

wget http://mysqltuner.pl/ -O mysqltuner.pl
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv

Pentru a rula utilitarul folositi comanda:

perl mysqltuner.pl

Mai multe detalii despre utilizarea mysqltuner gasiti pe pagina oficiala:
https://github.com/major/MySQLTuner-perl

Reinstalare GRUB2 in modul recovery

Dupa actualizarea grub2 pe un server CentOS, incarcarea sistemului se blocheaza imedat dupa POST fara sa afiseze vreun mesaj de eroare. Concluzia a fost ca o data cu actualizarea grub2 a fost deteriorat fie sectorul de boot (MBR), fie fisierul de configurarea /boot/grub2/grub.conf.

Pentru remedierea situatiei au fost urmati pasii urmatori:

  1. Se porneste sistemul folosind DVD-ul de instalare CentOS (7.5), iar la pornire se va alege optiunea Troubleshooting, apoi Rescue a CentOS Linux system.
  2. Dupa pornirea interfetei de recovery se va alege optiunea 1 (Continue) pentru identificarea instalarii actuale a sistemului de operare si montarea lui sub /mnt/sysimage
  3. chroot /mnt/sysimage
  4. Montarea DVD-ului de instalare CentOS:
    mkdit /test
    blkid (pentru a vedea calea spre DVD-ul de instalare, ar trebui sa fie /dev/sr0)
    mount /dev/sr0 /test/
  5. Pentru ca in modul recovery implicit nu exista conxiune la internet, pornirea interfetei de retea si configurarea acesteia se va face manual:
    ip link (listarea interfetelor de retea existente)
    ip link set dev em1 up
    ip addr add 192.168.1.2/24 dev em1 (stabilirea adresei ip a interfetei de retea)
    ip route add default via 192.168.1.1
  6. Dupa ce interfata de retea este activa mai trebuie configurata adresa serverului de DNS:
    vi /etc/resolv.conf
    nameserver 192.168.1.1
  7. Reinstalarea kernel3.10:
    cd test/
    cd Packages/
    yum reinstall kernel-3.10.0-957.el7.x86_64.rpm
  8. Pentru reconfigurarea grub2 este necesara prezenta pachetului grub2-efi-modules. Se va incerca reinstalarea pachetelor: grub2-efi, grub2-efi-modules si shim
    yum reinstall grub2-efi grub2-efi-modules shim
  9. Rescrierea MBR:
    grub2-install /dev/sda
    grub2-install /dev/sdb (in cazul in care hdd-urile sunt in RAID)
  10. Regenerarea fisierului grub.conf:
    grub2-mkconfig -o /boot/grub2/grub.conf
  11. Demontarea unitatii optice:
    umount /test/
  12. Iesirea din interfata de recovery si repornirea sistemului:
    exit
    exit

Migrare software pontaj Anviz

Versiune veche: Anviz Intelligent Management v4.6.5
Versiune noua: Anviz CrossChecks Standard 4.3.12

Se efectueaza instalarea Anviz CrossChex Standard care presupune doar cativa pasi. Dupa finalizarea instalarii se deschide programul si se completeaza detaliile solicitate:

  1. Inregistrarea companiei
    Cateva date de contact si despre identitatea companiei.
  2. Baza de date
    Configurarea accesului la baza de date: server IP, UserName, Password, se bifeaza Create New Database si se completeaza denumirea bazei de date in campul Database Name, apoi se apasa Start New. Programul va crea baza de date si structura necesara de tabele.
  3. Departamente
    Se poate crea un arbore cu structura departamentelor
  4. Angajati
    Se poate importa lista de angajati pe baza machetei propusa de sistem.
  5. Configurari generale
    Configurari generale ale sistemului de pontaj
  6. Orar de lucru
    Configurarea orarului/orarelor de lucru, a schimburilor si asocierea lor la fiecare angajat
  7. Device pontaj
    Inregistrarea si configurarea device-ului de pontaj care va identifica angajatul pe baza amprentei sau a cardului de pontaj.

Dupa prima rulare a programului, se iese din program si se ruleaza direct in baza de date urmatoarea secventa de cod SQL, care va prelua informatiile din vechea baza de date in cea noua, inclusiv conversia anumitor elemente:

TRUNCATE TABLE pontaj_cx.dbo.BasePara;
INSERT INTO pontaj_cx.dbo.BasePara (Company, TwoDay, NoClockIn, NoClockOut, LateTime, LeaveTime, ISOverTime, OverTime, WorkDayLong, WOverTime, HOverTime, FOverTime, OvertimeIn, IsovertimeIn, DeductIn, DeductOut, Contacts, Address, Country, Telephone, Email, Website, /*MinWorkLong, MaxWorkLong, RestDay, CustomField, FaxNumber, Province, Companylogo,*/ databasever, gw_leave1, gw_leave2, gw_leave3, gr_leave1, gr_leave2, gr_leave3, gh_leave1, gh_leave2, gh_leave3)
SELECT 'LIntesa Promotive', TwoDay, NoClockIn, NoClockOut, LateTime, LeaveTime, ISOverTime, OverTime, WorkDayLong, WOverTime, HOverTime, FOverTime, OvertimeIn, IsovertimeIn, DeductIn, DeductOut, 'Lorand Szekely', '', 'Romania', '0740126203', 'lorand.szekely@intesa.ro', 'www.intesa.ro', /*MinWorkLong, MaxWorkLong, RestDay, CustomField, FaxNumber, Province, Companylogo,*/ databasever, gw_leave1, gw_leave2, gw_leave3, gr_leave1, gr_leave2, gr_leave3, gh_leave1, gh_leave2, gh_leave3 FROM pontaj.dbo.BasePara;

TRUNCATE TABLE pontaj_cx.dbo.Checkinout;
SET IDENTITY_INSERT pontaj_cx.dbo.Checkinout ON;
INSERT INTO pontaj_cx.dbo.Checkinout (Logid, Userid, CheckTime, CheckType, Sensorid, Checked, WorkType, AttFlag, OpenDoorFlag)
SELECT Logid, Userid, CheckTime, CAST(CASE When CheckType = 'I' THEN 0 When CheckType = 'O' THEN 1 ELSE CheckType END AS INT) AS CheckType, Sensorid, Checked, WorkType, AttFlag, OpenDoorFlag FROM pontaj.dbo.Checkinout;
SET IDENTITY_INSERT pontaj_cx.dbo.Checkinout OFF;

TRUNCATE TABLE pontaj_cx.dbo.CheckLog;
SET IDENTITY_INSERT pontaj_cx.dbo.CheckLog ON;
INSERT INTO pontaj_cx.dbo.CheckLog (Logid, Userid, CheckTime, CheckType, Sensorid, WorkType, AttFlag, OPFlag, Whys, OPname, DTime)
SELECT Logid, Userid, CheckTime, CAST(CASE When CheckType = 'I' THEN 0 When CheckType = 'O' THEN 1 ELSE CheckType END AS INT) AS CheckType, Sensorid, '', '', OPFlag, Whys, OPname, DTime FROM pontaj.dbo.CheckLog;
SET IDENTITY_INSERT pontaj_cx.dbo.CheckLog OFF;

TRUNCATE TABLE pontaj_cx.dbo.DefineField;
SET IDENTITY_INSERT pontaj_cx.dbo.DefineField ON;
INSERT INTO pontaj_cx.dbo.DefineField (FieldId, FieldName, FieldValue)
SELECT FieldId, FieldName, FieldValue FROM pontaj.dbo.DefineField;
SET IDENTITY_INSERT pontaj_cx.dbo.DefineField OFF;

TRUNCATE TABLE pontaj_cx.dbo.Dept;
SET IDENTITY_INSERT pontaj_cx.dbo.Dept ON;
INSERT INTO pontaj_cx.dbo.Dept (Deptid, DeptName, SupDeptid)
SELECT Deptid, DeptName, SupDeptid FROM pontaj.dbo.Dept;
SET IDENTITY_INSERT pontaj_cx.dbo.Dept OFF;

TRUNCATE TABLE pontaj_cx.dbo.FingerClient;
INSERT INTO pontaj_cx.dbo.FingerClient (Clientid, ClientName, Linkmode, IPaddress, ClientNumber, Baudrate, RecStatus, Floorid, MachineType, DeviceType, CommPWD, CommPort, deviceflag, timezone)
SELECT Clientid, ClientName, Linkmode, IPaddress, ClientNumber, Baudrate, RecStatus, Floorid, MachineType, DeviceType, CommPWD, CommPort, deviceflag, timezone FROM pontaj.dbo.FingerClient;

TRUNCATE TABLE pontaj_cx.dbo.Holiday;
SET IDENTITY_INSERT pontaj_cx.dbo.Holiday ON;
INSERT INTO pontaj_cx.dbo.Holiday (Holidayid, Name, BDate, Days)
SELECT Holidayid, Name, BDate, Days FROM pontaj.dbo.Holiday;
SET IDENTITY_INSERT pontaj_cx.dbo.Holiday OFF;

TRUNCATE TABLE pontaj_cx.dbo.LeaveClass;
SET IDENTITY_INSERT pontaj_cx.dbo.LeaveClass ON;
INSERT INTO pontaj_cx.dbo.LeaveClass (Classid, Classname, ViewColor, Showas)
SELECT Classid, Classname, ViewColor, Showas FROM pontaj.dbo.LeaveClass;
SET IDENTITY_INSERT pontaj_cx.dbo.LeaveClass OFF;

TRUNCATE TABLE pontaj_cx.dbo.OPLog;
SET IDENTITY_INSERT pontaj_cx.dbo.OPLog ON;
INSERT INTO pontaj_cx.dbo.OPLog (Logid, OPid, Optime, OPlog)
SELECT Logid, OPid, Optime, OPlog FROM pontaj.dbo.OPLog;
SET IDENTITY_INSERT pontaj_cx.dbo.OPLog OFF;

TRUNCATE TABLE pontaj_cx.dbo.Schedule;
SET IDENTITY_INSERT pontaj_cx.dbo.Schedule ON;
INSERT INTO pontaj_cx.dbo.Schedule (Schid, Schname, Cycles, Units, IsDefault)
SELECT Schid, Schname, Cycles, Units, AutoClass FROM pontaj.dbo.Schedule;
SET IDENTITY_INSERT pontaj_cx.dbo.Schedule OFF;

TRUNCATE TABLE pontaj_cx.dbo.SchTime;
SET IDENTITY_INSERT pontaj_cx.dbo.SchTime ON;
INSERT INTO pontaj_cx.dbo.SchTime (Schid, BeginDay, Timeid)
SELECT Schid, BeginDay, Timeid FROM pontaj.dbo.SchTime;
SET IDENTITY_INSERT pontaj_cx.dbo.SchTime OFF;

TRUNCATE TABLE pontaj_cx.dbo.TimeTable;
SET IDENTITY_INSERT pontaj_cx.dbo.TimeTable ON;
INSERT INTO pontaj_cx.dbo.TimeTable (Timeid, Timename, Intime, Outtime, BIntime, EIntime, BOuttime, EOuttime, Latetime, Leavetime, WorkDays, Longtime, MustIn, MustOut, IsFreeTime, IsOverTime)
SELECT Timeid, Timename, Intime, Outtime, BIntime, EIntime, BOuttime, EOuttime, Latetime, Leavetime, WorkDays, Longtime, MustIn, MustOut, IsFreeTime, IsOverTime FROM pontaj.dbo.TimeTable;
SET IDENTITY_INSERT pontaj_cx.dbo.TimeTable OFF;

TRUNCATE TABLE pontaj_cx.dbo.Userinfo;
INSERT INTO pontaj_cx.dbo.Userinfo (Userid, UserCode, Name, Sex, Pwd, Deptid, Nation, Birthday, EmployDate, Telephone, Duty, NativePlace, IDCard, Address, Mobile, Educated, Polity, Specialty, IsAtt, Isovertime, Isrest, Remark, MgFlag, CardNum, Picture, UserFlag, Groupid, ClassFlag)
SELECT Userid, Userid, Name, Sex, Pwd, Deptid, Nation, Brithday, EmployDate, Telephone, Duty, NativePlace, IDCard, Address, Mobile, Educated, Polity, Specialty, IsAtt, Isovertime, Isrest, Remark, MgFlag, Cardnum, Picture, UserFlag, Groupid, 1 FROM pontaj.dbo.Userinfo;

TRUNCATE TABLE pontaj_cx.dbo.UserLeave;
SET IDENTITY_INSERT pontaj_cx.dbo.UserLeave ON;
INSERT INTO pontaj_cx.dbo.UserLeave (Lsh, Userid, BeginTime, EndTime, LeaveClassid, Whys)
SELECT Lsh, Userid, BeginTime, EndTime, LeaveClassid, Whys FROM pontaj.dbo.UserLeave;
SET IDENTITY_INSERT pontaj_cx.dbo.UserLeave OFF;

TRUNCATE TABLE pontaj_cx.dbo.UserPower;
SET IDENTITY_INSERT pontaj_cx.dbo.UserPower ON;
INSERT INTO pontaj_cx.dbo.UserPower (Logid, Userid, ClientNumber, PowerFlag)
SELECT Logid, Userid, ClientNumber, PowerFlag FROM pontaj.dbo.UserPower;
SET IDENTITY_INSERT pontaj_cx.dbo.UserPower OFF;

TRUNCATE TABLE pontaj_cx.dbo.UserShift;
INSERT INTO pontaj_cx.dbo.UserShift (Userid, Schid, BeginDate, EndDate)
SELECT Userid, Schid, BeginDate, EndDate FROM pontaj.dbo.UserShift;

Pentru acces deplin asupra tuturor elementelor se porneste programul, iar din meniul Settings > Administrators se bifeaza toate elementele apoi se apasa butonul Apply.

Pentru autentificarea in program se foloseste utilizatorul ADMIN si fara parola.

Toate configuratiile de la momentul primei rulari, precum si stabilirea sau resetarea parolei de administrator pot fi efectuate oricand din aplicatie.

Migrare masina virtuala din VMware Player in ESXi

  1. Se porneste masina virtuala care trebuie exportata si se dezinstaleaza VMware Tools, apoi se face restart.
  2. Dupa ce masina virtuala reporneste se face shutdown.
  3. Urmeaza exportul in format OVF al masinii virtuale. Pentru aceasta se va utiliza, din linie de comanda, programul ovftool.exe  care este localizat in C:\Program Files\VMware\VMware Player\OVFTool .
    Comanda pentru export este:
    ovftool.exe "C:\calea_spre_mv.vmx" "D:\folder_destinatie"
  4. Importul fisierului OVF in serverul ESXi poate fi facut fie prin VMware vSphere fie prin interfata web de administrare ESXi.

    In prima varianta: File > Deploy OVF Template, se alege fisierul OVF creat anterior si se urmeaza instructiunile pana la final.

    In cazul utilizarii interfetei web: Virtual Machines > Create / Register VM > Deploy a virtual machine from an OVF or OVA file, apoi se urmeaza instructiunile pana la final.

Adaugare sufix cititor coduri de bare Honeywell 3800G

Honeywell 3800g

Honeywell 3800g

In cazul in care se scaneaza consecutiv mai multe coduri de bare este necesara utilizarea unui caracter delimitator. Cititorul de coduri de bare Honeywell 3800G (cel utilizat de mine) poate fi configurat asa incat sa insereze acest caracter delimitator dupa fiecare scanare.

Procedura de configurare poate fi gasita in Manualul de utilizare > Capitolul 4 – Data Editing > To Add a Prefix or Suffix. De asemenea, este necesara utilizarea Anexei A – Programming Chart, care se afla la finalul manualului.

Pe scurt, pentru inserarea caracterului CR (Carriage Return) la finalul fiecarei scanari sunt necesari urmatorii pasi:

  1. Se scaneaza codul Clear All Suffixes (pagina 4-4 din Manualul de utilizare)
  2. Se scaneaza codul Add Suffix
  3. Se identifica codul hexa al tipului de cod de bare pentru care se doreste configurarea sufixului (pentru tipologia Code 128 codul hexa este 6A). Daca se doreste adaugarea sufixului pentru toate tipologiile de coduri de bare atunci codul hexa este 99 (All Symbologies)
  4. Se scaneaza codurile de bare corespunzatoare secventei de caractere 6A (identificat la pasul anterior)
  5. Se identifica codul hexa al caracterului CR in tabelul ASCII Conversion Chart (CR = 0D)
  6. Se scaneaza codurile de bare corespunzatoare secventei de caractere 0D (din anexa Programming Chart)
  7. Se scaneaza codul Save (din anexa Programming Chart)

In mod asemanator se procedeaza pentru configurarea unui prefix al codului de bare.

Pentru ca utilizarea sufixului CR este cel mai des intalnita, exista un cod de bare care inlocuieste toti pasii de mai sus: Add CR Suffix for All Symbologies.

HeidiSQL – client gratuit pentru MySQL

HeidiSQL
HeidiSQL

HeidiSQL este un client gratuit si open-source pentru MySQL (MariaDB), MSSQL si PostgreSQL, cu o multime de functii utile programatorilor sau celor care administreaza baze de date MySQL. Personal folosesc acest program inca de pe vemea cand se numea MySQL-Front (2000-2001), iar astazi il gasesc indispensabil in activitatea mea zilnica.

Exista cel putin doua motive pentru care nu renunt la HeidiSQL: dezvoltatorul programului, Ansgar Becker, oferta suport tehnic prompt si mereu lanseaza versiuni noi ale programului. Iar incepand din luna februarie 2018 acest program poate fi descarcat si din Microsoft Store (pentru utilizatorii de Windows 10).

Din gama extinsa de facilitati amintesc:

  • manager de conexiuni la diverse baze de date
  • administrarea variabilelor si parametrilor de configurare a bazei de date
  • multiple sesiuni deschise intr-o singura fereastra
  • administrarea utilizatorilor si a drepturilor acestora
  • administrarea foarte comoda a bazelor de date si a tabelelor (creare, modificare, stergere)
  • interfata pentru crearea si editarea procedurilor si triggerelor
  • taburi separate pentru interogari, fiecare afisand rezultatele in subtaburi diferite
  • highlight si formatare (pretty formatting) sintaxa interogare SQL
  • highlight al celulelor cu aceeasi valoare ca si cea selectata
  • afisarea proceselor curente care ruleaza pe server, cu posibilitatea de administrare a lor
  • exportarea bazelor de date (sau doar a unor tabele) intr-un fisier sql sau direct in alta baza de date
  • exportarea rezultatelor unei interogari intr-un fisier extern in diferite formate (csv, xml, html, sql, LaTeX, PHP Array, JSON, etc…)
  • importarea datelor dintr-un fisier csv direct intr-o tabela
  • vizualizarea rapida si editarea continutului unei tabele
  • optimizarea in masa a tabelelor
  • posibilitatea de a filtra lista bazelor de date si a tabelelor utilizand sintaxa regex
  • posibilitatea de a salva unele interogari intr-o lista cu acces rapid (Snippets)
  • poate fi utilizat si ca soft portabil (nu necesita instalare)
  • exista variante pentru 32 si 64 bit

Evident ca pe masura ce veti utiliza HeidiSQL, pe care il consider ca fiind cel mai bun program in ramura sa, veti descoperi si multe alte facilitati.

Incepand cu versiunea 9.5.0.5318, pentru conectarea la un server Microsoft SQL este necesar sa fie instalat Microsoft OLE DB Driver for SQL Server.

Mai multe detalii: heidisql.com

Screenshot-uri: heidisql.com/screenshots.php

Diverse operatiuni: heidisql.com/help.php.

Redirectionare website spre HTTPS

  1. Activarea redirectionarii permanente prin modificarea fisierului de configurare al virtual host
    <VirtualHost *:80> 
    ServerName www.lorand.work
    Redirect permanent / https://www.lorand.work/
    </VirtualHost>
    
    <VirtualHost _default_:443> 
    ServerName www.lorand.work
    DocumentRoot /var/www/httpdocs
    SSLEngine On 
    </VirtualHost>
  2. Activarea redirectionarii folosind fisierul .htaccess
    RewriteEngine On 
    RewriteCond %{HTTPS} !=on 
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Modificarea locatiei default pentru fisierele temporare de backup in Plesk

  1. Conectare la server prin SSH
  2. Realizarea unui backup al fisierului de configurare al Plesk /etc/psa/psa.conf
    # cp -a /etc/psa/psa.conf{,.bkp}
  3. Modificarea variabilei DUMP_TMP_D  asa incat sa indice spre locatia dorita
    # grep DUMP_TMP_D /etc/psa/psa.conf 
    DUMP_TMP_D /mnt/backupdrive/tmp
  4. Setarea drepturilor 1777  pentru folderul destinatie
    # chmod 1777 /mnt/backupdrive/tmp
    
  5. Verificarea drepturilor pentru folderul destinatie
    # ls -ld /mnt/backupdrive/tmp
    drwxrwxrwt 53 root root 20480 Feb 8 21:39 /mnt/backupdrive/tmp
    

Metoda este valabila pentru Plesk Onyx. Pentru Plesk 12.5 sau mai vechi: https://support.plesk.com/hc/en-us/articles/213902125-Unable-to-download-a-backup-from-backup-repository-page-not-found

Modificarea limitei pentru dimensiunea fisierelor uploadate in WordPress

1. Modificarea setarilor PHP in cPanel

cPanel > Select PHP Version > Switch to PHP Options > upload_max_filesize = 200M

 

2. Modificarea fisierului php.ini

upload_max_filesize = 200M post_max_size = 200M memory_limit = 200M

 

3. Modificarea fisierului .htaccess

php_value upload_max_filesize 12M
php_value post_max_size 13M
php_value memory_limit 15M

 

4. Modificarea setarilor php din scriptul wp-config.php

ini_set( 'upload_max_size' , '12M' );
ini_set( 'post_max_size', '13M');
ini_set( 'memory_limit', '15M' );

 

5. Utilizarea filtrului WordPress upload_size_limit

/**
 * Filter the upload size limit for non-administrators.
 *
 * @param string $size Upload size limit (in bytes).
 * @return int (maybe) Filtered size limit.
 */
function filter_site_upload_size_limit( $size ) {
    // Set the upload size limit to 10 MB for users lacking the 'manage_options' capability.
    if ( ! current_user_can( 'manage_options' ) ) {
        // 10 MB.
        $size = 1024 * 10000;
    }
    return $size;
}
add_filter( 'upload_size_limit', 'filter_site_upload_size_limit', 20 );

 

Afisare data corecta in Mozilla Thunderbird

  1. La afisarea mesajelor se alege coloana Received, in loc de Date
  2. Tools > Options > Advanced > Config Editor
  3. Se cauta parametrul mailnews.customDBHeaders
  4. Dublu-click pe acest parametru si se introduce valoarea Received
  5. Se apasa OK, apoi se restarteaza Thunderbird.

Toate mesajele care vor fi receptionate ulterior acestei setari vor afisa data corecta. Daca se doreste aplicarea setarii pentru mesajele deja descarcate, atunci se selecteaza folderul respectiv, click-dreapta pe acesta > Properties > Repair folder. Thunderbird va descarca din nou mesajele si va citi corect data receptionarii lor.