แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - อั๋น ทรงวุฒิ

หน้า: [1] 2 3 ... 18
1
อ้างถึง

//แปลงภาษาไทย แบบ tis-620 เป็น utf-8 ใน array

array_walk_recursive($person, function(&$value, $key) {
    if (is_string($value)) {
        $value = iconv('tis-620', 'utf-8', $value);
    }
});

3
พัฒนาเว็บไซต์ Webbased Developer / yii 1.1 : ยกเลิก main.css
« เมื่อ: 25 กุมภาพันธ์ 2019, 09:01:33 PM »
เนื่องจาก css ใน yii มันมีความเชยพอตัว เราก็เลยอยากใช้ css framework ตัวอื่นแทน มีวิธีปิด main.css ดังนี้

[ views/site/pages/about.php ]

อ้างถึง
Yii::app()->clientScript->scriptMap = array(
    'main.css' => false
);

4
พัฒนาเว็บไซต์ Webbased Developer / yii 1.1 : pretty url
« เมื่อ: 25 กุมภาพันธ์ 2019, 08:49:27 PM »
 [ .htaccess ]

อ้างถึง
Options +FollowSymLinks
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php

RewriteRule . index.php [L]


[ protected/config/main.php ]

อ้างถึง
'urlManager'=>array(
                        'showScriptName'=>false,
                        'urlFormat'=>'path',
                        'rules'=>array(
                                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                                'gii'=>'gii',
                                'gii/<controller:\w+>'=>'gii/<controller>',
                                'gii/<controller:\w+>/<action:\w+>'=>'gii/<controller>/<action>',
                        ),
                ),


5
ผมได้มีโอกาสไปซ่อมเครื่องที่สำนักงานพัฒนาชุมชน พบว่าการตั้งค่าให้ Boot ผ่าน USB เป็นเรื่องพิศวง ไม่มีภาพขึ้นจอ มีแต่เสียงตี๊ด 2 ครั้งแล้ว Reboot ตัวเองวนไป

ผมเสียเวลากับมันหลายชั่วโมง กว่าจะปิดงานได้ แล้วก็ลืมวิธีการจัดการมันไป

ผ่านไปประมาณ 2 ปี ได้กลับมาเจอมันอีกครั้ง เพื่อลง Windows ใหม่ ปัญหาเดิมกลับมาหลอน ไล่ search ข้อมูลอยู่นาน ไม่เป็นผล กดปุ่ม reset bios หลายรอบ ก็ไม่ดีขึ้น

จนต้องรื้อเครื่องมาจัดการอย่างละเอียด ถอดการ์ดจอ เสียบสายจอกับช่อง VGA Onboard จึงได้เห็นภาพขึ้นจอให้ใจชื้น

เครื่องแบรนด์ที่ต่อการ์ดจอ มักจะไม่แสดงภาพในขั้นตอน POST กว่าจะเห็นภาพอีกที ก็ตอนที่เครื่องมัน Boot เข้า Windows แล้ว

6
อ้างถึง
VBoxmanage modifyhd MyLinux.vdi --resize 100000

100,000 => 100GB

จากนั้นใช้โปรแกรมประเภท Paritiion Magic หรือ Gparted ทำการขยายขนาด Partition  ได้โดยข้อมูลไม่หาย

7
เกี่ยวกับเซิร์ฟเวอร์ [ Network Server ] / DOCKER : PostgreSQL and pgAdmin
« เมื่อ: 07 กุมภาพันธ์ 2019, 10:31:39 AM »
20 นาทีพร้อมใช้ : การเตรียม Postgresql และ pgAdmin ใน Ubuntu

1 ) ลง Ubuntu จาก ไฟล์ .iso แนะนำให้ลงแบบ Textmode จากนั้นใช้สิทธิ์ root ในข้อถัดไปทุกขั้นตอน

2 ) อัพเกรดระบบเป็นตัวล่าสุด
อ้างถึง
apt update && apt upgrade -y

3 ) ติดตั้ง Docker ซึ่งจะมีหน้าที่เหมือนตู้ Container ให้ระบบฐานข้อมูลอยู่ในนั้น
อ้างถึง
apt install -y  docker.io 

4 ) ติดตั้ง docker-compose เป็นตัวจัดการโปรแกรม ให้ทำงานแบบเป็นไฟล์สคริปต์

อ้างถึง
curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

5 ) เปิดโหมดไฟล์สคริปต์ที่โหลดมาจากข้อ 4 ให้สามารถ execute ได้

อ้างถึง
chmod +x /usr/local/bin/docker-compose

6 ) เตรียมพื้นที่สำหรับเก็บข้อมูลระบบของเรา

อ้างถึง
mkdir /var/docker/pg10 && cd /var/docker/pg10


7 ) สร้างไฟล์ docker-compose.yml ด้วยคำสั่ง

อ้างถึง
nano docker-compose.yml

โปรดระวังเรื่องการจัดย่อหน้าให้ตรงกัน

โค๊ด: [Select]
version : '2'
services :
pgsql:
  container_name: pgsql
  image: postgres:10.6-alpine
  ports:
    - "5432:5432"
  environment:
    - POSTGRES_PASSWORD=hosxp
    - POSTGRES_USER=hosxp
    - POSTGRES_DB=hosxp
  volumes:
    - ./data:/var/lib/postgresql
  restart: always
 

pgadmin:
  container_name: pgadmin
  image: fenglc/pgadmin4:python3.6-alpine
#   user : [email protected], passwd : admin

  ports:
    - "5050:5050"

8 ) ดำเนินการขึ้นระบบค้วยคำสั่งเดียว ซึ่งมันจะ Download โปรแกรมทั้งหมด และ config ให้เราพร้อมใช้งาน

อ้างถึง
docker-compose up -d

9 ) ทดสอบใช้ Navicat เชื่อมต่อ หรือ เข้า Browser => http://(ip เครื่อง):5050


ข้อมูลจะอยู่ใน /var/docker/pg10/data ปิดเครื่องแล้วไม่หาย

8
ในบางครั้งเปิดไฟล์งานเก่าที่ใช้รหัสภาษาไทยแบบ Windows 874 หรือ Tis-620 ใน MS Visual Studio Code (vscode)
ซึ่งปัจจุบันนิยมใช้รหัสแบบ UTF-8 ที่รองรับหลายภาษา ทำให้มองเห็นตัวอักษรภาษาไทยเพี้ยน อ่านไม่รู้เรื่อง

วิธ๊แก้ไข ให้ดูมุมขวาล่างของจอ มันจะแสดง Codepage ล่าสุดที่ใช้อยู่
ให้กด Reopen with Encoding แล้วเลือกรหัสภาษาให้ถูก

9
เคย Restore ฐานข้อมูลขนาด 300GB ใช้เวลาประมาณ 2  วัน

งานนี้ต้องหาวิธี จูน Server ดีๆ หน่อย

ไปค้น Google มาแปะเก็บไว้ใช้คราวต่อไป


อ้างถึง

mysql -u root -p

set global net_buffer_length=1000000; --Set network buffer length to a large byte number

set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number

SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays,errors and unwanted behaviour

source file.sql --Import your sql dump file

SET foreign_key_checks = 1; --Remember to enable foreign key checks when procedure is complete!

อีก  1 ตำรา

แก้ไข [ my.ini ] ใน ส่วน InnoDB

อ้างถึง

innodb_buffer_pool_size = 12G
# 60% - 70% ของขนาด RAM ในเครื่อง

innodb_log_buffer_size = 16M
# 16M or 32M

innodb_log_file_size = 3G
# 25% of buffer pool size

innodb_write_io_threads = 32
# 32 is fine, 64 is maximum

innodb_flush_log_at_trx_commit = 0


Restart Service แล้วทำการ Import ได้เลย

อย่าลืมเปลี่ยนคืนด้วยนะครับ

10
อ้างถึง
hostnamectl set-hostname (ชื่อใหม่)

[ /etc/cloud/cloud.cfg ]

อ้างถึง
preserve_hostname: true

[/etc/hosts]
อ้างถึง
127.0.0.1       localhost
127.0.1.1       ชื่อใหม่

12
การ restore ฐานข้อมูล

ต้องล้าง folder ข้อมูลของ mysql ทั้งหมด (/var/lib/mysql)

แบบรักษาต้นฉบับ
อ้างถึง

xtrabackup --copy-back --target-dir=/data/backup/  --datadir=/var/lib/mysql


แบบย้ายต้นฉบับไปทั้งก้อน (เร็วกว่ามาก)
อ้างถึง

xtrabackup --move-back --target-dir=/data/backup/  --datadir=/var/lib/mysql

จากนั้นก็ start mysql ทำงานได้เลย

13
ถ้าพื้นที่ใน server กำลังจะเต็ม จะทำอย่างไร ?

ทางแก้คือสร้าง NFS share พื้นที่ข้ามเครื่อง จากนั้นก็จะมี folder โล่งๆ ให้รับข้อมูล

ปกติการใช้ mysqldump จะมีข้อเสียคือ ระหว่าง backup ฐานข้อมูลจะถูกล็อคการบันทึก ซึ่งถ้าเป็นหลัก 10GB ขึ้นไป ต้องรอกันนาน

ทางออกคือใช้โปรแกรม Percona XtraBackup (https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html)

อ้างถึง
xtrabackup --backup  --target-dir=/data/backups --datadir=/var/lib/mysql

ฐานข้อมูลขนาด 250GB ใช้เวลาประมาณ 1 ชั่วโมง 30 นาที

จากนั้นต้องทำการ prepare ก่อนนำข้อมูลไป restore

อ้างถึง
xtrabackup --prepare --target-dir=/data/backups/

แล้วทำการ สำเนา /data/backup ไปเครื่องปลายทาง


14
เครื่อง Master มีหน้าที่เก็บข้อมูลหลัก ถ้ามีการ update ใดๆ จะเขียนลงเครื่องนี้ก่อน ส่วนถ้ามีการอ่านข้อมูล จะไล่ไปอ่านเครื่อง slave
การทำงานในเครื่อง slave ห้ามมีการเขียน แก้ไข เพิ่มข้อมูลเด็ดขาด ไม่งั้นจะได้ข้อมูลผิดพลาด

การสั่งให้เครื่อง  Master ยอมรับการดูดข้อมูลจากเครื่อง slave

อ้างถึง
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.12' IDENTIFIED BY 'repl1234';

เมื่อมีการเพิ่มเติมแก้ไขข้อมูลจะเกิด Log ขึ้นมาดังนี้

อ้างถึง
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      224 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

เครื่อง Slave ก็ให้ตั้งคำสั่งเกาะข้อมูลเครื่อง Master

อ้างถึง
CHANGE MASTER TO MASTER_HOST='192.168.1.1',
                        MASTER_USER='repl',
                        MASTER_PASSWORD='repl1234',
                        MASTER_LOG_FILE='mysql-bin.000001',
                        MASTER_LOG_POS=224;
Query OK, 0 rows affected (0.03 sec)

เราสามารถสั่งให้เริ่มปรับข้อมูลให้ตรงเครื่อง Master ด้วยคำสั่ง
อ้างถึง
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

เช็คสถานะเครื่อง slave ด้วยคำสั่ง

อ้างถึง
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

15
mysql-bin.000001 จะบันทึกร่องรอยของการแก้ไขเพิ่มเติมในฐานข้อมูล ซึ่งเครื่อง slave ก็จะอ่านไป update เครื่องตัวเองให้ตรงกับ Master
นอกจากนี้เครื่อง Master ก็ควรตั้งเวลาให้ Log ถูกลบอัตโนมัติภายในกี่วัน ซึ่งถ้าไม่ทำ อาจจะทำให้ Harddisk เต็มได้

[my.cnf]

อ้างถึง
[mysqld]
log-bin=mysql-bin
server-id=1
expire_logs_days=3

การลบ Log แบบ Manual ทำได้ด้วยคำสั่ง PURGE BINARY LOGS TO 'mysql-bin.03';
มันจะไล่ลบข้อมูลก่อนหน้าจนถึงไฟล์ที่เราระบุไว้ หรืออาจจะระบุเป็นวันก็ได้
PURGE BINARY LOGS BEFORE '2008-12-15 10:06:06';
ประโยชน์อีกอย่างของ bin log คือ ใช้แกะรอยความเปลี่ยนแปลงใน database ได้
mysqlbinlog binlog_files > newer_transaction.sql

หน้า: [1] 2 3 ... 18