トラブルシューティング
つまずきやすいポイントをカテゴリー別にまとめました。症状から原因と対処にたどり着けます。
バックアップ・復元で使う DB CLI のセットアップ手順は、OS 別の専用ページにまとめています:
接続
接続テストが失敗する
接続テストは TCP → SSH → TLS → 認証の4段階で順に検証し、失敗した段階とヒントを画面に表示します。まずはどの段階で止まったかを確認してください。
TCP で失敗する場合は、DB サービスの起動状態、ホスト名とポート番号、ファイアウォールの設定を確認してください。ネットワークの外から直接届かない DB には SSH 踏み台の設定が必要です。認証で失敗する場合は、ユーザー名とパスワードに加えて、MySQL では接続元ホストが許可されているか (ユーザーの Host 設定) も確認してください。
SSH トンネル経由で接続できない
秘密鍵は OpenSSH 形式と PEM 形式に対応しています。PuTTY の .ppk 形式はそのままでは使えないため、事前に OpenSSH 形式へ変換してください。
踏み台のユーザー名・パスワード・パスフレーズの入力ミスもよくある原因です。多段構成の場合は、各ホップの並び順が経路のとおりになっているかも確認してください。
SSL/TLS 証明書のエラーで接続できない
自己署名証明書のサーバーには、接続設定で CA 証明書を登録するか、「サーバー証明書を検証する」をオフにして接続してください。ホスト名の不一致は、証明書に含まれるホスト名 (SAN) と接続先の指定が一致しているかを確認します。有効期限切れはサーバー側での証明書の更新が必要です。
Amazon RDS や Azure Database など、TLS が必須の構成のマネージド DB には、接続設定で SSL を設定していなくても自動で TLS 接続を試みます。
スキーマ同期の実行
実行ボタンが押せない
選択中の差分に「要手動修正」の項目が含まれているか、接続ユーザーの権限が不足しています。理由は確認画面のアラートに表示されます。
「要手動修正」は、自動化すると危険な操作 (方言をまたぐ破壊的な変換など) を安全のために自動実行の対象から外したものです。生成された SQL の TODO コメントを参考に手動で適用するか、選択から外して残りの差分だけ実行してください。権限不足の場合は、表示されたメッセージに対応する権限を DB 管理者に付与してもらってください。
同期が途中で失敗した
SQL は1文ずつ実行され、失敗した時点で停止して結果を表示します。PostgreSQL / SQL Server / SQLite ではトランザクションで実行前の状態まで巻き戻ります。
MySQL / MariaDB はエンジンの仕様で DDL が1文ごとに暗黙コミットされるため、失敗した文より前の変更は残ります。この2つのエンジンでは確認画面に毎回警告が表示されるので、案内のとおり実行前バックアップを取っておいてください。取ってあれば履歴からすぐに復元できます。
UNIQUE や主キーの追加に失敗する
既存データに重複や NULL が含まれていると失敗します。多くのケースでは実行前のプリフライトチェックが違反件数を検出し、回避オプション (NULL を埋める補助 SQL など) を提示します。
MySQL / MariaDB での重複データの排除は安全に自動化できないため、回避オプションを提供していません。重複を手動で解消してから再実行してください。
バックアップと復元
バックアップ・復元がエラーになる
MySQL / MariaDB / PostgreSQL / SQL Server のバックアップと復元は、各 DB の公式 CLI (mysqldump、pg_dump、sqlcmd など) を使用します。CLI が見つからない、またはバージョンが古いことが失敗の代表的な原因です。
設定画面で各 CLI のパスを手動指定し、動作確認ボタンで疎通を確認できます。macOS では Dock や Finder から起動するとシェルの PATH を引き継がないことがありますが、アプリ側で自動補正しています。それでも見つからない場合は、パスの手動指定が確実です。
SQLite のバックアップ・復元が失敗する
対象の SQLite ファイルが他のプロセス (別の DB クライアントやクラウド同期ツールなど) に開かれている可能性があります。該当のアプリを閉じ、クラウド同期が完了してから再実行してください。
ファイルの読み書き権限が不足しているケースもあります。エラーメッセージが権限の問題を示している場合は、ファイルとフォルダのアクセス権を確認してください。
データ同期
データ同期が遅い
Amazon RDS などのマネージド MySQL では、サーバー側の local_infile が既定でオフのため、高速な一括ロードの代わりに複数行 INSERT へ自動的に切り替わります。結果は同じですが時間がかかります。サーバーのパラメータで local_infile をオンにすると高速になります。
また、同期はチャンク単位 (既定は10,000行、設定で変更可能) でコミットするため、行数の多いテーブルは数分かかることがあります。
異種 DB 間の同期で文字が「?」に置き換わった
同期先の文字セット (latin1 など) で表現できない文字が含まれる場合の挙動は、設定で選べます。既定は「そのテーブルを同期しない」で、「? に置換して同期」を選んでいた場合にこの症状になります。置換は元に戻せません。
同期先テーブルの文字セットを utf8mb4 などの表現力のあるものへ変更してから、同期し直すのが安全です。
ライセンス
別の端末でライセンスキーを有効化できない
1ライセンスで同時に有効化できる端末は1台です。元の端末のライセンス画面で「この端末を解放」を実行してから、新しい端末で有効化してください。
故障などで元の端末を操作できない場合は、サポート側で解放できます。
オフラインで使っていたら機能が制限された
ライセンスの有効性は、最後にオンラインで確認できた時点から7日間キャッシュされます。それを超えるとオンラインでの再確認が必要になります。ネットワークに接続した状態でアプリを起動し直してください。
「システム時刻の異常を検知しました」と表示される
システム時刻が過去に巻き戻されたことを検知した状態です。OS の時刻を正しく設定し (自動設定を推奨)、ネットワークに接続した状態で開き直すと解除されます。
MySQL などに接続しようとするとライセンス画面が表示される
無料モードで利用できるのは SQLite 接続です。MySQL / MariaDB / PostgreSQL / SQL Server への接続は、ライセンスの有効化で利用できるようになります。機能そのものに制限はありません。
アプリ本体
起動しない・動作がおかしい
詳細はログファイルに記録されています。macOS は ~/Library/Logs/DiffyPick/main.log、Windows は %APPDATA%\DiffyPick\logs\main.log にあります。お問い合わせの際にこのファイルを添付していただくと、調査がスムーズに進みます。
保存していた接続先が読み込めなくなった
接続情報のパスワード類は、OS のキーチェーン (macOS はキーチェーン、Windows はユーザー資格情報の保護機構) に保管された鍵で暗号化されています。OS の再インストール、別の端末や別の OS ユーザーへの移行、キーチェーンの初期化などでこの鍵にアクセスできなくなると、復号できなくなります。このときアプリは専用のエラー表示に切り替わり、既存データを誤って上書きしないように新規追加・編集・エクスポートを無効化して保護します (インポートだけは使えます)。
パスワード付きでエクスポートしておいた接続ファイルがあれば、「接続先のインポート」からそのまま復元でき、保護状態も自動的に解除されます。エクスポートファイルがない場合は、保存データの初期化が必要です。アプリを終了してから、macOS は ~/Library/Application Support/DiffyPick/app.json、Windows は %APPDATA%\DiffyPick\app.json を削除し、起動し直して接続先を登録し直してください (ライセンスキーの再入力が必要になることがあります)。環境を移行する前には、接続先のエクスポートをおすすめします。
起動時にキーチェーンへのアクセス許可を求められる (macOS)
接続情報の暗号鍵は macOS のログインキーチェーンに保管されており、アプリの更新内容によっては macOS がアクセスの確認を求めることがあります。
「常に許可」を選択してください。「拒否」を選ぶと鍵にアクセスできず、保存済みの接続先を読み込めない状態になります。誤って拒否した場合も、アプリを起動し直して「常に許可」を選べばそのまま復旧します。
ライセンスが未認証の状態に戻っていた
ライセンス情報も接続情報と同じ仕組みで暗号化されているため、OS の再インストールや環境の移行で鍵が変わると読み込めなくなり、未認証の表示に戻ることがあります。ライセンス自体が失効したわけではありません。
ライセンスキーをもう一度入力すれば復旧します。キーは購入時のメール、または Polar のカスタマーポータルで確認できます。有効化台数の上限エラーになる場合は、上の「別の端末でライセンスキーを有効化できない」の手順で元の端末を解放してください。
ここで解決しない場合は、FAQ もあわせてご確認ください。お手元にご購入済みの DiffyPick がある場合は、アプリのヘルプメニュー「サポートに問い合わせ」からご連絡ください。