|
|
|
สอบถามการนำเข้าและ การเอาออก ไฟล์ .sql ขนาดใหญ่ (100 MB) บน sever ด้วย command line ครับผม |
|
|
|
|
|
|
|
นำออกมาน่ะง่าย
เวลาเซฟไฟล์ กำหนดให้มันลงไปอยู่ใน folder ของ web site ที่สามารถ download ได้
แล้วใช้ browser download ได้เลย
ที่นี้การนำเข้า ต้องถามก่อนว่า เอาเข้ามาแล้วคุณจะทำอะไรกับมัน จะรันมัน อัตโนมัติหรืออะไร
|
|
|
|
|
Date :
2019-06-21 12:42:59 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แยก structure ออกจาก data
structure ไม่ยาวจะ query ได้เลย
ส่วน data ก็แยกเป็นแต่ละตาราง และใช้ fopen อ่านและคิวรี่ ทีละช่วง
อาจจะเช็คขนาดไฟล์ ดูก่อนทำงานก็ได้ ถ้าไม่ใหญ่เกินไป ก็อ่านทีเีดียวด้วย file_get_contents() ก็ได้
all structure
mysqldump -uroot -pxxxxxx --no-data dbname > schema.sql
export เฉพาะ data ตารางเดียว เหมาะที่จะทำกับ ตารางใหญ่ๆ
mysqldump --no-create-info -uroot -pxxxxxxx dbname tablename > "/webpath/sharefolder/tablename.sql"
export เฉพาะ data หลายตาราง เหมาะที่จะทำกับ ตารางเล็ก หลายตาราง
mysqldump --no-create-info -uroot -pxxxxxxx dbname table1 table2 table... > "/webpath/sharefolder/tablename.sql"
ก็วิเคราะเอาว่า จะทำแบบไหน ดี
|
ประวัติการแก้ไข 2019-06-21 14:15:38
|
|
|
|
Date :
2019-06-21 14:13:53 |
By :
Chaidhanan |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สุดยอดครับพี่ เดี๋ยวรอท่านอื่นมาแชร์
|
|
|
|
|
Date :
2019-06-21 15:04:36 |
By :
teedesign |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าแค่ร้อยเมก เป็น .sql ก็สั่งใหม่ให้มัน export .zip ไฟล์จะลดขนาดไปเยอะมาก แล้วยัดเข้าผ่าน phpmyadmin ของ control panel ได้
จริงๆตาม host ที่ใช้ (shared hosting) มันสามารถอัพโหลดได้ครั้งละสูงสุด ระดับ GB อยู่แล้วเป็นอย่างต่ำ. ที่ใช้อยู่หลายๆที่เห็นเป็นอย่างนี้นะ 2GB, 1GB แล้วแต่ ไม่เห็นต่ำกว่านี้.
กรณีใหญ่มากจริงๆ อาจติดต่อ admin ของทาง host ให้ช่วย upload ให้โดยอาจโยนไฟล์เข้า google drive, ftp ไปก่อน อะไรงี้.
แต่มักติดปัญหาคือไม่รู้เขาทำงานกันยังไงใช้เครื่องมืออะไร พวก utf-8 มีปัญหาอยู่เรื่อย เช่น emoticon ตัวอักษรที่เป็นภาพ มักจะหายไป. อันนี้ต้อง double check แล้วอาจให้เขาทำใหม่ให้มัน import แล้วอยู่.
กรณี import แบบ data ล้วน ตัวอย่างเช่น ผมทำ app อันหนึ่งแล้วมีระบบ backup, restore ให้. ก็ใช้วิธี query เขียนคำสั่ง INSERT ลงไฟล์เพื่อเอาไปใช้ import ได้ แล้วในขั้นตอนทำงานก็อาจแบ่งไปโดยใช้ ajax และการทำซ้ำอัตโนมัติช่วย.
เช่น เมื่อกด backup แล้วก็เริ่มวนทีละตาราง ในแต่ละตารางจะวนแต่ละ row ได้สูงสุด เอาสัก 100 แล้วสิ้นสุด
พอสิ้นสุดก็ response json success=true อะไรงี้
ทางฝั่ง client ก็ใช้ JS รอรับเลย พอ success เสร็จก็ดูว่าหมดหรือยัง
ถ้ายังก็เรียกฟังก์ชั่น ajax export ซ้ำอีก เริ่มที่ 101 ถึง 200 อะไรงี้
คล้ายๆการแบ่งหน้าน่ะครับ แล้วใช้ .done() ของ jquery ajax ตรวจแล้วเรียกซ้ำๆเรื่อยๆจนกว่าจะหมด จึงสั่งสุดท้ายให้ zip ทั้งหมดแล้วส่งลิ้งค์ download ให้.
ตอน restore, import ก็ทำหลักการเดียวกัน. วิธีนี้ผู้ใช้กดทีเดียวแล้วนั่งกระดิกเท้ารอยาวๆถ้าข้อมูลเยอะจัด แต่จะไม่มี timeout เพราะมันวนทีละน้อยๆและ auto ซ้ำๆด้วยตัวเอง.
|
|
|
|
|
Date :
2019-06-21 17:39:56 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|