Category Archives: MYSQL

Percona Streaming Backup


SERVER B (192.168.0.140)

[root@alfamart ~]# rpm -aq | grep Percona
Percona-Server-shared-55-5.5.27-rel28.1.296.rhel6.x86_64
Percona-Server-55-debuginfo-5.5.27-rel28.1.296.rhel6.x86_64
Percona-Server-client-55-5.5.27-rel28.1.296.rhel6.x86_64
Percona-Server-server-55-5.5.27-rel28.1.296.rhel6.x86_64
Percona-Server-devel-55-5.5.27-rel28.1.296.rhel6.x86_64
Percona-Server-test-55-5.5.27-rel28.1.296.rhel6.x86_64
Percona-Server-shared-compat-5.5.27-rel28.1.296.rhel6.x86_64

[root@alfamart ~]# innobackupex -v
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012. All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
[root@alfamart ~]# mysql –version
mysql Ver 14.14 Distrib 5.5.27, for Linux (x86_64) using readline 5.1
[root@alfamart ~]# ls -l /var/lib/mysql
total 28864
-rw-rw—- 1 mysql mysql 5 Oct 17 22:43 alfamart.pid
drwx—— 2 mysql mysql 4096 Oct 13 13:18 percona
drwx—— 2 mysql mysql 4096 Oct 11 01:01 percona_addons
drwx—— 2 mysql mysql 4096 Oct 11 01:01 percona_report
-rwx—— 1 mysql mysql 18874368 Oct 17 22:43 ibdata1
-rw-rw—- 1 mysql mysql 5242880 Oct 17 22:43 ib_logfile0
-rw-rw—- 1 mysql mysql 5242880 Oct 11 01:01 ib_logfile1
drwx—— 2 mysql mysql 4096 Oct 11 01:01 mysql
srwxrwxrwx 1 mysql mysql 0 Oct 17 22:43 mysql.sock
drwx—— 2 mysql mysql 4096 Oct 12 13:50 oshop_gc
drwx—— 2 mysql mysql 4096 Oct 11 01:01 performance_schema
-rwx—— 1 mysql mysql 21 Oct 11 01:01 xtrabackup_binlog_pos_innodb
[root@alfamart ~]# innobackupex –host=localhost –user=myuser –password=mypassword –stream=tar ./ | ssh -q root@192.168.0.121 “cat – > /tmp/test/backup.tar”

SERVER A ( 192.168.0.121)
[root@REMASTER63 test]# ls -l /tmp/test/backup.tar

[root@REMASTER63 test]# tar -ixvf backup.tar

[root@REMASTER63 test]# ls -l
total 64868
-rw-r–r– 1 root root 260 Oct 17 22:59 backup-my.cnf
drwxr-xr-x 2 root root 4096 Oct 17 23:18 percona
drwxr-xr-x 2 root root 4096 Oct 17 23:18 percona_addons
drwxr-xr-x 2 root root 4096 Oct 17 23:18 percona_report
-rw-rw—- 1 root root 18874368 Oct 17 22:43 ibdata1
drwxr-xr-x 2 root root 4096 Oct 17 23:18 mysql
drwxr-xr-x 2 root root 4096 Oct 17 23:18 oshop_gc
drwxr-xr-x 2 root root 4096 Oct 17 23:18 performance_schema
-rw-r–r– 1 root root 13 Oct 17 22:59 xtrabackup_binary
-rw-r–r– 1 root root 23 Oct 17 22:59 xtrabackup_binlog_info
-rw-rw—- 1 root root 79 Oct 17 22:59 xtrabackup_checkpoints
-rw-rw—- 1 root root 2560 Oct 17 22:59 xtrabackup_logfile

[root@alfamart mysql]# /etc/init.d/mysql stop

[root@alfamart lib]# mv mysql mysql-percona

[root@alfamart lib]# mkdir mysql

[root@REMASTER63 test]# rsync -avz -e ‘ssh -p 22’ /tmp/test/* root@192.168.0.140:/var/lib/mysql/

[root@alfamart mysql]# chown -R mysql.mysql /var/lib/mysql

[root@alfamart mysql]# /etc/init.d/mysql start
Starting MySQL (Percona Server)…. SUCCESS!

Advertisements

Protected: PERCONA innobackupex INNODB & MYISAM +SHELL SCRIPT


This content is password protected. To view it please enter your password below:

Check Service MYSQL using Xinet.d , Telnet Service MYSQL


[root@svrrepo html]# vim /opt/mysqlchk

#!/bin/bash
MYSQL_HOST=”localhost”
MYSQL_PORT=”3306″
MYSQL_USERNAME=”root”
MYSQL_PASSWORD=”passowordku”

TMP_FILE=”/tmp/mysqlchk.out”
ERR_FILE=”/tmp/mysqlchk.err”

/usr/bin/mysql –host=$MYSQL_HOST –port=$MYSQL_PORT –user=$MYSQL_USERNAME \
–password=$MYSQL_PASSWORD -e”show databases;” > /dev/null
RETVAL=$?

if [ “${RETVAL}” -eq “0” ]
then
# mysql is fine, return http 200
/bin/echo -e “HTTP/1.1 200 OK\r\n”
/bin/echo -e “Content-Type: Content-Type: text/plain\r\n”
/bin/echo -e “\r\n”
/bin/echo -e “MySQL is running.\r\n”
/bin/echo -e “\r\n”
else
# mysql is fine, return http 503
/bin/echo -e “HTTP/1.1 503 Service Unavailable\r\n”
/bin/echo -e “Content-Type: Content-Type: text/plain\r\n”
/bin/echo -e “\r\n”
/bin/echo -e “MySQL is *down*.\r\n”
/bin/echo -e “\r\n”
fi

save wq!

[root@svrrepo html]# vim /etc/xinetd.d/mysqlchk

# /etc/xinetd.d/mysqlchk
# default: on
# description: mysqlchk
service mysqlchk
{
flags = REUSE
socket_type = stream
port = 9200
wait = no
user = nobody
server = /opt/mysqlchk
log_on_failure += USERID
disable = no
only_from = 0.0.0.0/0 # recommended to put the IPs that need
# to connect exclusively (security purposes)
per_source = UNLIMITED # Recently added (May 20, 2010)
# Prevents the system from complaining
# about having too many connections open from
# the same IP. More info:
# http://www.linuxfocus.org/English/November2000/article175.shtml
}

save wq!

[root@svrrepo html]# vim /etc/services
#wap-wsp 9200/tcp # WAP connectionless session service
mysqlchk 9200/tcp
wap-wsp 9200/udp # WAP connectionless session service

save wq!

[root@svrrepo html]# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]

[root@svrrepo html]# telnet 192.168.0.253 9022
Trying 192.168.0.253…
telnet: connect to address 192.168.0.253: Connection refused
[root@svrrepo html]# telnet 192.168.0.253 9200
Trying 192.168.0.253…
Connected to 192.168.0.253.
Escape character is ‘^]’.
HTTP/1.1 200 OK

Content-Type: Content-Type: text/plain

MySQL is running.

Connection closed by foreign host.

HOW BACKUP EVERY TABLE USING SHELL SCRIPT


Berikut adalah sedikit shell script untuk melakukan backup per table dari suatu database. Cocoknya script ini dijalankan di single server (tidak memiliki server backup), namun pada script ini juga dibuat satu parameter sehingga bisa di backup di ke server backup dalam bentuk text file (.sql) dan dimport ke server backup.

Kelemahan dari backup ini adalah : Backup tidak dilakukan secara realtime, tapi H-1. Jadi ketika database corrupt & hardisk server crash data terakhir adalah H-1

#!/bin/bash
#A UNIX / Linux shell script to backup per table!!!!!
# ————————————————————————-
# Copyright (c) 2011 Mustafa Tambunan <mustafa@intelix.co.id>
# Created : 2011-12-23 03:00:00
# ————————————————————————-
# Tested under RHEL / CentOS 5.5
# note :
# Jalankan di crontab setiap jam 1 pagi : contoh : 0 1 * * * /shell/filename.sh > /dev/null

#IP DARI SERVER UTAMA
_SRC_HOST=”192.168.137.100″
_SRC_USER=”ecentrix”
_SRC_PASSWD=”mosespassword”
_SRC_OPT=” –no-create-info –compact –skip-quote-names”
_SRC_DBNAME=”ecentrix_addons” # nama datbase di server utama

#IP/LOCALHOST DARI SERVER BACKUP
_DEST_HOST=”localhost”
_DEST_USER=”ecentrix”
_DEST_PASSWD=”mosespassword”
_DEST_DBNAME=”ecentrix_addons” #nama database di server backup

_BACKUP_IS_AVAILABLE=”N”

_CMD_MYSQLDUMP=”$(which mysqldump)”
_CMD_MYSQL=”$(which mysql)”

if [ $1 != “” ]; then
_DATE=$1
else
_DATE=$(date –date=”1 days ago” +”%Y-%m-%d”)
fi

exit
_DIR_SQL_DATA=”/home/ecentrix/backup_db/${_SRC_DBNAME}/${_DATE}”
_LOG_DIR=”/home/ecentrix/backup_db/${_SRC_DBNAME}/log/”

mkdir -p ${_DIR_SQL_DATA}
mkdir -p ${_LOG_DIR}

#cat > ${_LOG_DIR}”${_DATE}.log”

_logger(){
LOG_FORMAT=” [ “$( date +’%H:%M:%S’)”] ”
echo $LOG_FORMAT $1
echo $LOG_FORMAT $1 >> ${_LOG_DIR}”${_DATE}.log”
}

_ARR_TABLE=(
“table_name” “field_param”
“dashboard_user” “created_time”
“dashboard_user_privilege” “created_time”
“ecentrix_sms_in” “receive_date”
“ecentrix_sms_out” “send_date”
“ecentrix_sms_call” “created_time”
“ecentrix_fax” “created_time”
“ecentrix_voice_mail” “created_time”
“ecentrix_blocked_caller” “created_time”
“ecentrix_fax” “created_time”
“pp_fax” “created_time”
“pz_fax” “created_time”
“pz_sms_out” “created_time”
)

_COUNT_ARR_TABLE=13
_LIMIT_TBL_NAME=$((($_COUNT_ARR_TABLE*2)-4))

_TBL_NAME=0
_TBL_PARAM=1
_C=2

while [ ${_TBL_NAME} -le ${_LIMIT_TBL_NAME} ] ; do
_TBL_NAME=$( expr ${_TBL_NAME} + ${_C} )
_TBL_PARAM=$( expr ${_TBL_PARAM} + ${_C} )

if [ “${_ARR_TABLE[${_TBL_PARAM}]}” == “” ]; then
_WHERE=” ”
else
_WHERE=” –where=date(${_ARR_TABLE[${_TBL_PARAM}]})=’${_DATE}'”
fi

#_logger ${_WHERE}
#dump to text file then import to database backup every day
${_CMD_MYSQLDUMP} -h ${_SRC_HOST} -u${_SRC_USER} -p${_SRC_PASSWD} ${_SRC_OPT} ${_SRC_DBNAME} ${_ARR_TABLE[${_TBL_NAME}]} ${_WHERE} | replace “INSERT
INTO” “INSERT IGNORE INTO “> ${_DIR_SQL_DATA}/${_ARR_TABLE[${_TBL_NAME}]}”.sql”
if [ “$?” -eq 0 ];then
_TBL_SIZE=$(ls -lah ${_DIR_SQL_DATA}/${_ARR_TABLE[${_TBL_NAME}]}.sql | awk ‘{ print $5}’)
_logger “Success, dump table ${_ARR_TABLE[${_TBL_NAME}]} with file size = ${_TBL_SIZE}”
if [ “${_BACKUP_IS_AVAILABLE}” == “Y” ]; then
if [[ -f ${_DIR_SQL_DATA}/${_ARR_TABLE[${_TBL_NAME}]}.sql && ${_TBL_SIZE} > 0 ]]; then
#start import to database backup
${_CMD_MYSQL} -h ${_DEST_HOST} -u${_DEST_USER} -p${_DEST_PASSWD} –database ${_DEST_DBNAME} < ${_DIR_SQL_DATA}/${_ARR_TABLE[$
{_TBL_NAME}]}”.sql”
if [ “$?” -eq 0 ];then
_logger “Success, import table ${_ARR_TABLE[${_TBL_NAME}]}”
else
_logger “Fail, import table ${_ARR_TABLE[${_TBL_NAME}]}”
fi
#edn import to backup
else
_logger “Not import table ${_ARR_TABLE[${_TBL_NAME}]} bcz size = 0 or file not exits”
fi
fi
else
_logger “Fail, dump table ${_ARR_TABLE[${_TBL_NAME}]}”
fi
done

#dump lates schema database ecentrix every month
_DATE_LAST_MONTH=”$( date +%Y-%m)-“`cal $( date +%m) $( date +%Y) |tail -2|awk ‘{print $NF;exit}’`
if [ “$( date +%F )” == “${_DATE_LAST_MONTH}” ]; then
${_CMD_MYSQLDUMP} -h ${_SRC_HOST} -u${_SRC_USER} -p${_SRC_PASSWD} -d –quick –database ${_SRC_DBNAME} | gzip -c > ${_DIR_SQL_DATA}/${_SRC_DBNAME}-d
b-schema.sql.gz
fi

cat > ${_LOG_DIR}fail.log
egrep -wRZ “Fail” ${_LOG_DIR} >> ${_LOG_DIR}fail.log

Jika harus dibackup ke server backup maka rubah parameter:

_BACKUP_IS_AVAILABLE=”Y”

dan sesuaikan parameter

#IP DARI SERVER UTAMA
_SRC_HOST=”192.168.137.100″
_SRC_USER=”ecentrix”
_SRC_PASSWD=”mosespassword”
_SRC_OPT=” –no-create-info –compact –skip-quote-names”
_SRC_DBNAME=”ecentrix_addons” # nama datbase di server utama

#IP/LOCALHOST DARI SERVER BACKUP
_DEST_HOST=”localhost”
_DEST_USER=”ecentrix”
_DEST_PASSWD=”mosespassword”
_DEST_DBNAME=”ecentrix_addons” #nama database di server backup

 

Terimakasih

 

 

MULTIPLE INSTANCES OF MYSQL ON A SINGLE LINUX SERVER


Bagaimana membuat multipe instance mysql di 1 server linux?  Anda dapat menggunakan mysqld_multi dengan melakukan sedikit config di /etc/my.cnf.  Pastikan di my.conf tidak ada port yang sama:) Untuk mencreate multiple instance segaja dibuat dengan menggunakan shell script untuk memberikan kemudahkan kepada admin dan dapat mencreate dalam waktu 1 menit:)
Berikut adalah langkah-langkahnya:
  1. Pastikan mysql sudah terinstall di linux server anda, gunakan command rpm -aq | grep mysql , rpm -aq | grep mysql-server, atau jalankan aja service mysqlnya (/etc/init.d/mysqld restart).
  2. cat > /etc/my.cnf dan buat copykan beris berikut ini:
    mysqld]
    skip-external-locking
    [mysqld_multi]
    mysqld     = /usr/bin/mysqld_safe
    mysqladmin = /usr/bin/mysqladmin
    log        = /var/log/mysqld_multi.log
    user       = mysql
  3. cd /home/ & vim /etc/create_multiple_instance_mysql.sh
    Create file baru dan copykan baris dibawah “create_multipe_instance_mysql.sh ” dan silahkan rubah beberapa parameter, seperti “ID, PORT, CLIENT_NAME, ROOT_PASSWORD,CLIENT_USER,CLIENT_PASSWORD”

    #!/bin/bash
    # Tested on Centos 5.5 & MYSQL 5.07
    # Created : 8 Agustus 2011 By mustafa@intelix.co.id
    ID="2"
    PORT="3308"
    CLIENT_NAME="usr8000" 
    ROOT_PASSWD="rootpasswd"
    CLIENT_USER="ecentrix"
    CLIENT_PASSWD="ecentrixpwd"
     
    echo "" >> /etc/my.cnf
    echo "[mysqld${ID}]" >> /etc/my.cnf
    echo "port              = ${PORT}" >> /etc/my.cnf
    echo "datadir           = /home/${CLIENT_NAME}/mysql/" >> /etc/my.cnf
    echo "pid-file  = /home/${CLIENT_NAME}/mysql/mysql.pid" >> /etc/my.cnf
    echo "socket            = /home/${CLIENT_NAME}/mysql/mysql.sock" >> /etc/my.cnf
    echo "user              = mysql" >> /etc/my.cnf
    echo "log-error = /var/log/log-error-${CLIENT_NAME}.err" >> /etc/my.cnf
     
    mkdir -p /home/${CLIENT_NAME}/mysql
    chown -R mysql.mysql /home/${CLIENT_NAME}
    mysql_install_db --user=mysql --datadir=/home/"${CLIENT_NAME}"/mysql/
    chown -R mysql.mysql /home/${CLIENT_NAME}
    mysqld_multi start ${ID}
     
    sleep 5
     
    echo "1. USE MYSQL; UPDATE USER SET password=password('${ROOT_PASSWD}') WHERE USER='root';"
    mysql -uroot -P ${PORT} -S /home/${CLIENT_NAME}/mysql/mysql.sock -e "USE mysql; UPDATE user SET password=password('${ROOT_PASSWD}') WHERE user='root';"
     
    sleep 5
     
    echo "2. FLUSH PRIVILEGES;"
    mysql -uroot -P ${PORT} -S /home/${CLIENT_NAME}/mysql/mysql.sock -e "FLUSH PRIVILEGES;"
     
    sleep 5
     
    echo "3. GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY '${ROOT_PASSWD}' WITH GRANT OPTION;"
    mysql -uroot -p${ROOT_PASSWD} -P ${PORT} -S /home/${CLIENT_NAME}/mysql/mysql.sock -e "GRANT ALL PRIVILEGES ON *.* to root@'%' IDENTIFIED BY '${ROOT_PASSWD}' WITH GRANT OPTION;"
     
    sleep 5
    echo "4. GRANT ALL PRIVILEGES ON *.* TO ${CLIENT_USER}@'%' IDENTIFIED BY '${CLIENT_PASSWD}' WITH GRANT OPTION;"
    mysql -uroot -p${ROOT_PASSWD} -P ${PORT} -S /home/${CLIENT_NAME}/mysql/mysql.sock -e "GRANT ALL PRIVILEGES ON *.* TO ${CLIENT_USER}@'%' IDENTIFIED BY '${CLIENT_PASSWD}' WITH GRANT OPTION;"
     
    sleep 5
     
    echo "5. GRANT ALL PRIVILEGES ON *.* TO ${CLIENT_USER}@localhost IDENTIFIED BY '${CLIENT_PASSWD}' WITH GRANT OPTION;"
    mysql -uroot -p${ROOT_PASSWD} -P ${PORT} -S /home/${CLIENT_NAME}/mysql/mysql.sock -e "GRANT ALL PRIVILEGES ON *.* TO ${CLIENT_USER}@localhost IDENTIFIED BY '${CLIENT_PASSWD}' WITH GRANT OPTION;"
     
    echo ""
     
    mysqld_multi report ${ID} 
  4. chmod +x /home/create_multipe_instance_mysql.sh
    [root@node2 moses]# sh create_multipe_instance_mysql.sh
    Apabile berhasik maka akan muncul seperti tampilah dbwah ini:

    The latest information about MySQL is available on the web at
    http://www.mysql.com
    Support MySQL by buying support/licenses at http://shop.mysql.com
    1. USE MYSQL; UPDATE USER SET password=password('rootpasswd') WHERE USER='root';
    2. FLUSH PRIVILEGES;
    3. GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY 'rootpasswd' WITH GRANT OPTION;
    4. GRANT ALL PRIVILEGES ON *.* TO ecentrix@'%' IDENTIFIED BY 'ecentrixpwd' WITH GRANT OPTION;
    5. GRANT ALL PRIVILEGES ON *.* TO ecentrix@localhost IDENTIFIED BY 'ecentrixpwd' WITH GRANT OPTION;
     
    Reporting MySQL servers
    MySQL server from group: mysqld2 is running
  5. Untuk melakukan shutdown ke instance tertentu gunakan command:
    mysqladmin -uroot -prootpasswd -S /home/usr8000/mysql/mysql.sock  shutdown 
  6. Untuk menstart cukup menjalankan command
    mysqld_multi start 2

  7. Untuk melihat semua instance, gunakan command:
    mysqld_multi report 

TUNING MYSQL FOR MASSIVE INSERT


$link = mysql_connect(‘localhost’, ‘root’, ‘moses’);
if (!$link) {
die(‘Not connected : ‘ . mysql_error());
}
$db_selected = mysql_select_db(‘tester’, $link);
if (!$db_selected) {
die (‘Can\’t use foo : ‘ . mysql_error());
}
// myisam
//default conf
//BULK_INSERT_BUFFER_SIZE=8388608
//MYISAM_SORT_BUFFER_SIZE=8388608
//KEY_BUFFER_SIZE=8384512

mysql_query(“truncate table load1”,$link);
mysql_query(“SET SESSION BULK_INSERT_BUFFER_SIZE=256217728”,$link); // 256M
mysql_query(“SET SESSION MYISAM_SORT_BUFFER_SIZE=256217728”,$link); // 256M
mysql_query(“SET GLOBAL CONCURRENT_INSERT=2”,$link);
mysql_query(“SET GLOBAL KEY_BUFFER_SIZE=256217728”,$link); // 256M
mysql_query(“alter table load1 disable keys”,$link);
mysql_query(“LOAD DATA INFILE ‘/home/moses/loaddata.csv’ IGNORE INTO TABLE load1 FIELDS TERMINATED BY ‘,'”);
mysql_query(“alter table load1 enable keys”,$link);
mysql_close($link);

//default conf
//innodb_flush_log_at_trx_commit=1
//innodb_flush_method=
//innodb_doublewrite=ON
//innodb_additional_mem_pool_size=1048576 (1M)
//innodb_buffer_pool_size=8388608 (8M)
//innodb_log_file_size=5242880 (5M)

//innodb
mysql_query(“truncate table load1”,$link);
mysql_query(“SET SESSION innodb_flush_log_at_trx_commit=2”,$link);
mysql_query(“SET SESSION innodb_flush_method=O_DIRECT “,$link);
mysql_query(“SET SESSION innodb_doublewrite=0”,$link); // default ON
mysql_query(“SET SESSION innodb_additional_mem_pool_size=26214400”,$link); // => 25M
mysql_query(“SET SESSION innodb_buffer_pool_size=1073741824”,$link); // => 1G
mysql_query(“SET SESSION innodb_log_file_size=268435456”,$link); // => 256M
mysql_query(“LOAD DATA INFILE ‘/home/moses/loaddata.csv’ IGNORE INTO TABLE load1 FIELDS TERMINATED BY ‘,'”,$link);
mysql_close($link);

Pertimbangkan juga dengan menggunakan pada innodb
UNIQUE_CHECKS=0;
FOREIGN_KEY_CHECKS=0

mysqldump: Got error: 1044: Access denied for user ‘root’@’localhost’ to database ‘information_schema’ when using LOCK TABLES


How to fix this problem ?

$ mysqldump –single-transaction -u user -p DBNAME > backup.sql

$ mysql -u root -p

mysql> GRANT SELECT,LOCK TABLES ON DBNAME.* TO ‘username’@’localhost’;

#!/bin/bash
# Purpose: Backup mysql
# Author: Vivek Gite; under GNU GPL v2.0+
NOW=$(date +"%d-%m-%Y")
DEST="/.backup/mysql"
# set mysql login info
MUSER="root"                # Username
MPASS='PASSWORD-HERE'   # Password
MHOST="127.0.0.1"  # Server Name

# guess binary names
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

[ ! -d "${DEST}" ] && mkdir -p "${DEST}"
# get all db names
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
 FILE=${DEST}/mysql-${db}.${NOW}-$(date +"%T").gz
 # get around error
 $MYSQLDUMP --single-transaction -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
shisdew

Listens until think alike

moses.spaceku@yahoo.com / voip ipbx

Hosted PBX, IP-PBX SOHO/ CALL CENTER, VOICE GATEWAY, VOICE CARD, COST EFECTIVE SOLUTIONS (LCR), GSM/CDMA GATEWAY

%d bloggers like this: