Pesan kesalahan ini muncul ketika saya menggunakan ubuntu 16.04 dan mysql 5.7.19-0ubuntu0.16.04.1 terbaru dalam gambar Docker.
Apa yang bisa dilakukan untuk memperbaikinya?
Untuk mereproduksi kesalahan
Dapatkan
Dockerfile
:FROM ubuntu:16.04 RUN apt update RUN DEBIAN_FRONTEND=noninteractive apt install -y mysql-server
(juga tersedia di sini )
Bangun dan jalankan:
docker build -t mysqlfail . docker run -it mysqlfail tail -1 /var/log/mysql/error.log
akan ditampilkan log kesalahan berikut:
2017-08-26T11: 48: 45.398445Z 1 [Peringatan] root @ localhost dibuat dengan kata sandi kosong! Silakan pertimbangkan mematikan opsi --initialize-insecure.
Yang persis seperti yang kami inginkan: mysql tanpa kata sandi root yang ditetapkan.
Di masa lalu (ubuntu 14.04 / mysql 5.5) a
service mysql start
dimungkinkan. Sekarang jika Anda mencoba ini gagaldocker run -it mysqlfail service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [fail]
dan
/var/log/mysql/error.log
mengandung garis:2017-08-26T11: 59: 57.680618Z 0 [GALAT] Kesalahan fatal: Tidak dapat membuka dan mengunci tabel privilege: Mesin penyimpanan tabel untuk 'pengguna' tidak memiliki opsi ini
build log (untuk lengkap 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
kelanjutan yang aneh
Setelah percobaan sebagaimana diuraikan dalam upaya jawaban saya , saya membuat skrip shell yang melakukan a
select count(*)
kueri pada setiap tabel dalam ruang mysql tiga kali berturut-turut (karena percobaan menunjukkan bahwa pada beberapa tabel kueri akan gagal tepat dua kali :-().
Lalu a
mysql_upgrade
dan
service mysql restart
sudah dicoba. Dalam Dockerfile
skrip tersedia melalui
COPY mysqltest.sh .
Uji coba dengan skrip ini memberikan hasil yang aneh / gila.
Untuk
Docker environment
awal masih gagal[GALAT] Kesalahan fatal: Tidak bisa membuka dan mengunci tabel hak istimewa: Mesin penyimpanan tabel untuk 'pengguna' tidak memiliki opsi ini
Menjalankan skrip
sh mysqltest.sh root
dalam
docker environment
mengarah ke2017-08-27T09: 12: 47.021528Z 12 [ERROR] / usr / sbin / mysqld: Table './mysql/db' ditandai sebagai
macet dan harus diperbaiki 2017-08-27T09: 12: 47.050141Z 12 [KESALAHAN ] Tidak dapat memperbaiki tabel: mysql.db
2017-08-27T09: 12: 47.055925Z 13 [KESALAHAN] / usr / sbin / mysqld: Tabel './mysql/db' ditandai sebagai
macet dan harus diperbaiki 2017-08 -27T09: 12: 47.407700Z 54 [GALAT] / usr / sbin / mysqld: Tabel './mysql/proc' ditandai sebagai
macet dan harus diperbaiki 2017-08-27T09: 12: 47.433516Z 54 [GALAT] Tidak bisa ' t meja perbaikan: mysql.proc
2017-08-27T09: 12: 47.440695Z 55 [KESALAHAN] / usr / sbin / mysqld: Tabel './mysql/proc' ditandai sebagai
macet dan harus diperbaiki 2017-08-27T09: 12: 47.769485Z 81 [GALAT] / usr / sbin / mysqld: Table './mysql/tables_priv'ditandai sebagai macet dan harus diperbaiki
2017-08-27T09: 12: 47.792061Z 81 [GALAT] Tidak dapat memperbaiki tabel: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [GALAT] / usr / sbin / mysqld: Table './mysql/ tables_priv 'ditandai sebagai macet dan harus diperbaiki
2017-08-27T09: 12: 47.893741Z 99 [GALAT] / usr / sbin / mysqld: Table' ./mysql/user 'ditandai sebagai
macet dan harus diperbaiki 2017-08 -27T09: 12: 47.914288Z 99 [GALAT] Tidak dapat memperbaiki tabel: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [KESALAHAN] / usr / sbin / mysqld: Table './mysql/user' is ditandai sebagai macet dan harus diperbaiki
Apa yang terjadi di sini yang menyebabkan perilaku aneh ini?