Thông báo lỗi này hiển thị khi tôi sử dụng Ubuntu 16.04 và mysql 5.7.19-0ubfox0.16.04.1 mới nhất trong hình ảnh Docker.
Có thể làm gì để khắc phục điều này?
Để tái tạo lỗi
Nhận được
Dockerfile
:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
(cũng có sẵn ở đây )
Xây dựng và chạy:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log
sẽ được hiển thị nhật ký lỗi sau:
2017-08-26T11: 48: 45,398445Z 1 [Cảnh báo] root @ localhost được tạo với mật khẩu trống! Vui lòng xem xét tắt tùy chọn --initialize-không an toàn.
Đó chính xác là những gì chúng tôi muốn: một mysql chưa có mật khẩu gốc được đặt.
Trong quá khứ (ubfox 14.04 / mysql 5.5), điều
service mysql start
này là có thể. Bây giờ nếu bạn thử nó, nó thất bạidocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]
và
/var/log/mysql/error.log
chứa một dòng:2017-08-26T11: 59: 57.680618Z 0 [LRI] Lỗi nghiêm trọng: Không thể mở và khóa bảng đặc quyền: Công cụ lưu trữ bảng cho 'người dùng' không có tùy chọn này
xây dựng nhật ký (cho hoàn thành 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
tiếp tục kỳ lạ
Sau khi thử nghiệm như được nêu trong nỗ lực trả lời của tôi , tôi đã tạo một tập lệnh shell thực hiện một
select count(*)
truy vấn trên mỗi bảng trong không gian mysql ba lần liên tiếp (vì các thử nghiệm cho thấy trên một số bảng, truy vấn sẽ thất bại chính xác hai lần :-().
Sau đó, một
mysql_upgrade
và
service mysql restart
được thử. Trong Dockerfile
kịch bản được cung cấp qua
COPY mysqltest.sh .
Các thử nghiệm với kịch bản này cho kết quả kỳ lạ / điên rồ.
Để
Docker environment
bắt đầu vẫn thất bại[ERROR] Lỗi nghiêm trọng: Không thể mở và khóa các bảng đặc quyền: Công cụ lưu trữ bảng cho 'người dùng' không có tùy chọn này
Chạy kịch bản
sh mysqltest.sh root
trong
docker environment
dẫn đến2017-08-27T09: 12: 47.021528Z 12 [ERROR] / usr / sbin / mysqld: Bảng './mysql/db' được đánh dấu là bị hỏng và cần được sửa chữa
2017-08-27T09: 12: 47.050141Z 12 [ERROR ] Không thể sửa chữa bảng: mysql.db
2017-08-27T09: 12: 47.055925Z 13 [ERROR] / usr / sbin / mysqld: Bảng './mysql/db' được đánh dấu là đã bị hỏng và cần được sửa chữa
2017-08 -27T09: 12: 47.407700Z 54 [ERROR] / usr / sbin / mysqld: Bảng './mysql/proc' được đánh dấu là bị hỏng và cần được sửa chữa
2017-08-27T09: 12: 47.433516Z 54 [ERROR] Bảng sửa chữa: mysql.proc
2017-08-27T09: 12: 47.440695Z 55 [ERROR] / usr / sbin / mysqld: Bảng './mysql/proc' được đánh dấu là bị hỏng và cần được sửa chữa
2017-08-27T09: 12: 47.769485Z 81 [LRI] / usr / sbin / mysqld: Bảng './mysql/tables_priv'được đánh dấu là bị hỏng và cần được sửa chữa
2017-08-27T09: 12: 47.792061Z 81 [ERROR] Không thể sửa chữa bảng: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [ERROR] / usr / sbin / mysqld: Bảng './mysql/ frames_priv 'được đánh dấu là đã bị hỏng và cần được sửa chữa
2017-08-27T09: 12: 47.893741Z 99 [ERROR] / usr / sbin / mysqld: Bảng' ./mysql/user 'được đánh dấu là bị hỏng và nên được sửa chữa
2017-08 -27T09: 12: 47.914288Z 99 [ERROR] Không thể sửa chữa bảng: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [ERROR] / usr / sbin / mysqld: Bảng './mysql/user' là đánh dấu là bị hỏng và cần được sửa chữa
Điều gì đang xảy ra ở đây để gây ra hành vi kỳ lạ này?