คำถามติดแท็ก mysql

MySQL ทุกรุ่น (ไม่ใช่ Microsoft SQL Server) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น mysql-5.7 หากเกี่ยวข้องกับคำถาม


3
SQL แบบไดนามิกใน MySQL จัดเก็บเป็นประจำ
ตามข้อ จำกัด ของรูทีนและทริกเกอร์ที่เก็บไว้ไม่สามารถใช้ไดนามิก sql ได้ (ข้อ จำกัด ถูกยกขึ้นสำหรับโพรซีเดอร์ที่เก็บในเวอร์ชัน 5.0.13 และใหม่กว่า) เหตุใดจึงมีข้อ จำกัด นี้ และทำไมต้องยกมันสำหรับขั้นตอน แต่ไม่ใช่ฟังก์ชั่นหรือทริกเกอร์?

5
มันไม่ฉลาดที่จะเรียกใช้การจำลองแบบบนเซิร์ฟเวอร์จริงหรือไม่?
ฉันใคร่ครวญการตั้งค่าการจำลองแบบ Master-Slave สำหรับฐานข้อมูลของฉัน เซิร์ฟเวอร์ทาสจะใช้สำหรับความซ้ำซ้อนและอาจเป็นเซิร์ฟเวอร์รายงาน อย่างไรก็ตามหนึ่งในปัญหาที่ใหญ่ที่สุดที่ฉันพบคือเราได้ใช้พลังงานอย่างเต็มประสิทธิภาพที่ดาต้าเซ็นเตอร์แล้ว ดังนั้นการเพิ่มเซิร์ฟเวอร์ทางกายภาพอื่นไม่ใช่ตัวเลือก เซิร์ฟเวอร์ฐานข้อมูลที่มีอยู่ของเรานั้นมีการใช้งานไม่เพียงพอเท่าที่ cpu (ค่าเฉลี่ยการโหลดไม่เคยสูงกว่า 1 ใน quad-core) ดังนั้นแนวคิดที่สำคัญคือการโยนในไดรฟ์ใหม่และเพิ่มหน่วยความจำเป็นสองเท่า (จาก 8GB ถึง 16) และเรียกใช้อินสแตนซ์ mysql ที่สองบนเครื่องทางกายภาพเดียวกัน แต่ละอินสแตนซ์จะมีดิสก์แยกต่างหากสำหรับฐานข้อมูล มีอะไรผิดปกติกับความคิดนี้หรือไม่? แก้ไข (ข้อมูลเพิ่มเติม): ฉัน (โชคดี) ไม่เคยมีอะไรเลวร้ายเกิดขึ้นพอที่จะลงเซิร์ฟเวอร์ แต่พยายามวางแผนล่วงหน้า แน่นอนว่าเรามีการสำรองข้อมูลทุกคืนที่เราสามารถกู้คืนได้ แต่ฉันคิดว่าการมีข้อมูลที่ซ้ำซ้อนในดิสก์แยกต่างหากจะให้วิธีแก้ปัญหาที่รวดเร็วกว่าถ้าไดรฟ์ของเซิร์ฟเวอร์หลักล้มเหลว (เห็นได้ชัดว่าไม่ใช่ถ้าเครื่องทั้งหมดหายไป) สำหรับด้านการรายงานตารางใด ๆ ที่เราจะรายงานออกมาก็คือ MyIsam ดังนั้นการอ่านแพง ๆ บนโต๊ะเดียวกันกับที่เขียนไว้สามารถทำให้ชะงักเซิร์ฟเวอร์ได้ การสันนิษฐานของฉันคือการมีเซิร์ฟเวอร์ทาสเพื่อรายงานว่าจะไม่ส่งผลกระทบต่อเซิร์ฟเวอร์หลักตราบใดที่เราขว้าง RAM เพียงพอ (เพราะ cpu โหลดยังไม่มีปัญหา)

2
วิธีที่เร็วที่สุดในการเปลี่ยนประเภทข้อมูลคีย์ดัชนีที่จัดทำตาราง 600GB จาก INT เป็น BIGINT
ฉันต้องการเปลี่ยนประเภทข้อมูลจาก INT เป็น BIGINT ในตาราง MySQL 600GB คอลัมน์มีดัชนีที่ไม่ซ้ำกัน ฉันอาจจะดีกับ INT ที่ไม่ได้ลงนาม แต่ฉันคิดว่าการเปลี่ยนแปลงนั้นมิฉะนั้น BIGINT จะเจ็บปวดเหมือนกัน เอ็นจิ้นของตารางคือ InnoDB อะไรจะง่ายขึ้น: แก้ไขตาราง โครงสร้างการคัดลอกและ INSERT INTO (SELECT *) ตารางการดัมพ์และการเปลี่ยนนิยามตารางไฟล์ดัมพ์ มีอะไรอีกไหม ปรับปรุง: ตามที่ร้องขอ MySQL เวอร์ชั่น 5.5.15 ไม่มีคีย์ต่างประเทศและสร้างตาราง: CREATE TABLE `tbl` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `created_at` datetime NOT NULL, `tid` bigint(20) …

1
คำสั่ง MySQL ทำการสืบค้นฐานข้อมูล MyISAM ทั้งหมด
ฉันจะขอบคุณถ้าใครสามารถช่วยฉันในสิ่งที่เป็นคำสั่งที่เหมาะสมใน MySQL เพื่อค้นหาฐานข้อมูลทั้งหมดที่มีเครื่องมือ "MyISAM" ฉันต้องแปลง DB & ทุกตารางจาก MyISAM เป็น InnoDB
13 mysql  innodb  myisam 

6
วิธีเพิ่มคอลัมน์ในตารางขนาดใหญ่ใน MySQL
ฉันเป็นนักพัฒนา PHP ดังนั้นอย่าเข้มงวด ฉันมีตารางขนาดใหญ่ ~ 5.5gb dump PM ของเราตัดสินใจที่จะสร้างคอลัมน์ใหม่เพื่อดำเนินการคุณสมบัติใหม่ ตารางคือ InnoDB ดังนั้นสิ่งที่ฉันลอง: เปลี่ยนตารางในหน้าจอพร้อมล็อคตาราง เอา ~ 30 ชั่วโมงและไม่มีอะไร ดังนั้นฉันแค่หยุดมัน ครั้งแรกที่ฉันทำผิดเพราะฉันไม่ได้จบการทำธุรกรรมทั้งหมด แต่ครั้งที่ 2 ไม่มีมัลติเลค copy to tmp tableสถานะเป็น เนื่องจากฉันต้องใช้การแบ่งพาร์ติชันสำหรับตารางนี้เราจึงตัดสินใจทำการดัมพ์เปลี่ยนชื่อและสร้างตารางด้วยชื่อเดียวกันและโครงสร้างใหม่ แต่การถ่ายโอนข้อมูลกำลังทำสำเนาอย่างเข้มงวด (อย่างน้อยฉันก็ไม่พบสิ่งอื่นใด) ดังนั้นฉันจึงเพิ่มการถ่ายโอนข้อมูลคอลัมน์ใหม่ด้วยsedและสอบถาม แต่มีข้อผิดพลาดแปลก ๆ เกิดขึ้น ฉันเชื่อว่ามันเกิดจากชุดอักขระ ตารางในไฟล์ UTF-8 และกลายเป็น ASCII sedสหรัฐอเมริกาหลังจากที่ ดังนั้นฉันจึงได้รับข้อผิดพลาด (ไม่ทราบคำสั่ง '\' ') จากข้อมูล 30% ดังนั้นนี่เป็นวิธีที่ไม่ดี ตัวเลือกอื่น ๆ ในการทำสิ่งนี้ให้สำเร็จและเพิ่มประสิทธิภาพความเร็ว (ฉันสามารถทำได้ด้วยสคริปต์ …
13 mysql  innodb 

1
ข้อความค้นหาช้าไม่ได้บันทึก
ฉันพยายามเปิดใช้งานการบันทึกแบบสอบถามช้าบนเซิร์ฟเวอร์ของเราเพื่อระบุแบบสอบถามใด ๆ ที่สามารถใช้การเพิ่มประสิทธิภาพ ฟังดูง่ายพอ แต่ไฟล์ของฉันไม่ได้ถูกเขียนลงไป ฉันไม่ได้รับข้อผิดพลาดหรืออะไรทำนองนั้นมันก็ดูเหมือนจะไม่ได้เข้าสู่การสืบค้นช้า ฉันจำได้ว่าต้องรีสตาร์ท mysql หลังจากเปลี่ยนแปลงการกำหนดค่าของฉัน ฉันใช้ MySQL Ver 5.1.61 นี่คือสิ่งที่ฉันมีใน my.cnf: slow-query-log=1 slow-query-log-file=/var/logs/my.slow.log long_query_time=1 ไฟล์ /var/logs/my.slow.log มี mysql ในฐานะเจ้าของ, นอกจากนี้เพื่อประโยชน์ในการดีบั๊กฉันให้อ่าน / เขียนทั้งหมดบนล็อกไฟล์ ฉันมี long_query_time ตั้งค่าเป็น 1 ในด้านบนเพราะฉันแค่ต้องการดูว่ามันทำงาน ฉันลองตั้งค่าให้ต่ำลง (เช่น 0.3) แต่ฉันยังไม่ได้บันทึกอะไรเลย ฉันรู้ว่าข้อความค้นหาที่แอปของฉันทำงานนั้นใช้เวลานานกว่า 1 วินาทีและฉันได้เรียกใช้ข้อความค้นหาโดยเจตนา ( SELECT sleep(10);) ในเทอร์มินัลเพื่อทำการทดสอบและบันทึกยังว่างเปล่า ฉันได้ดูเอกสารจากสิ่งที่ฉันเห็นว่ามันควรจะทำงานได้ ใครมีข้อเสนอแนะเกี่ยวกับสิ่งที่ฉันทำผิด? คำแนะนำใด ๆ ที่จะได้รับการชื่นชมขอบคุณมาก! แก้ไข: ตามที่ถามในความคิดเห็นที่ฉันวิ่งแบบสอบถาม: `SELECT …

4
มันจะเป็นการดีกว่าหรือที่จะแยกเคียวรีใหญ่ออกเป็นเคียวรีเล็ก ๆ หลายรายการ?
มีสถานการณ์ที่ต้องมีแบบสอบถามที่ใหญ่มากเข้าร่วมหลายตารางพร้อมกับคำสั่งย่อยเลือกในพวกเขาเพื่อสร้างผลลัพธ์ที่ต้องการ คำถามของฉันคือเราควรพิจารณาใช้การสืบค้นที่เล็กกว่าหลายข้อและนำการดำเนินการทางตรรกะไปสู่ชั้นแอปพลิเคชันโดยการสอบถาม DB ในการโทรมากกว่าหนึ่งครั้ง ตัวอย่างเช่นพิจารณาแบบสอบถามต่อไปนี้: SELECT * FROM `users` WHERE `user_id` IN (SELECT f2.`friend_user_id` FROM `friends` AS f1 INNER JOIN `friends` AS f2 ON f1.`friend_user_id` = f2.`user_id` WHERE f2.`is_page` = 0 AND f1.`user_id` = "%1$d" AND f2.`friend_user_id` != "%1$d" AND f2.`friend_user_id` NOT IN (SELECT `friend_user_id` FROM `friends` WHERE `user_id` = …

2
รับค่าคงที่สำหรับการเลือก
ฉันจำเป็นต้องทำSELECTแบบสอบถามที่ฉันได้รับค่าของฟิลด์ "เงิน" ฟิลด์นี้ไม่มีอยู่จริงในฐานข้อมูล ฉันต้องการคิวรีเพื่อส่งคืนฟิลด์นี้ด้วยค่าคงที่ ในกรณีนี้ค่าเป็น USD ฉันจะคืนค่าคงที่ในSELECTคำสั่งได้อย่างไร
13 mysql 

4
ไม่สามารถส่งออกข้อมูล MySQL ไปยังไฟล์
ฉันพยายามที่จะส่งออกข้อมูลจากตาราง MySQL ไปยังไฟล์ แต่ได้รับข้อผิดพลาดในการอนุญาต: $ pwd /home/dotancohen $ mkdir in $ chmod 777 in/ $ mysql -ugs -p mysql> USE someDatabase; mysql> SELECT * FROM data INTO OUTFILE '/home/dotancohen/in/data.csv'; ERROR 1045 (28000): Access denied for user 'gs'@'localhost' (using password: YES) mysql> หากไดเรกทอรีที่เป็นปัญหาถูก chmodded ไปที่ 777 แล้วทำไมผู้ใช้ MySQL ไม่สามารถเขียนไฟล์ได้? น่าสนใจพอฉันไม่สามารถเขียนถึง / …

2
MySQL CAST vs. CONVERT
สมมติว่าฉันมี VARCHAR (ซึ่งมีข้อมูลตัวเลข) ที่ฉันต้องการใช้สำหรับการคำนวณอย่างง่าย (เพิ่ม 10 ลงไป) ตามเอกสาร MySQL ของฟังก์ชั่น CASTฉันสามารถใช้ CAST หรือ CONVERT ได้ SELECT (CAST(field1 AS SIGNED)) + 10 FROM myTable; หรือ: SELECT (CONVERT(field1,SIGNED)) + 10 FROM myTable; ความแตกต่างระหว่าง CAST และ CONVERT ในแง่นี้คืออะไร? พวกเขาทั้งสองประสบความสำเร็จในสิ่งเดียวกันหรือไม่?
13 mysql 

1
MySQL Sharding กับ MySQL Cluster
เมื่อพิจารณาถึงประสิทธิภาพเท่านั้น MySQL Cluster สามารถเอาชนะข้อมูลที่กำหนดเองได้ซึ่งจะทำให้โซลูชัน MySQL แตกหักได้หรือไม่? sharding = การแบ่งพาร์ติชันในแนวนอน เมื่อฉันอ้างถึงการจัดเรียงฉันกำลังพิจารณาการแบ่งส่วนที่เกิดขึ้นในเลเยอร์แอปพลิเคชัน สำหรับเซิร์ฟเวอร์สองเครื่องอาจเป็น (key mod 2)
13 mysql  ndbcluster 

4
จำนวนที่เหมาะสมที่สุดของอินสแตนซ์ MySQL InnoDB Buffer Pool
ลักษณะเซิร์ฟเวอร์ ระบบ RAM ทั้งหมด: 8GB (ใช้งาน MySQL + สิ่งอื่นนอกเหนือจาก MySQL ในนั้นคือไม่ได้ทุ่มเทให้กับ MySQL) จำนวนคอร์ CPU: 6 ฉันมีข้อมูลในฐานข้อมูลประมาณ 2GB ฉันมี InnoDB Buffer Pool Size ตั้งไว้ที่ 4GB ไหนดีกว่า: Innodb Buffer Pool Instances ตั้งค่าเป็น 1 Innodb Buffer Pool Instances ตั้งค่าเป็น 2 (2GB ในแต่ละ)? Innodb Buffer Pool Instances ตั้งค่าเป็น 4 (แต่ละ 1GB ในแต่ละ)? Innodb Buffer …


2
มีการจัดการคีย์ auto_increment ใน INSERT อย่างไร (เลือก * จาก ... )
ฉันมีtable1และtable2ใน MySQL ทั้งสองมีหลักสำคัญauto_incrementid หากตาราง schemas ตรงกันและฉันจะINSERT INTO table1 (SELECT * FROM table2)เกิดอะไรขึ้นเกี่ยวกับแถวใหม่ที่แทรกเข้าไปtable1? พวกเขาเก็บidค่าเก่าของพวกเขาและสร้างความขัดแย้งเมื่อแถวจากtable1มีเหมือนกันidหรือไม่ ค่าใหม่ถูกสร้างขึ้นโดย auto_increment หรือไม่ มันขึ้นอยู่กับเครื่องมือจัดเก็บหรือล็อค?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.