แสดงบทความที่มีป้ายกำกับ mysql-server แสดงบทความทั้งหมด
วันเสาร์ที่ 31 ตุลาคม พ.ศ. 2558
[HOW TO] Script Backup Mysql Log (Shell Script)
Posted by
Unknown,
on
09:50:00
[HOW TO] Script Backup Mysql Log (Shell Script)
#!/bin/bash
###################################################
# ____ _ ____ #
# / ___|_ _ _ _| |_ ___ _ __ / ___| #
# | | _| | | | | | | __/ _ \| '_ \| | _ #
# | |_| | |_| | |_| | || (_) | | | | |_| | #
# \____|\__,_|\__,_|\__\___/|_| |_|\____| #
# #
###################################################
# ScriptMySqlLogBackup.sh #
###################################################
timestamp=$(date +"%Y%m%d")
MyHost="localhost"
MyUser="root"
MyPass=""
logDir="/var/log/mysql"
moveToDir=""
echo "[INFO] $(date +"%Y%m%d %T") : mysql log backup start";
mv $logDir/mysql.log $logDir/mysql.log.$timestamp
mv $logDir/mysql_error.log $logDir/mysql_error.log.$timestamp
mv $logDir/mysql-slow.log $logDir/mysql-slow.log.$timestamp
if [ -f "$logDir/mysql.log" ]
then
echo "[WARN] $(date +"%Y%m%d %T") : mysql.log Move Failed";
else
echo "[INFO] $(date +"%Y%m%d %T") : mysql.log Move Successed";
fi
if [ -f "$logDir/mysql_error.log" ]
then
echo "[WARN] $(date +"%Y%m%d %T") : mysql_error.log Move Failed";
else
echo "[INFO] $(date +"%Y%m%d %T") : mysql_error.log Move Successed";
fi
if [ -f "$logDir/mysql-slow.log" ]
then
echo "[WARN] $(date +"%Y%m%d %T") : mysql-slow.log Move Failed";
else
echo "[INFO] $(date +"%Y%m%d %T") : mysql-slow.log Move Successed";
fi
if [ -n "$MyPass" ]
then
/usr/bin/mysqladmin --host=$MyHost --user=$MyUser --password=$MyPass flush-logs
else
/usr/bin/mysqladmin --host=$MyHost --user=$MyUser flush-logs
fi
echo "[INFO] $(date +"%Y%m%d %T") : flush-logs Successed";
zip $logDir/mysql.log.$timestamp.zip $logDir/mysql.log.$timestamp
zip $logDir/mysql_error.log.$timestamp.zip $logDir/mysql_error.log.$timestamp
zip $logDir/mysql-slow.log.$timestamp.zip $logDir/mysql-slow.log.$timestamp
if [ -f "$logDir/mysql.log.$timestamp.zip" ]
then
echo "[INFO] $(date +"%Y%m%d %T") : mysql.log.$timestamp zip Successed";
rm -rf $logDir/mysql.log.$timestamp
echo "[INFO] $(date +"%Y%m%d %T") : mysql.log.$timestamp Deleted";
else
echo "[WARN] $(date +"%Y%m%d %T") : mysql.log.$timestamp zip Failed";
fi
if [ -f "$logDir/mysql_error.log.$timestamp.zip" ]
then
echo "[INFO] $(date +"%Y%m%d %T") : mysql_error.log.$timestamp zip Successed";
rm -rf $logDir/mysql_error.log.$timestamp
echo "[INFO] $(date +"%Y%m%d %T") : mysql_error.log.$timestamp Deleted";
else
echo "[WARN] $(date +"%Y%m%d %T") : mysql_error.log.$timestamp zip Failed";
fi
if [ -f "$logDir/mysql-slow.log.$timestamp.zip" ]
then
echo "[INFO] $(date +"%Y%m%d %T") : mysql-slow.log.$timestamp zip Successed";
rm -rf $logDir/mysql-slow.log.$timestamp
echo "[INFO] $(date +"%Y%m%d %T") : mysql-slow.log.$timestamp Deleted";
else
echo "[WARN] $(date +"%Y%m%d %T") : mysql-slow.log.$timestamp zip Failed";
fi
if [ -n "$moveToDir" ]
then
if [ -f "$logDir/mysql.log.$timestamp.zip" ]
then
mv $logDir/mysql.log.$timestamp.zip $moveToDir/mysql.log.$timestamp.zip
echo "[INFO] $(date +"%Y%m%d %T") : move mysql.log.$timestamp.zip to $moveToDir";
else
echo "[WARN] $(date +"%Y%m%d %T") : mysql.log.$timestamp.zip not found or move Failed";
fi
if [ -f "$logDir/mysql_error.log.$timestamp.zip" ]
then
mv $logDir/mysql_error.log.$timestamp.zip $moveToDir/mysql_error.log.$timestamp.zip
echo "[INFO] $(date +"%Y%m%d %T") : move mysql_error.log.$timestamp.zip to $moveToDir";
else
echo "[WARN] $(date +"%Y%m%d %T") : mysql_error.log.$timestamp.zip not found or move Failed";
fi
if [ -f "$logDir/mysql_error.log.$timestamp.zip" ]
then
mv $logDir/mysql_slow.log.$timestamp.zip $moveToDir/mysql_slow.log.$timestamp.zip
echo "[INFO] $(date +"%Y%m%d %T") : move mysql_slow.log.$timestamp.zip to $moveToDir";
else
echo "[WARN] $(date +"%Y%m%d %T") : mysql_slow.log.$timestamp.zip not found or move Failed";
fi
else
echo "[WARN] $(date +"%Y%m%d %T") : Move Failed";
fi
echo "[INFO] $(date +"%Y%m%d %T") : mysql log backup finish";
#============================ #edit ScriptMySqlLogBackup.sh #============================ MyHost="localhost" MyUser="root" MyPass="" logDir="/var/log/mysql" #============================ #edit crontab #============================ crontab -e 0 23 * * * /path/to/ScriptMySqlLogBackup/ScriptMySqlLogBackup.sh > /path/to/ScriptMySqlLogBackup/ScriptMySqlLogBackup.log
วันพุธที่ 26 สิงหาคม พ.ศ. 2558
Percona XtraDB Cluster 5.6 (3 node) With Docker
Posted by
Unknown,
on
23:31:00
Percona XtraDB Cluster 5.6 (3 node) With Docker
ในช่วงนี้ต้องบอกว่ายุคของ containers ผมก็เลยลองทำ Docker สักหน่อย อยากทำเป็น database cluster เลยเลือก Percona XtraDB Cluster 5.6 เพราะเป็น open source มาทำ (กำลังศึกษา อาจอธิบายอะไรผิดพลาดต้องขออภัยด้วยนะครับ ปล.ต้องขอบคุณคอร์สเอื้ออาทรสุดๆจาก Links Innovation)
1.ทำการ
pull
image ของ
ubuntu
มาก่อน
2.สร้าง directoryไว้สำหรับเก็บ image ของเรา เช่น
และสร้าง percona.list สำหรับลง มำ repo ไปยัง percona
8.เปิด Docker Terminal ขึ้นมาใหม่ 3 อัน แล้วใช้คำสั่ง docker attach [name]เพื่อ remote เข้าไปยัง container
Ubuntu:[gtpxc1]
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
credit by: Docker,Percona XtraDB Cluster 5.6 Documentation,Jericho Rivera
2.สร้าง directoryไว้สำหรับเก็บ image ของเรา เช่น
mkdir ubuntu-percona cd ubuntu-percona3.สร้าง Dockerfile ที่จะรวมคำสั่งในการสร้าง image ของเราขึ้นมา
vi Dockerfile FROM ubuntu:trusty MAINTAINER GuutonG credit by [Percona.com] CMD ["/bin/bash"] ENV DEBIAN_FRONTEND noninteractive RUN apt-get update RUN apt-get upgrade -y RUN apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A ADD percona.list /etc/apt/sources.list.d/percona.list RUN apt-get update RUN apt-get install -y percona-xtradb-cluster-56 qpress xtrabackup RUN apt-get install -y python-software-properties vim wget curl netcat
vi percona.list deb http://repo.percona.com/apt trusty main deb-src http://repo.percona.com/apt trusty main4.ทำการbuild Dockerfile ที่เราสร้างไว้
docker build -t ubuntu:gtpxc .5. ทำการ run ubuntu:gtpxc ออกมา3 containner
for n in {1..3}; do docker run --name gtpxc$n -i -t -d ubuntu:gtpxc bash; done
6.เรียกดู
docker
ที่ทำงานอยู่docker ps7.เช็คIP ของแต่ละ container
docker inspect gtpxc1 | grep IPAddress docker inspect gtpxc2 | grep IPAddress docker inspect gtpxc3 | grep IPAddressในที่นี้จะได้ IP
8.เปิด Docker Terminal ขึ้นมาใหม่ 3 อัน แล้วใช้คำสั่ง docker attach [name]เพื่อ remote เข้าไปยัง container
docker attach gtpxc1 docker attach gtpxc2 docker attach gtpxc3
vi /etc/mysql/my.cnf #GT-PXC Node1 [mysqld] user = mysql default_storage_engine = InnoDB basedir = /usr datadir = /var/lib/mysql socket = /var/run/mysqld/mysqld.sock port = 3306 innodb_autoinc_lock_mode = 2 log_queries_not_using_indexes = 1 max_allowed_packet = 128M binlog_format = ROW wsrep_provider = /usr/lib/libgalera_smm.so wsrep_cluster_name="docker-gtpxc" #IP node1,node2,node3 wsrep_cluster_address = gcomm://[IP node1],[IP node2],[IP node3] #Name node1 wsrep_node_address = [IP node1] wsrep_node_name = gtpxc1 wsrep_slave_threads = 4 wsrep_sst_method = xtrabackup-v2 wsrep_sst_auth = gtuser:gtpassword [sst] streamfmt = xbstream [xtrabackup] compress compact parallel = 2 compress_threads = 2 rebuild_threads = 2
/etc/init.d/mysql bootstrap-pxcและสร้าง user pass กลางสำหรับใช้ร่วมกัน
mysql>CREATE USER 'gtuser'@'localhost' IDENTIFIED BY 'gtpassword'; mysql>GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'gtuser'@'localhost'; mysql>FLUSH PRIVILEGES;ตรวจสอบค่าต่างของ cluster
mysql>show global status like 'wsrep%';Ubuntu:[gtpxc2]
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
vi /etc/mysql/my.cnf /etc/init.d/mysql startUbuntu:[gtpxc3]
แก้ไขไฟล์ my.cnf และใช้คำสั่งเพื่อ start mysql
#vi /etc/mysql/my.cnf #/etc/init.d/mysql startUbuntu:[gtpxc1]
mysql>show global status like 'wsrep%'; +------------------------------+------------------------------------------------ --+ | Variable_name | Value | +------------------------------+------------------------------------------------ --+ | wsrep_local_state_uuid | 1bb5bf25-4c05-11e5-b0af-ebfa440f9b9e | | wsrep_incoming_addresses | 172.17.0.4:3306,172.17.0.5:3306,172.17.0.6:3306 | | wsrep_evs_repl_latency | 0.00041831/0.000710346/0.000908118/0.000180007/ 4 | | wsrep_evs_state | OPERATIONAL | | wsrep_gcomm_uuid | 1bb555bd-4c05-11e5-95a6-cfcc3cc31436 | | wsrep_cluster_conf_id | 3 | | wsrep_cluster_size | 3 | | wsrep_cluster_state_uuid | 1bb5bf25-4c05-11e5-b0af-ebfa440f9b9e | | wsrep_cluster_status | Primary | | wsrep_connected | ON | | wsrep_local_bf_aborts | 0 | | wsrep_local_index | 0 | | wsrep_provider_name | Galera | | wsrep_provider_vendor | Codership Oy | | wsrep_provider_version | 3.11(r93aca2d) | | wsrep_ready | ON | +------------------------------+------------------------------------------------ --+[TEST]
Time
|
Ubuntu:[gtpxc1] | Ubuntu:[gtpxc2] | Ubuntu:[gtpxc3] |
1
|
create database gtpxcDB; | ||
2
|
show
databases; +--------------------+ | Database | +--------------------+ | gtpxcDB | +--------------------+ |
||
3
|
gtpxcDB; create table tbl1 (id INT PRIMARY KEY, name VARCHAR(30)); INSERT INTO gtpxcDB.tbl1 VALUES (1, 'gtpxc1'); INSERT INTO gtpxcDB.tbl1 VALUES (2, 'gtpxc2'); INSERT INTO gtpxcDB.tbl1 VALUES (3, 'gtpxc3'); |
||
4
|
show
tables; +-------------------+ | Tables_gtpxcDB | +-------------------+ | tbl1 | +-------------------+ |
||
5
|
use
gtpxcDB; select * from tbl1; +----+--------+ | id | name | +----+--------+ | 1 | gtpxc1 | | 2 | gtpxc2 | | 3 | gtpxc3 | +----+--------+ |
credit by: Docker,Percona XtraDB Cluster 5.6 Documentation,Jericho Rivera
วันเสาร์ที่ 25 กรกฎาคม พ.ศ. 2558
[HOW TO] Auto Backup Mysqldump with Python and crontab
Posted by
Unknown,
on
17:48:00
[HOW TO] Auto Backup Mysqldump with Python and crontab
บทความนี้เราจะมาเขียน สคริปให้ auto mysql backup บน Linux กันนะครับ โดยมีการใช้ ภาษา Python และคำสั่ง crontab สำหรับ ตารางเวลาในการทำงาน
Dowload
# wget https://github.com/Guutong/pySQLdump/releases/download/v.0.0.1/pySQLdumpSetup.sh # chmod +x pySQLdumpSetup.sh # mkdir /root/pySQLBackup/ # ./pySQLdumpSetup.sh
Set vi conf/settings.ini
[mysql]
user = user_name
password = pass_word
dbname = db_name
destination = /root/pySQLBackup/
user = user_name
password = pass_word
dbname = db_name
destination = /root/pySQLBackup/
How to setting Auto backup with crontab
sudo apt-get install crontab
crontab -e
00 00 * * 0 cd /opt/pySQLdump/ && sh run.sh
ESC
:wq!
/etc/init.d/cron restart
crontab -e
00 00 * * 0 cd /opt/pySQLdump/ && sh run.sh
ESC
:wq!
/etc/init.d/cron restart
Code Python
#!/usr/bin/python
######################################################
#____________________________________________________#
#_______________Mr.Pornmongkon Pongsai_______________#
#____________________pySQLdump v.0.1_________________#
#______________Create Date : 25-07-2015______________#
#____________________________________________________#
######################################################
from ConfigParser import SafeConfigParser
from os import path
from subprocess import Popen, PIPE
import shlex
import datetime
import logging
def main():
config_file = 'conf/settings.ini'
logs_path = 'logs/pySQLdump.log'
logging.basicConfig(filename=logs_path,format='%(asctime)s:%(levelname)s:%(message)s',level=logging.DEBUG)
# Read in all the settings
config = SafeConfigParser()
config.read(config_file)
user = config.get('mysql', 'user')
password = config.get('mysql', 'password')
database = config.get('mysql', 'dbname')
destination = config.get('mysql', 'destination')
date = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
file_name = 'pySQLdump-' + database + '-' + date
logging.info('==[RUN]== Running mysqldump')
cmd = 'mysqldump -u' + user + ' ' + database + ' -p"' + password + '" --result-file="' + file_name + '.sql"'
logging.debug(cmd)
run_cmd(cmd)
logging.info('Creating Zip file')
run_cmd('zip ' + file_name + '.zip ' + file_name + '.sql')
logging.info('Removing dump file')
run_cmd('rm ' + file_name + '.sql')
logging.info('Moving zipped tarball to destination')
run_cmd('mv ' + file_name + '.zip ' + destination)
logging.info('==[PASS]== Mysqldump success!')
def run_cmd(cmd):
process = Popen(shlex.split(cmd), stdout=PIPE)
dump_output = process.communicate()[0]
exit_code = process.wait()
if exit_code != 0:
print(dump_output)
raise Exception(str(exit_code) + ' - Error executing command. Please review output.')
if __name__ == '__main__':
main()
วันพฤหัสบดีที่ 12 ธันวาคม พ.ศ. 2556
[HOW TO] Install Web Server on Ubuntu
Posted by
Unknown,
on
12:18:00
ขั้นตอนการติดตั้ง Web
Server
1.ทำการติดตั้ง Apache2
ด้วยคำสั่ง
$ sudo apt-get install apache2
ใส่ Password แล้วตอบ Y
3.เมื่อเสร็จแล้วให้ทำการติดตั้ง MySQL ด้วยคำสั่ง
หมายเหตุ : phpMyAdmin เป็นโปรแกรมประเภท mySQL Client ตัวหนึ่งที่ใช้ในการจัดการฐานข้อมูล mySQL ผ่านบราวเซอร์ได้โดยตรง
จะขึ้น [ OK ]
2.เมื่อเสร็จแล้วให้ติดตั้ง php5 ด้วยคำสั่ง
$ sudo apt-get install php5
$ sudo apt-get install mysql-server
ซักพักมันจะให้เราใส่ Password
และ Repeat password
4. ทำการติดตั้ง phpmyadmin ด้วยคำสั่ง
$ sudo apt-get install phpmyadmin
หมายเหตุ : phpMyAdmin เป็นโปรแกรมประเภท mySQL Client ตัวหนึ่งที่ใช้ในการจัดการฐานข้อมูล mySQL ผ่านบราวเซอร์ได้โดยตรง
เลือก apache2 (กด specbarเพื่อเลือก,กด tab เพื่อเลื่อน)
ตอบ yes
ใส่พาสเวิร์ดของ Admin
ในการใช้งาน database
ใส่พาสเวิร์ดของ Admin
ในการใช้งาน mysql
ยืนยัน Password
เป็นอันเสร็จ
ทำการทดสอบ
1. ทดสอบการทำงานของ apache2 โดยใช้คำสั่ง
$ netstat -lnt
เพื่อดูสถานะการเชื่อมต่อของเครื่อง
ตรวจสอบ IP ของเครื่องเซิร์ฟเวอร์ได้โดยใช้คำสั่ง
ต่อมาเปิดให้
apache2 ใช้งาน php ด้วยคำสั่ง
และทำการ
restart
apache2 ด้วยคำสั่ง
ถ้า TCP มีการใช้งาน
port :80 และมีสถานะ LISTEN ถือว่าใช้งานได้
(สามารถดูรายละเอียดของคำสั่งต่างๆได้โดยใช้ทำสั่ง man <command>)
ต่อมาเป็นการทดสอบ การทำงานบนเครื่อง client
โดยนำ IP ของเครื่อง เซิร์ฟเวอร์ไปใส่ใน
URL browser ของเครื่อง client
$ ifconfig
และนำ IP ที่ได้ไปวางบน
URL ของ browser ของเครื่อง Client ถ้ามีคำว่า It works!
ก็ผ่าน
2.ทำการทดสอบการทำงานของ PHP เราต้องสร้าง file ทดสอบขึ้นมาชื่อ testweb.php
โดยการใช้คำสั่ง
โดยการใช้คำสั่ง
$ sudo vi /var/www/testweb.php
พิมพ์คำสั่ง และทำการ save
<?php phpinfo(); ?>
$ sudo a2enmod php5
ต่อมาให้แก้ไฟล์ /etc/apache2/apache2.conf
โดยใช้คำสั่ง
$ sudo vi /etc/apache2/apache2.conf
และไปเพิ่มบรรทัดล่างสุดว่า
servername ตามด้วยชื่อhostname ของตัวเอง
*สามารถตรวจสอบชื่อ hostname ด้วยคำสั่ง
$hostname
$ sudo /etc/init.d/apache2 restart หรือ $ sudo service apache2 restart
ทำการตรวจสอบการทำงานของ php
โดยพิมพ์ IP/ชื่อไฟล์ที่เราสร้าง จากbrowser
ของเครื่อง Client
ในที่นี้จะเป็น 192.168.23.129/testweb.php
ในที่นี้จะเป็น 192.168.23.129/testweb.php
สุดท้ายทำการทดสอบการทำงานของ phpmyadmin
จากเครื่อง Client ด้วย IP/phpmyadmin ในที่นี้จะเป็น 192.168.23.129/phpmyadmin
ลองใส่ Username และ Password
ลงไปเพื่อทดสอบการใช้งาน
3.ทดสอบการทำงานของ mysql โดยใช้คำสั่ง
$ mysql -u root -p
วันพุธที่ 11 ธันวาคม พ.ศ. 2556
[HOW TO] Install openssl on Ubuntu Server
Posted by
Unknown,
on
16:23:00
การติดตั้ง ssl-cert ลง Ubuntu Server
ให้เราทำการสร้าง
directory สำหรับในการติดตั้ง key โดยใช้คำสั่ง
$sudo mkdir ssl-cert
และเข้าไปใน directory
ssl-cert ที่เราสร้างขึ้น ด้วยคำสั่ง
$cd ssl-cert
หมายเหตุ - *ในที่นี้ผมจะสร้าง directory ssl- cert ไว้ที่ / เราสามารถไปที่ directory / โดยใช้คำสั่ง cd / และสามารถตรวจสอบรายชื่อแฟ้มทั้งหมดที่อยู่ใน directory นั้นๆ ด้วยคำสั่ง ls
** ใน Linux เราจะเรียก แทน Folder ว่า Directory
ทำการติดตั้งโปรแกรม openssl โดยใช้คำสั่ง
$sudo apt-get install openssl
*openssl เป็นซอร์ฟแวร์ที่ใช้สำหรับทำ SSL
$ sudo vi /etc/ssl/openssl.cnf
แก้ไขดังนี้
CountryName_default = TH
State0rProvinceName_default
= ค่าว่าง
สร้างไฟล์ Certificate โดยใช้คำสั่ง
$ sudo openssl genrsa –out server.key 1024
$ sudo openssl req -config /etc/ssl/openssl.cnf -new -key server.key -out newcsr.csr
จากนั้นก็กรอกข้อมูลลงไป (แล้วแต่นะ)
สร้างไฟล์ Server Certificate โดยการใช้คำสั่ง
$ sudo openssl x509 -req -days 365 -in newcsr.csr -signkey server.key -out server.crt
หมายเหตุ - การใช้ \ เป็นการขั้นบรรทัดใหม่ในการใช้คำสั่งโดยคำสั่งจะถือว่าเป็นคำสั่งเดียวกัน
$ sudo a2enmod ssl
$ sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/sslsite
$ sudo vi /etc/apache2/sites-available/sslsite
แก้ข้อความตามนี้
NameVirtualHost *:443ServerAdmin guutong@admin.com SSLEngine On SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /ssl-cert/server.crt SSLCertificateKeyFile /ssl-cert/server.key
แล้ว Save
กำหนดให้คอนฟิกนั้น enable โดยใช้คำสั่งดังต่อไปนี้
จากนั้นให้ Restart Network และ Apache โดยใช้คำสั่ง
$ sudo /etc/apache2/sites-available/a2ensite sslsite
$ sudo /etc/init.d/networking restart $ sudo service apache2 restart
ทำการตรวจสอบ
ตรวจสอบการทำงานของ SSL ซึ่งจะทำงานอยู่ที่พอร์ต 443 โดยใช้คำสั่งดัง $ netstat –lnt
ทดสอบการใช้บริการ HTTPS ผ่านเครื่อง Client โดยพิมพ์
URL https://Server_IP เช่น https://192.168.23.129
URL https://Server_IP เช่น https://192.168.23.129
สมัครสมาชิก:
บทความ
(
Atom
)


















































