ข้อความแสดงข้อผิดพลาดนี้ปรากฏขึ้นเมื่อฉันใช้ ubuntu 16.04 และ mysql ล่าสุด 5.7.19-0ubuntu0.16.04.1 ในอิมเมจ Docker
จะแก้ไขอะไรได้บ้าง?
เพื่อทำซ้ำข้อผิดพลาด
รับ
Dockerfile
:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
(มีที่นี่ด้วย )
สร้างและเรียกใช้:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log
จะแสดงบันทึกข้อผิดพลาดต่อไปนี้:
2017-08-26T11: 48: 45.398445Z 1 [คำเตือน] root @ localhost ถูกสร้างขึ้นด้วยรหัสผ่านที่ว่างเปล่า! โปรดพิจารณาปิดตัวเลือก - เริ่มต้นที่ไม่ปลอดภัย
ซึ่งเป็นสิ่งที่เราต้องการ: mysql ที่ยังไม่ได้ตั้งรหัสผ่านรูท
ในอดีต (Ubuntu 14.04 / mysql 5.5) เป็น
service mysql start
ไปได้ ตอนนี้ถ้าคุณลองสิ่งนี้มันจะล้มเหลวdocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]
และ
/var/log/mysql/error.log
มีบรรทัด:2017-08-26T11: 59: 57.680618Z 0 [ข้อผิดพลาด] ข้อผิดพลาดร้ายแรง: ไม่สามารถเปิดและล็อคตารางสิทธิ์: เครื่องมือจัดเก็บตารางสำหรับ 'ผู้ใช้' ไม่มีตัวเลือกนี้
สร้างบันทึก (สำหรับสมบูรณ์Dockerfile
)
Sending build context to Docker daemon 2.56kB
Step 1/4 : FROM ubuntu:16.04
---> ebcd9d4fca80
...
Step 4/4 : RUN service mysql start
---> Running in 5b899739d90d
* Starting MySQL database server mysqld
...fail!
The command '/bin/sh -c service mysql start' returned a non-zero code: 1
ความต่อเนื่องแปลก ๆ
หลังจากการทดลองตามที่ระบุไว้ในคำตอบของความพยายามของฉันฉันสร้างเชลล์สคริปต์ที่ทำ
select count(*)
แบบสอบถามในแต่ละตารางในพื้นที่ mysql สามครั้งในแถว (เนื่องจากการทดลองแสดงให้เห็นว่าในบางตารางแบบสอบถามจะล้มเหลวสองครั้ง :-()
จากนั้น
mysql_upgrade
และ
service mysql restart
พยายามแล้ว ในDockerfile
สคริปต์มีให้บริการผ่านทาง
COPY mysqltest.sh .
การทดลองกับสคริปต์นี้ให้ผลลัพธ์แปลก ๆ
สำหรับการ
Docker environment
เริ่มต้นยังคงล้มเหลว[ข้อผิดพลาด] ข้อผิดพลาดร้ายแรง: ไม่สามารถเปิดและล็อคตารางสิทธิ์: เครื่องมือจัดเก็บตารางสำหรับ 'ผู้ใช้' ไม่มีตัวเลือกนี้
เรียกใช้สคริปต์
sh mysqltest.sh root
ในสิ่งที่
docker environment
นำไปสู่2017-08-27T09: 12: 47.021528Z 12 [ข้อผิดพลาด] / usr / sbin / mysqld: ตาราง './mysql/db' ถูกทำเครื่องหมายว่าขัดข้องและควรได้รับการซ่อมแซม
2017-08-27T09: 12: 47.050141Z 12 [ERROR ] ไม่สามารถซ่อมแซมตาราง: mysql.db
2017-08-27T09: 12: 47.055925Z 13 [ข้อผิดพลาด] / usr / sbin / mysqld: ตาราง './mysql/db' ถูกทำเครื่องหมายว่าขัดข้องและควรซ่อมแซม
2017-08 -27T09: 12: 47.407700Z 54 [ข้อผิดพลาด] / usr / sbin / mysqld: ตาราง './mysql/proc' ถูกทำเครื่องหมายว่าขัดข้องและควรได้รับการซ่อมแซม
2017-08-27T09: 12: 47.433516Z 54 [ERROR] ไม่สามารถ ' ตารางซ่อมแซม t: mysql.proc
2017-08-27T09: 12: 47.440695Z 55 [ข้อผิดพลาด] / usr / sbin / mysqld: ตาราง './mysql/proc' ถูกทำเครื่องหมายว่าขัดข้องและควรซ่อมแซม
2017-08-27T09: 12: 47.769485Z 81 [ข้อผิดพลาด] / usr / sbin / mysqld: ตาราง './mysql/tables_priv'ถูกทำเครื่องหมายว่าผิดพลาดและควรได้รับการซ่อมแซม
2017-08-27T09: 12: 47.792061Z 81 [ข้อผิดพลาด] ไม่สามารถซ่อมแซมตาราง: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [ข้อผิดพลาด] / usr / sbin / mysqld: ตาราง '/mysql/ tables_priv 'ถูกทำเครื่องหมายว่าล้มเหลวและควรซ่อมแซม
2017-08-27T09: 12: 47.893741Z 99 [ข้อผิดพลาด] / usr / sbin / mysqld: ตาราง' ./mysql/user 'ถูกทำเครื่องหมายว่าผิดพลาดและควรได้รับการซ่อมแซม
2017-08 -27T09: 12: 47.914288Z 99 [ข้อผิดพลาด] ไม่สามารถซ่อมแซมตาราง: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [ข้อผิดพลาด] / usr / sbin / mysqld: ตาราง './mysql/user' คือ ทำเครื่องหมายว่าผิดพลาดและควรได้รับการซ่อมแซม
เกิดอะไรขึ้นที่นี่เพื่อทำให้เกิดพฤติกรรมแปลก ๆ นี้?