サイト管理人Blog

cloudfreeで「さぁ始めましょう♪」

サーバーのデータベースのデータをローカルに入れる

2024-01-25 記載
概要 : サーバーのデータベースのデータをローカルに入れる
Keyword : Selenium, phpMyAdmin, インポート, エクスポート, SQL, VBA, Chrome

Laravelはローカルが正なので、サーバからファイルをもってくることはありませんが、データに関してはサーバからもらいたいときがあります。
SSHが使えたらmysqldumpでほいほいなのですが、あいにくcloudfreeでは使えません。外部からもつなげないので、普通にとりだすならphpMyAdminでエクスポートです。
それを自動化できるか、というトライで、いちおう成功しました。
しかしSelenium使用なのでローカル限定でUIを与えての自動処理です。

ポイントは
●cloudfreeのphpMyAdminはBASIC認証でログインできる
●phpMyAdminはゆったり操作しないと思い通りの処理にならない
●ファイル選択ダイアログへの値設定はクセがある
といったところです。

おおまかなフローは
●Step1.cloudfreeサーバのphpMyAdminにLoginしてテーブルlv_bbsのデータをエクスポート
●Step2.localのphpMyAdminにLoginしてテーブルlv_bbsのデータをインポート
です。

Seleniumで操作する場合、phpMyAdminよりもAdminerのほうが簡単そうだと、やってみたあとで思いましたが、とりあえずphpMyAdminで進めました。それとChromeの自動更新をとめたつもり(投稿はこちら)が自動更新されていてドライバーとバージョンがわずかに合わず苦労させられました。

やや脱線しますが
このポリシーは、Microsoft® Active Directory®ドメインに参加しているWindowsインスタンスでのみ使用できます。
と注意書きがあってコレのせいかなと。
戻って。


「わずか」という点がミスで、まったく動かないのではなくClickだけは失敗する、という挙動でした。ClickのかわりにTabを回してフォーカスをあててSpaceキーを叩く、で代用したら使えたりするので、それで対処しましたが、こんなこと本来はやってられません。
Selenium操作をEdgeがFirefoxに乗り換えてバージョン安定セット環境を作りたいと思いました。

https://cfsid_user:password@phpmyadmin-sv11.cloudfree.ne.jp/index.php
?route=/table/export&db=cfsid_dbname&table=table_name&single_table=true

URLが重要です。BASIC認証はスキーマとドメインの間にユーザー名とパスワードを挿入します。ブラウザで操作するとログイン確認みたいなプチなダイアログが表示されますが、Seleniumだとすんなりルート画面に遷移していました。
そのルート画面ですが、phpMyAdminは詳細にパラメータで指定できるようです。
db=…&table=…を指定して当該テーブルの操作画面を出しておきます。
なにも設定せずエクスポートしたSQLを受け入れるようにローカル側を整えれば簡単なのですが、TRUNCATE TABLE して データのみINSERTするSQLでエクスポートするように設定しました。(なので苦労した)
操作1: //input[@id=”radio_custom_export”] Click
操作2: ◎構造とデータ→◎データ (アコーディオン箇所のためかClickエラー)
操作3: 挿入前にテーブルを空にする をON
操作4: //form[@name=”dump”] の Submit は効きました。

『ファイルはどこにダウンロードされたの?』と探しました。
Environ(“USERPROFILE”) & “\Downloads\ フォルダに table_name.sql のファイル名で出力されていました。
以上でサーバdatabaseからTRUNCATEとINSERTのsqlを取得。
次にローカル。

ローカルのphpMyAdminはConfigでログインできるようにしているので、
?route=/database/import&db=cfsid_dbname
のパラメータのみをつけて開きます。

インポートファイルの参照でダイアログを開いてしまうと操作できなくなります。
//input[@id=”input_import_file”]のElementにファイルパスをSendkeysすれば設定されるようです。
操作1: //input[@id=”input_import_file”] → <フォルダ>\table_name.sql
操作2: //form[@name=”import”] Submit

以上です。各操作のあいだは1秒程度あけると無難です。あけないと失敗する個所もありました。

投稿へのコメントは コチラ(掲示板) へお願いします。

サイト管理人Blog