2016-05-22 26 views
11

Ho un contenitore docker su cui è in esecuzione mysql-5.5 con volume dati host. Sto aggiornando il mio contenitore su mysql-5.6. Sto avviando un nuovo contenitore con lo stesso volume host. MySQL si stava bloccando nel container a causa del crash della tabella mysql.user.Come si esegue la migrazione della directory dei dati mysql nel contenitore docker?

[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 

Ho provato quanto segue per risolvere questo:

[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) 

Errore: Non riesco ad accedere al server MySQL usando il mio nome utente/password. Qualche idea su come dovrei aggiornare i miei dati mysql?

[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]# 

Riferimento:

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

+0

Cosa succede dopo aver usato il comando: 'kill -9 31281', è ancora nel contenitore mobile o è uscito dal contenitore? –

+0

Il mio contenitore è vivo, perché mysql non è il mio 'CMD'. Sto eseguendo altri processi come tomcat usando supervisor. quindi il mio CMD è uno script che configura e avvia MySQL e quindi il supervisore si prende cura di. Sto pensando che non è un problema con il contenitore docker. Come menzionato nei riferimenti, può essere riproducibile senza finestra mobile. – Gangaraju

risposta

1

Credo che è necessario modificare la vostra dockerfile per eseguire mysql-upgrade prima di iniziare mysql. Anche se potrebbe essere necessario ripararlo come descritto nei riferimenti forniti. Dovresti solo eseguirlo una volta, quindi puoi rimuoverlo da dockerfile. (Presumo database è in realtà memorizzato sul file system host e montato nella finestra mobile.)

4

Si potrebbe iniziare MySQL utilizzando l'immagine del 5.5 ed eseguire mysqldump contro di essa

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

e quindi avviare un nuovo contenitore utilizzando l'immagine 5.6 e inizializzarla utilizzando il dump SQL

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