9/29/2549

Dumpdatabase again

จากวันก่อนที่ได้ทดลองคำสั่ง mysqldump เพื่อสร้างความคุ้นเคย
พอวันใช้จริงได้เจอรูปแบบที่แตกต่างออกไป อึ้งไปนิดนึง
1. mysqldump -A -uroot -p | gzip -9c > /root/mis-all-db.gz
2. gzip -d mis-all-db.gz | mysql -uroot
พอลองทดสอบดูปรากฏว่าได้ข้อมูลมาไม่ครบ ข้อมูลที่ได้มาไม่เป็นปัจจุบันมากพอ
วันนี้ได้รับความช่วยเหลือจากวีร์ในการ dumpdatabase เพื่อให้ข้อมูลเป็นปัจจุบันมากที่สุด
สิ่งที่ทำก็คือ
1. drop database ก็คือการลบ database นั่นเอง
- mysql -uroot -p
- ใส่ password
- drop database databasemane;
หรือสั่งที่ shell คือ mysql -uroot -e 'drop database databasename;'
2. จากนั้นลอง dumpdatabase มาใหม่
- mysqldump -p -uroot mis > mis_only.sql
3. คัดลอกไปยังเครื่องปลายทาง
- scp source 'username@hostname:destination'
4. ทำการสร้าง database
- mysql -uroot -e 'create database databasename;'
5. นำข้อมูลที่ dump มาใส่ database ที่สร้างขึ้น
- mysql -uroot databasename < mis_only.sql
ปรากฏว่าได้ error
ERROR 1064 (42000) at line 2968: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for
the right syntax to use near 'tinyint(1) unsigned NOT NULL default '0',
chkdate datetime NOT NULL default '0' at line 4
จาก error ดังกล่าว
เริ่มต้นด้วยการตรวจสอบ version mysql ของทั้ง gentoo และ ubuntu
ง่าย ๆ แค่สั่ง mysql ตอนต้นของโปรแกรมจะบอกข้อมูลเกี่ยวกับ version
สั่ง dpkg -l | grep 'mysql-server' บน ubuntu
หรือสั่ง mysql -V ก็ได้ทั้ง Gentoo และ Ubuntu
พบว่าเป็น version ที่แตกต่างกันชัดเจน ซึ่งเดาว่าอาจจะมีบางคำสั่งที่เข้ากันไม่ได้ระหว่าง mysql4
กับ mysql5 แต่ก็ไม่แน่ใจนัก
ตอนที่สั่ง mysql -uroot mis < mis_only.sql แล้วมันมี error ออกมา
จาก error ที่ได้ ERROR 1064 (42000) at line 2968: You have an error in
your SQL syntax;check the manual that corresponds to your MySQL server version for the right syntax
คือ check เป็น reserved word แต่มีการใช้เป็นชื่อ field วิธีแก้คือใส่ quote คล่อม ชื่อ field ไว้

ก็เลยต้องเริ่มต้นกลับไป dumpdatabase อีกครั้ง โดยการเพิ่ม option -Q เข้าไป
ทำใหม่อีกครั้ง
mysqldump -Q -p -uroot mis > mis_only.sql
nana mis_only.sql ว่ามี quote หรือเปล่า
CREATE TABLE `mis_adviser` (
`teacher_id` int(6) NOT NULL default '0',
`stdcode` bigint(11) NOT NULL default '0',
`year` varchar(4) NOT NULL default ''

เป็นอันว่าใช้ได้
ก็เข้าสู่ขั้นตอนเดิม จากนั้นก็เช็คทางเว็บว่าข้อมูล update หรือยังเป็นอันเสร็จ

1 ความคิดเห็น:

ziddik::zdk กล่าวว่า...

Have fun!
Welcome to blogging world...

^^