ohaeey
1
การย้ายโฮสต์ จะทำยังไงให้ permission ของไฟล์ไม่เปลี่ยนแปลง
หรือไม่จำเป็นต้อง chmod ใหม่เวลาย้ายเสร็จแล้ว
ถ้าเรา ftp download ไฟล์ทั้งหมดมาพักไว้ในเครื่องก่อน
แล้วค่อย upload ทั้งหมดขึ้นไปยังโฮสต์ใหม่
ถ้าเครื่องที่พักไฟล์เป็น windows อย่างนี้จะต้อง permission จะเปลี่ยนใช่มั้ยครับ
แล้วถ้าเครื่องเราเป็น linux แล้ว permission จะเปลี่ยนมั้ย?
แค่คิดครับ ยังไมเคยทดลองทำ ท่านใดเคยย้ายแล้วช่วยบอกหน่อยครับ
ว่า permission จะเปลี่ยนไปหรือเปล่า
และวิธีไหนจะสะดวกที่สุดในการย้ายยกไซต์
มีข้อมูลทั้งหมดประมาณ 200 mb ครับ ไม่รวม database
ทุกครั้งที่คุณ upload files ขึ้นบน server ก็ควรที่จะทำการ chmod ใหม่ด้วยทุกครั้ง
สำหรับ server ที่เป็น windows จะต่างกันกับ linux, freebsd เพราะ ไม่สามารถ chmod ผ่านทาง ftp ได้ ต้องเข้าไปกำหนด folder permission ใน control panel ของเว็บไซต์แทน …ส่วนวิธีการย้ายโฮสแบบที่เร็วที่สุด ก็คือการ fpt ข้าม server กล่าวคือ ทำการย้ายข้อมูลจาก server หนึ่ง มายังอีก server หนึ่งเลยโดยไม่ต้อง download มาพักไว้ในเครื่องคอมของคุณ แต่ต้องหาโปรแกรม ftp ที่มีความสามารถในการรองรับการทำงานตามที่กล่าวมา แต่ถ้าหากหาไม่ได้ จะลองเข้าไปใช้บริการ NET2FTP ของ สยามเว็บโฮสดูก็ได้ค่ะ สามารถย้ายไฟล์ข้าม server ได้เลยค่ะ 
ohaeey
3
Site to Site Transfers (FXP) ผมเคยลองแล้วนะครับ ใช้ไม่ได้ครับ
รู้สึกว่า ftp server จะต้องรองรับด้วย
ซึ่งโฮสต์ที่ผมใช้อยู่ทำไม่ได้ครับ
ซึ่งโฮสต์ที่ผมใช้อยู่ทำไม่ได้ครับ
งั้นก็คงต้องใช้วิธีดั้งเดิมค่ะ คือ Download มาเก็บไว้ก่อน แล้วค่อย Upload ขึ้นไปใหม่ 
kke
5
แนะนำให้บีบเป็นไฟล์ tar.gz แล้วค่อย download มาจะเร็วกว่ากันเยอะ
ส่วน db ก็เช่นกัน dump เป็นไฟล์ .sql.tar.gz มา เมื่อมี 2 ไฟล์นี้แล้ว
ก็ upload ขึ้นโฮสใหม่แล้วก็แตกไฟล์ออกมา กับ dump db ก็เป็นอันเสร็จ
วิธีการสร้างไฟล์ tar.gz สามารถทำได้หลายช่องทาง ถ้าโฮสใหนทำไม่ได้ซักช่องทางก็หลีกเลี่ยงอย่าไปเช่าเขาเพราะมันลำบากเราเวลา backup
- แบบง่ายสุดคือผ่าน ssh ซึ่งส่วนมากปิดไว้ไม่ให้ใช้ จึงต้องใช้วิธีอื่นแทน
- run sh script ผ่าน cron ในกรณีมี cron ให้ใช้
- run sh script ผ่าน php ในกรณีที่ใช้คำสั่ง exec ได้
- ผ่าน backup/ftp ของ control panel (วิธีนี้ไม่ค่อยเวิร์ค)
B)
ohaeey
6
[quote]แนะนำให้บีบเป็นไฟล์ tar.gz แล้วค่อย download มาจะเร็วกว่ากันเยอะ
ส่วน db ก็เช่นกัน dump เป็นไฟล์ .sql.tar.gz มา เมื่อมี 2 ไฟล์นี้แล้ว
ก็ upload ขึ้นโฮสใหม่แล้วก็แตกไฟล์ออกมา กับ dump db ก็เป็นอันเสร็จ
วิธีการสร้างไฟล์ tar.gz สามารถทำได้หลายช่องทาง ถ้าโฮสใหนทำไม่ได้ซักช่องทางก็หลีกเลี่ยงอย่าไปเช่าเขาเพราะมันลำบากเราเวลา backup
- แบบง่ายสุดคือผ่าน ssh ซึ่งส่วนมากปิดไว้ไม่ให้ใช้ จึงต้องใช้วิธีอื่นแทน
- run sh script ผ่าน cron ในกรณีมี cron ให้ใช้
- run sh script ผ่าน php ในกรณีที่ใช้คำสั่ง exec ได้
- ผ่าน backup/ftp ของ control panel
SiamVPS
7
ที่ใหม่ ssh ได้ไหมครับ?
หากได้
ssh ไปที่ server ตัวใหม่
ใช้ ncftp ครับ ใช้ดีมาก
mget *
mget -R mydir1/ mydir2/ …

kke
8
ขอตัวอย่างการทำหน่อยได้มั้ยครับ ถ้าไม่เป็นการรบกวนจนเกินไปครับ
ผมลองแล้วตาม script นี้ มันใช้ไม่ได้ล่ะครับ
อาจจะเพราะมันไม่ถูกต้องก็ได้ ผมเขียนมันมามั่วๆ ถูกต้องรึเปล่าไม่รู้ เพราะไม่เคยทำ
อย่าลืมเรื่อง path ครับ
วิธีทดสอบง่ายๆว่า คำสั่ง exec ถูก disabled ไว้หรือไม่
<?php
echo "Running exec command
";
echo exec ("pwd");
echo "
Done.";
?>
- exec แสดงเฉพาะ output บรรทัดสุดท้าย หรือต้องเก็บ output ไว้ในตัวแปลเป็น array
ก็จะได้ผลลัพธ์ประมาณนี้ เราก็จะรู้ว่า path ของเวบเราเป็นอย่างไร
Running exec command
/var/www/html/phpscriptpath
Done.
เมื่อได้ path มาแล้วต่อมาเป็นตัวอย่างการใช้งาน โดยเขียน sh script เอาไว้
ไฟล์ backup.sh ตัวอย่างจะเก็บไว้ใน /home/username/bak
สร้าง folder และไฟล์ผ่าน ftp โดย set permission ให้ execute ได้
cd /home/username/bak
rm myfolder.tgz
rm mydb.tgz
mysqldump --add-drop-table -udbuser -pdbpass db_name > db_name.sql
tar -czf db_name.tgz db_name.sql
rm db_name.sql
cd /var/www/html
tar -czf /home/username/bak/mybackup.tgz myfolder
เรียกใช้ผ่านไฟล์ backup.php เก็บไว้ที่ใหนก็ได้ที่เรียกผ่าน http ได้
แนะนำให้เก็บไว้ใน protect dir
้http://mydomain.com/protectdir/backup.php
<?php
echo "Running backup command
<pre>";
passthru ("sh /home/username/bak/backup.sh");
echo "</pre>
Done.";
?>
- ใช้ passthru แทน exec เพื่อแสดงผลลัพธ์ออกมาโดยไม่ต้องใช้ตัวแปล array ให้ยุ่งยาก
คำสั่ง tar ข้างต้นไม่ได้ save file permission ไว้ด้วย
ถ้าต้องการ save file permission ให้เพิ่ม p เข้าไป
tar -czpf …
tar -xzpf …
<?php
echo "Running exec command
<pre>";
passthru ("tar --help");
echo "</pre>
Done.";
?>
สำหรับวิธีที่ 2 cron ก็ใช้คำสั่งตามนี้โดยไม่ต้องมี php ไฟล์เพิ่ม
sh /home/username/bak/backup.sh
สำหรับวิธีที่ 1 ssh ก็ใช้คำสั่งเหมือนข้อ 2 หรือจะเอาคำสั่งในไฟล์มาพิมพ์โดยตรงก็ได้
อีกเรื่องที่ต้องคำนึงถึงคือ การ run sh ผ่าน php (exec "sh …) กับการเรียกคำสั่งผ่าน php โดยตรง (exec "tar …)
ลองดูว่า file owner ที่ถูกสร้างขึ้นเป็นของเราหรือของ php ครับ
kke
9
เพิ่มเติมนิดครับ
วิธีดังกล่าวนอกจากใช้ในการย้ายโฮสแล้ว ยังใช้ในการ backup ข้อมูลประจำวันได้ด้วย
โดยถ้า cron ใช้ได้ ก็แค่สั่งให้ run sh script ทุก วัน/สัปดาห์ ตามต้องการ
หากไม่ได้ก็สั่งผ่าน php จะ backup เมื่อไหร่ก็เรียก backp.php
แล้วก็ ftp เข้าไปโหลดไฟล์มาเก็บไว้ในคอมเรา
หมายเหตุ อย่าลืมคำนึงถึงพื้นที่ว่างด้วยนะครับ
เช่นใช้ package 300M มีไฟล์+อื่นๆอยู่ 200M ว่าง 100M ต้องดูว่าไฟล์ tar ที่สร้างจะเกินที่ว่างหรือเปล่า
การสร้างไฟล์ tar แล้วโหลดผ่าน ftp จะเร็วกว่าโหลดเป็นไฟล์ย่อยๆประมาณ 3 ถึง >100 เท่าตัว
ยิ่งไฟล์เยอะยิ่งนานเพราะเวลา initial ไฟล์แต่ละไฟล์มันนาน
ประโยชน์อีกอย่างคือใช้ในการ backup db ขนาดใหญ่ๆ
เนื่องจากการ backup ผ่าน phpmyadmin จะทำไม่ได้เนื่องจาก memory exceed allowed quota คุณจะได้ไฟล์ขนาดไม่กี่ kb เปิดด้วย notepad ก็จะเจอข้อความแจ้ง error ในนั้นแทน sql statement
คำแนะนำที่คุณจะได้รับจากโฮสก็คือ แบ่งช่วง backup ครับ
แต่ถ้าคุณเจอว่ามีอยู่เพียง table เดียวที่มันใหญ่เกิน memory แล้ว ส่วน table อื่นๆ backup ได้ไม่มีปัญหา คุณก็จะต้องมานั่งแบ่งช่วง record ที่จะ backup ของ table นั้นๆอีกที ลองทำดูก็จะรู้ครับว่านรกมีจริง ยิ่งถ้ามีถึง 2-3 table แล้วล่ะก็ 
นี่เป็นกรณีการ backup & transfer โดยใช้ php ช่วย และไม่มี shell ผมเห็นว่าน่าสนใจดีครับ
ขอ PIN ไว้นะครับ เผื่อคนข้างหลังเข้ามาดูได้ ถ้าใช้งานได้ไม่ได้ยังไง รายงานด้วยก็ดีครับ
ขอบคุณครับ
ohaeey
11
ขอบคุณท่าน kke และท่านอื่นๆ มากๆ ครับ
คิดไว้แล้วว่าโพสต์ที่นี่ต้องมีอะไรดีๆ กลับมา
แล้วก็จริงๆ ด้วย
แล้วผมจะเอาไปทดลองทำดูนะครับ
ขอบคุณมากจริงๆ

kke
12
อ่านกันไวจังแฮะ เพิ่งโพสต์ไปตะกี้เอง มีเพิ่มเติมในข้อความข้างบนเล็กน้อย
นี่เป็นกรณีการ backup & transfer โดยใช้ php ช่วย และไม่มี shell ผมเห็นว่าน่าสนใจดีครับ
ขอ PIN ไว้นะครับ เผื่อคนข้างหลังเข้ามาดูได้ ถ้าใช้งานได้ไม่ได้ยังไง รายงานด้วยก็ดีครับ
ขอบคุณครับ
ยินดีครับ
ohaeey
13
อีกเรื่องที่ต้องคำนึงถึงคือ การ run sh ผ่าน php (exec "sh …) กับการเรียกคำสั่งผ่าน php โดยตรง (exec "tar …)
ลองดูว่า file owner ที่ถูกสร้างขึ้นเป็นของเราหรือของ php ครับ
ทดลองดูแล้วครับ ใช้งานได้ดีเลยครับ
file owner ของ mybackup.tgz เป็นของ apache ครับ

kke
14
[quote]อีกเรื่องที่ต้องคำนึงถึงคือ การ run sh ผ่าน php (exec "sh …) กับการเรียกคำสั่งผ่าน php โดยตรง (exec "tar …)
ลองดูว่า file owner ที่ถูกสร้างขึ้นเป็นของเราหรือของ php ครับ
ทดลองดูแล้วครับ ใช้งานได้ดีเลยครับ
file owner ของ mybackup.tgz เป็นของ apache ครับ
[/quote]
นอนไม่หลับ ลุกมาเล่นเนต
เมื่อ file owner ไม่ใช่ของเราแต่เป็น apache ดังนั้นเวลาแตกไฟล์แล้วไฟล์ owner ก็จะเป็นของ apache ด้วยเช่นกัน ต่างกับการใช้ ftp ซึ่ง owner จะเป็นของเรา
ปัญหาตรงนี้คงไม่มีผลกับการ backup/restore db
แต่ไฟล์ใน server ระหว่างที่เป็นของเรากับ apache อาจจะมีผลในการใช้งานแตกต่างกันบ้างเล็กน้อย โดยเฉพาะเรื่องของ permission
อย่างไรก็ดีเมื่อ upload ไฟล์และแตกออกมาแล้ว อาจขอให้ admin ช่วยทำการเปลี่ยน file owner ให้เป็นของเราภายหลังก็ได้
ohaeey
15
ครับ ลองแตกไฟล์ออกมาแล้วครับ เป็น apache จริงๆ ด้วย 
แต่ไม่เป็นไรครับ วิธีนี้ถือว่าเป็นวิธีที่น่าสนใจวิธีหนึ่ง
อย่างน้อยก็สะดวกมากเวลา backup ข้อมูล
ขอบคุณในคำแนะนำต่างๆ ครับ 
อ้อ… แล้วถ้ารันจาก crontab ล่ะครับ
file owner จะเป็นของใคร ?
ตอนนี้ยังไม่กล้าลอง ต้องไล่ลบไฟล์ทิ้งก่อน
ลบจาก ftp ก็ไม่ได้เพราะเป็นไฟล์ของ apache
ต้องเป็น script ลบ

ง่วงแล้ว ไว้ต่อวันหลัง
kke
16
ถ้าใช้ cron จะเป็น owner เราเองครับเพราะไม่ได้ผ่าน php
cpanel กับ plesk มีให้ใช้ (ถ้าไม่ได้ถูกปิดไว้)
ensim ไม่มีให้ใช้
และทั้ง 3 ตัวมี ssh ให้ใช้แต่หลายๆโฮสมักจะปิดไว้เสมอ ในขณะที่โฮสเมืองนอกมักจะเปิดให้ใช้ อาจจะเป็นเพราะของเขามีคนนั่งเฝ้าตลอดมั้งเลยกล้าเปิด
…
และทั้ง 3 ตัวมี ssh ให้ใช้แต่หลายๆโฮสมักจะปิดไว้เสมอ ในขณะที่โฮสเมืองนอกมักจะเปิดให้ใช้ อาจจะเป็นเพราะของเขามีคนนั่งเฝ้าตลอดมั้งเลยกล้าเปิด
host เมืองนอก 5 รายที่ผมเคยใช้ มีอยู่รายเดียวที่ยอมเปิดครับ ตอนนี้อาจเปลี่ยนไปยังไงไม่ทราบแล้ว
iannnnn
18
เข้ามาอ่านเป็นความรู้เช่นกัน
ขอบคุณสำหรับคำถามและคำตอบครับ
เข้ามาอ่านเป็นความรู้เช่นกัน
ขอบคุณสำหรับคำถามและคำตอบครับ
:lol: แอนแห่ง f0nt.com มาถึงที่นี่เลยหรือนี่ ทักทาย ทักทาย