วิธีตรวจสอบตารางทั้งหมดในฐานข้อมูลในครั้งเดียว?
แทนที่จะพิมพ์คำค้นหาcheck table ''tablename'';
สำหรับตารางทั้งหมดทีละตาราง
มีคำสั่งง่ายๆเหมือนcheck all
หรืออะไรแบบนั้นไหม?
วิธีตรวจสอบตารางทั้งหมดในฐานข้อมูลในครั้งเดียว?
แทนที่จะพิมพ์คำค้นหาcheck table ''tablename'';
สำหรับตารางทั้งหมดทีละตาราง
มีคำสั่งง่ายๆเหมือนcheck all
หรืออะไรแบบนั้นไหม?
คำตอบ:
จากบรรทัดคำสั่งคุณสามารถใช้:
mysqlcheck -A --auto-repair
คำสั่งคือ:
mysqlcheck -u root -p --auto-repair --check --all-databases
คุณต้องระบุรหัสผ่านเมื่อถูกถาม
หรือคุณสามารถเรียกใช้รหัสนี้ได้ แต่ไม่แนะนำเนื่องจากรหัสผ่านเขียนเป็นข้อความที่ชัดเจน:
mysqlcheck -u root --password=THEPASSWORD --auto-repair --check --all-databases
ใช้แบบสอบถามต่อไปนี้เพื่อพิมพ์REPAIR
สถิติ SQL สำหรับตารางทั้งหมดภายในฐานข้อมูล:
select concat('REPAIR TABLE ', table_name, ';') from information_schema.tables
where table_schema='mydatabase';
mydatabase
หลังจากนั้นคัดลอกแบบสอบถามทั้งหมดและดำเนินการได้ใน
หมายเหตุ: แทนที่mydatabase
ด้วยชื่อ DB ที่ต้องการ
ไม่จำเป็นต้องพิมพ์รหัสผ่านเพียงใช้คำสั่งใด ๆ ต่อไปนี้ (อธิบายด้วยตนเอง):
mysqlcheck --all-databases -a #analyze
mysqlcheck --all-databases -r #repair
mysqlcheck --all-databases -o #optimize
คำสั่งต่อไปนี้ใช้ได้กับฉันโดยใช้พรอมต์คำสั่ง (ในฐานะผู้ดูแลระบบ) ใน Windows:
mysqlcheck -u root -p -A --auto-repair
เรียกใช้ mysqlcheck กับผู้ใช้รูทแจ้งรหัสผ่านตรวจสอบฐานข้อมูลทั้งหมดและซ่อมแซมตารางที่เสียหายโดยอัตโนมัติ
ไม่มีคำสั่งเริ่มต้นในการทำเช่นนั้น แต่คุณสามารถสร้างโพรซีเดอร์เพื่อทำงานได้ มันจะวนซ้ำไปตามแถวinformation_schema
และเรียกREPAIR TABLE 'tablename';
ทุกแถว CHECK TABLE
ยังไม่รองรับงบที่เตรียมไว้ นี่คือตัวอย่าง (แทนที่ MYDATABASE ด้วยชื่อฐานข้อมูลของคุณ):
CREATE DEFINER = 'root'@'localhost'
PROCEDURE MYDATABASE.repair_all()
BEGIN
DECLARE endloop INT DEFAULT 0;
DECLARE tableName char(100);
DECLARE rCursor CURSOR FOR SELECT `TABLE_NAME` FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA`=DATABASE();
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET endloop=1;
OPEN rCursor;
FETCH rCursor INTO tableName;
WHILE endloop = 0 DO
SET @sql = CONCAT("REPAIR TABLE `", tableName, "`");
PREPARE statement FROM @sql;
EXECUTE statement;
FETCH rCursor INTO tableName;
END WHILE;
CLOSE rCursor;
END
ฉันชอบสิ่งนี้สำหรับการตรวจสอบง่ายๆจากเปลือก:
mysql -p<password> -D<database> -B -e "SHOW TABLES LIKE 'User%'" \
| awk 'NR != 1 {print "CHECK TABLE "$1";"}' \
| mysql -p<password> -D<database>
mysql -ss
เพื่อสร้างชื่อคอลัมน์ที่ละเว้นจากเอาต์พุตซึ่งจะอนุญาตให้ลบออกNR != 1
จากรหัสของคุณ
สำหรับโฮสต์ plesk สิ่งหนึ่งที่ควรทำ: (ทั้งคู่ทำเหมือนกัน)
mysqlrepair -uadmin -p$(cat /etc/psa/.psa.shadow) -A
# or
mysqlcheck -uadmin -p$(cat /etc/psa/.psa.shadow) --repair -A
คุณอาจต้องใช้ชื่อผู้ใช้และรหัสผ่าน:
mysqlcheck -A --auto-repair -uroot -p
คุณจะได้รับแจ้งให้ใส่รหัสผ่าน
mysqlcheck -A --auto-repair -uroot -p{{password here}}
หากคุณต้องการใส่ cron แต่รหัสผ่านของคุณจะปรากฏเป็นข้อความธรรมดา!
หากตารางที่เสียหายยังคงอยู่หลังจากนั้น
mysqlcheck -A --auto-repair
ลอง
mysqlcheck -A --auto-repair --use-frm