ラベル

Server (108) work (77) Idea (68) Car (31) PC (29) DAW (28) other (19) MakingWEBsite (18) 趣味 (18) health (13) CentOS (11) drupal (11) (9) android (4) スマホ (4) communication (3) drupal7 (3) hint (3) meno (3) モバイル (3) 歯医者 (3) 第二種電気工事士 (3) 英語 (3) PC Server (2) drupal8 (2) ms access (2) uwp C# (2) めし (2) 整備 (2) 音楽 (2) MIDI (1) diy (1) 会計 (1) 動画再生 (1) 生活 (1) 郵便 (1) 食べ物 (1)

2014年9月14日日曜日

windows コピーコマンド ディレクトリをタイムスタンプを含め完全にコピーする robocopy /copyall musql 5.6.12 InnoDB 破損

「タイムスタンプなどを完全にコピーをできる方法」は、真ん中より少し下。


Windows上で開発中のdrupalのmysqlのデータが壊れた。
まずい。正常時のバックアップが取ってない。
(結局いろいろとやったがInnoDBの回復はうまくいかなかった。ファイル自体が壊れたのかな。でも、全てのデータベースのテーブルが1142エラーになるということは、壊れたところがどこか大元の1ヶ所なのだろう。MyISAMならもう少し構造が簡単でうまくいきそうだけど、InnoDBはデータベースの移動をすると整合性がとれなくなるらしい。)


最初は、wampのランプが緑にならなくなったところから始まった。
この時点でmy.iniのmax_allowed_packet(クライアント(PHPなどmysqlを使っている方)からmysqlへ送れるパケット量)をもっと大きい数字に書き換えていれば、それで解決したかもしれなかった。
(今となってはそれが有効だったかどうかはわからない。この最大値は16Mbで、それ以上に設定をしても意味がないということだ。)

だが、あせって、あまり調べもしないうちにwampの上書きをしてしまった。
すると、wampのランプは正常に緑になったけど、
上書きをする以前のテーブルをmysqlが認識しなくなってしまった。

phpMyAdminでテーブルは表示されるが、中身が表示されない。
MySQLのコンソールを使って調べても同じ、
ERROR 1146 (42S02)がでる。
全てのデータベース、すべてのテーブルのリストは表示されるのに、そのフィールドを表示させようとするとそんなテーブルはないと言われてしまう。
概存データベースに新しく付け足したテーブルは正常に表示される。

具体的にはこんな感じ。データベース名"hoge"、テーブル名"users"を調べてみると・・・
mysql> use hoge;
mysql> show tables;
ここにはずらずらとテーブル名が表示される。
mysql> show fields from users;
ERROR 1146 (42S02): Table 'hoge.users' doesn't exist

Windowsのエクスプローラーで見ると、データ自体はちゃんとあり、壊れているようには思えない。
mysql-bin.*というファイルが178も作られていて、それだけで1.35gbもある。このファイルの数と大きさが原因のような気がする。


調べていくと
mysqlのデータが壊れてなければ新しく作ったmysqlのデータフォルダにぽん付け+αで復旧できそうだ。
まぁ、今となっては無理だろう。
いったんここでギブアップして、新しい環境を新規で作り直すが、解決方法があとで見つかるかもしれないから、これをコピーをして取っておくことにする。
その方法だが、

タイムスタンプなどを完全にコピーをできる方法を調べてみた。

Windowsコマンドプロンプトから
robocopy /copyall
でいけるらしい。

実際にやってみると、
C:\wamp\bin\mysq> robocopy mysql5.6.12 mysql5.6.12bup20140916\ /copyall
エラー : 監査管理のユーザー権利がありません。

管理者アカウントでログインしているのに何故だ?

と思ってその事について検索をかけるとadobeのwebサイトにに
「Windows では、コンピュータに管理者アカウントでログインしている場合でも、コンピュータを使用するユーザ全員に影響する変更がユーザによって行われるのを防止するため、通常の操作は標準アカウントと同じ権限で実行されています。
とあった。
知らなかった。
それをさけるために、管理者権限で操作する。
コマンドプロンプトを立ち上げるときに右クリック。
「管理者として実行」を左クリック。

あと、オプションが/copyallだけだとファイルしかコピーしない。
空フォルダを含めサブフォルダとファイル全部をコピーするには/Eオプションをつける。
C:\wamp\bin\mysq> robocopy mysql5.6.12 mysql5.6.12bup20140916\ /copyall /E
たぶんこれで大丈夫。

あと、robocopyの結果の表示のところでスキップって出てくるときがある。どういうときにそうなるのかと思ったけど、同じファイル、同じフォルダがあったときに、スキップするそうだ。

補足
小さいファイルはコピーをするのにすごく時間がかかる。
同一lan上の異なるpcにコピーをするときは、特にものすごく時間がかかる。
小さいファイルはzipなどでまとめたのちにコピーをするか、
TreeSizeFreeなどのソフトを使って、小さいファイルの多いフォルダを探して、削除できる小さいファイルは削除する。



0 件のコメント:

コメントを投稿