2016-05-22 29 views
11

Anasistem veri hacmine sahip mysql-5.5 çalışan bir docker kabı var. Kapsayıcımı mysql-5.6'ya yükseltiyorum. Aynı ana bilgisayar hacmine sahip yeni bir kap başlıyorum. MySQL, mysql.user tablosunun çökmesi nedeniyle kapsayıcıda çöküyordu. Mysql veri dizinini docker kabında nasıl taşıyabilirim?

[ERROR] Fatal error: Can't open and lock privilege tables: 
Incorrect key file for table 'user'; try to repair it 
160523 12:04:13 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 

bunu düzeltmeye aşağıdaki çalıştı:

[email protected]# mysqld --skip-grant-tables; 
[email protected]# mysql -uroot -ppassword 
mysql> repair table user USE_FRM; 
+------------+--------+----------+--------------------------------------------------+ 
| Table  | Op  | Msg_type | Msg_text           | 
+------------+--------+----------+--------------------------------------------------+ 
| mysql.user | repair | info  | Key 1 - Found wrong stored record at 0   | 
| mysql.user | repair | info  | Found block that points outside data file at 184 | 
| mysql.user | repair | info  | Found block that points outside data file at 292 | 
| mysql.user | repair | info  | Found block that points outside data file at 296 | 
| mysql.user | repair | info  | Found block that points outside data file at 300 | 
| mysql.user | repair | info  | Found block that points outside data file at 304 | 
| mysql.user | repair | info  | Found block that points outside data file at 308 | 
| mysql.user | repair | info  | Found block that points outside data file at 312 | 
| mysql.user | repair | info  | Found block that points outside data file at 316 | 
| mysql.user | repair | info  | Found block that points outside data file at 340 | 
| mysql.user | repair | info  | Found block that points outside data file at 392 | 
| mysql.user | repair | info  | Found block that points outside data file at 396 | 
| mysql.user | repair | info  | Found block that points outside data file at 400 | 
| mysql.user | repair | info  | Found block that points outside data file at 404 | 
| mysql.user | repair | info  | Found block that points outside data file at 408 | 
| mysql.user | repair | info  | Found block that points outside data file at 412 | 
| mysql.user | repair | info  | Found block that points outside data file at 416 | 
| mysql.user | repair | info  | Found block that points outside data file at 420 | 
| mysql.user | repair | info  | Found block that points outside data file at 448 | 
| mysql.user | repair | info  | Found block that points outside data file at 452 | 
| mysql.user | repair | info  | Found block that points outside data file at 456 | 
| mysql.user | repair | info  | Found block that points outside data file at 460 | 
| mysql.user | repair | info  | Found block that points outside data file at 464 | 
| mysql.user | repair | info  | Found block that points outside data file at 468 | 
| mysql.user | repair | info  | Found block that points outside data file at 472 | 
| mysql.user | repair | info  | Found block that points outside data file at 500 | 
| mysql.user | repair | info  | Found block that points outside data file at 504 | 
| mysql.user | repair | info  | Found block that points outside data file at 508 | 
| mysql.user | repair | info  | Found block that points outside data file at 512 | 
| mysql.user | repair | info  | Found block that points outside data file at 516 | 
| mysql.user | repair | info  | Found block that points outside data file at 520 | 
| mysql.user | repair | info  | Found block that points outside data file at 524 | 
| mysql.user | repair | info  | Found block that points outside data file at 528 | 
| mysql.user | repair | info  | Found block that points outside data file at 556 | 
| mysql.user | repair | info  | Found block that points outside data file at 560 | 
| mysql.user | repair | info  | Found block that points outside data file at 564 | 
| mysql.user | repair | info  | Found block that points outside data file at 568 | 
| mysql.user | repair | info  | Found block that points outside data file at 572 | 
| mysql.user | repair | info  | Found block that points outside data file at 576 | 
| mysql.user | repair | info  | Found block that points outside data file at 580 | 
| mysql.user | repair | info  | Found block that points outside data file at 604 | 
| mysql.user | repair | info  | Found block that points outside data file at 608 | 
| mysql.user | repair | info  | Found block that points outside data file at 612 | 
| mysql.user | repair | info  | Found block that points outside data file at 616 | 
| mysql.user | repair | info  | Found block that points outside data file at 620 | 
| mysql.user | repair | info  | Found block that points outside data file at 624 | 
| mysql.user | repair | info  | Found block that points outside data file at 628 | 
| mysql.user | repair | info  | Found block that points outside data file at 632 | 
| mysql.user | repair | status | OK            | 
+------------+--------+----------+--------------------------------------------------+ 
49 rows in set (0.00 sec) 

Hata: Ben adımı/şifremi kullanarak MySQL sunucusuna giriş yapamıyorum. My mysql verilerimi nasıl yükseltmeliyim?

[email protected]# mysql -uroot -ppassword 
Warning: Using a password on the command line interface can be insecure. 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 2 
Server version: 5.6.30-0ubuntu0.14.04.1 (Ubuntu) 

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> exit; 
Bye 
[email protected]# ps -ef|grep mysql    
root  1509 31492 0 12:15 ?  00:00:00 grep --color=auto mysql 
mysql 31281 4823 0 12:06 ?  00:00:01 mysqld --skip-grant-tables --user=mysql 
[email protected]# kill -9 31281 
[email protected]# ps -ef|grep mysql 
root  1698 31492 0 12:16 ?  00:00:00 grep --color=auto mysql 
[email protected]# mysqld_safe & 
[1] 1700 
[email protected]# 160523 12:16:34 mysqld_safe Can't log to error log and syslog at the same time. Remove all --log-error configuration  options for --syslog to take effect. 
160523 12:16:34 mysqld_safe Logging to '/var/log/mysql/error.log'. 
160523 12:16:34 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql 
^C 
[email protected]# mysql -uroot -ppassword 
Warning: Using a password on the command line interface can be insecure. 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 
[email protected]# 

Referans:

MySQL Fatal error: Can't open and lock privilege tables: Incorrect file format 'user' https://bugs.mysql.com/bug.php?id=68385

+0

kullanarak başlatılamıyor: 'docker comtainer hala, 31281' -9 onu öldürmek veya kabı dışarı loged? –

+0

Konteyneri canlı, çünkü mysql benim CMD'm değil. Denetimci kullanarak tomcat gibi başka işlemler yürütüyorum. Bu yüzden CMD'm mysql'yi yapılandıran ve başlatan bir komut dosyasıdır. Onun docker konteyner ile ilgili bir sorun değil düşünüyorum. Referanslarda belirtildiği gibi, docker olmadan tekrarlanabilir. – Gangaraju

cevap

1

Sana mysql başlamadan önce mysql-upgrade çalıştırmak için dockerfile değiştirmeniz gerekir inanıyoruz. Sağladığınız referanslarda belirtildiği gibi onarmanız gerekebilir. Sadece bir kez çalıştırmanız gerekir, ardından dockerfile'dan kaldırabilirsiniz. (Ben veritabanı gerçekte ana dosya sisteminde depolanan ve docker monte edilir varsayalım.)

4

Sen 5.5 görüntü kullanılarak MySQL başlar ve

docker run --rm --link mysqld mysql:5.5 \ 
     mysqldump -h mysqld --all-databases > /your/host/machine/ 

karşı Mysqldump çalıştırmak Sonra kullanarak yeni bir kapsayıcı başlayabileceğini 5.6 görüntü ve komut kullanabilirsiniz sonrasında gerçekleşmektedir ne SQL dökümü

docker run -v /data/your_dump.sql:/docker-entrypoint-initdb.d/dump.sql mysql:5.6