यह त्रुटि संदेश तब दिखाई देता है जब मैं एक डॉक छवि में ubuntu 16.04 और नवीनतम mysql 5.7.19-0ubuntu0.16.04.1 का उपयोग करता हूं।
इसे ठीक करने के लिए क्या किया जा सकता है?
त्रुटि को पुन: उत्पन्न करने के लिए
प्राप्त करें
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 [चेतावनी] रूट @ लोकलहोस्ट एक खाली पासवर्ड के साथ बनाया गया है! कृपया --initialize-insecure विकल्प को बंद करने पर विचार करें।
ठीक यही हम चाहते थे: एक 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 [ERROR] घातक त्रुटि: विशेषाधिकार तालिका नहीं खोल और बंद कर सकते हैं: 'उपयोगकर्ता' के लिए टेबल संग्रहण इंजन में यह विकल्प नहीं है
बिल्ड लॉग (पूर्ण के लिए 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 [ERROR] / usr / sbin / mysqld: Table './mysql/db' को दुर्घटनाग्रस्त के रूप में चिह्नित किया गया है और इसकी मरम्मत की जानी चाहिए
2017-08-08T09: 12: 47.050141Z 12 [ERROR ] टेबल की मरम्मत नहीं कर सका: mysql.db
2017-08-27T09: 12: 47.055925Z 13 [ERROR] / usr / sbin / mysqld: Table './mysql/db' को दुर्घटनाग्रस्त के रूप में चिह्नित किया गया है और इसकी मरम्मत
2017-08 की जानी चाहिए। -27T09: 12: 47.407700Z 54 [ERROR] / usr / sbin / mysqld: Table './mysql/proc' को दुर्घटनाग्रस्त के रूप में चिह्नित किया गया है और इसे
2017-08-08T09: 12: 47.433516Z 54 [ERROR] को फिर से जोड़ा जा सकता है। t मरम्मत की मेज: mysql.proc
2017-08-27T09: 12: 47.440695Z 55 [ERROR] / usr / sbin / mysqld: Table './mysql/proc' को दुर्घटनाग्रस्त के रूप में चिह्नित किया गया है और
2017-08-27T09 की मरम्मत की जानी चाहिए। 12: 47.769485Z 81 [ERROR] / usr / sbin / mysqld: तालिका './mysql/tables_priv'दुर्घटनाग्रस्त हो गया है और इसकी मरम्मत की जानी चाहिए
2017-08-27T09: 12: 47.792061Z 81 [ERROR] टेबल की मरम्मत नहीं कर सका: mysql.tables_priv
2017-08-27T09: 12: 47.798472Z 82 [ERROR] / usr / sbin / mysqld: Table '.mysql/ tables_priv 'दुर्घटनाग्रस्त के रूप में चिह्नित किया गया है और इसे
2017-08-27T09: 12: 47.893741Z 99 [ERROR] / usr / sbin / mysqld: Table' ./mysql-user 'के रूप में चिह्नित किया गया है जो दुर्घटनाग्रस्त हो गया है और इसकी मरम्मत
2017-08 में की जानी चाहिए। -27T09: 12: 47.914288Z 99 [ERROR] टेबल की मरम्मत नहीं कर सका: mysql.user
2017-08-27T09: 12: 47.920459Z 100 [ERROR] / usr / sbin / mysqld: Table'/mysql/user 'है। दुर्घटनाग्रस्त के रूप में चिह्नित और मरम्मत की जानी चाहिए
इस अजीब व्यवहार का कारण क्या है?