2016-05-22 11 views
11

私はホストデータボリュームを持つmysql-5.5を実行しているドッカーコンテナを持っています。コンテナをmysql-5.6にアップグレードしています。私は同じホストボリュームを持つ新しいコンテナを開始しています。 mysql.userテーブルのクラッシュのために、MySQLがコンテナ内でクラッシュしていました。dockerコンテナのmysqlデータディレクトリを移行するにはどうすればいいですか?

[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 

私はそれを解決するには、次の試してみました:私は私のユーザー名/パスワードを使用してMySQLサーバにログインすることはできません :

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

エラー。私の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]# 

参考:

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

+0

コマンド: 'kill -9 31281'を使用した後は、それはまだドッカーのコンテナに残っているのですか、コンテナからログアウトしますか? –

+0

mysqlが私の 'CMD'ではないので、私のコンテナは生きています。私は監視員を使ってtomcatのような他のプロセスを実行しています。だから、私のCMDは、mysqlを設定して起動するスクリプトであり、その後スーパーバイザが処理します。私はそれがドッカーコンテナの問題ではないと考えています。参考文献で述べたように、それはドッカーなしで再現可能である。 – Gangaraju

答えて

1

私はMySQLを起動する前にmysql-upgradeを実行するために、あなたのdockerfileを変更する必要があると考えています。あなたが提供した参考文献に記載されているように修理する必要があるかもしれませんが。一度実行するだけで、dockerfileから削除することができます。 (私は、データベースが実際にホストファイルシステムに保存されているとドッキングウィンドウに搭載されていると仮定します。)

4

あなたは5.5の画像を使用してMySQLを起動して

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

に対してmysqldumpを実行し、使用して新しいコンテナを開始することができます5.6イメージを作成し、SQLダンプを使用して初期化する

docker run -v /data/your_dump.sql:/docker-entrypoint-initdb.d/dump.sql mysql:5.6 
関連する問題