###前提・実現したいこと
自身のPCに入っているMySQLのデータベースにGoogle Colaboratoryから接続したいです。
方法がわかる方がいらっしゃいましたら教えて頂きたいです。
###自分の認識
上記のことを実現するために、私の認識では、以下の2つのアプローチがどちらかがよいのかなと考えています。
0. MySQLを外部から接続できるようにし、Google ColaboratoryからPymysql等で接続する。
0. Google DriveにMySQLのデータベースをアップロードし、何らかの手法でアクセスする。
2番に関しては具体的な手法がイメージできなかった為、1番に関してのみ試してみました。
###具体的に行ったこと
MySQLに外部からアクセスするためにはMySQL側の設定が必要とのことでしたので
usersという外部から接続可能なユーザを作りました。
接続テスト用に以下のコードをGoogle Colaboratory側から実行しました。
###PyMysql
import
1 2# Connect to the database 3connection = pymysql.connect(host='自分のIPアドレス', 4 user='users', 5 password='自分のパスワード', 6 db='test', 7 charset='utf8', 8 cursorclass=pymysql.cursors.DictCursor) 9 10try: 11 with connection.cursor() as cursor: 12 # Create a new record 13 sql = "INSERT INTO `test` (`email`, `password`) VALUES (%s, %s)" 14 cursor.execute(sql, ('webmaster@python.org', 'very-secret')) 15 16 # connection is not autocommit by default. So you must commit to save 17 # your changes. 18 connection.commit() 19 20 with connection.cursor() as cursor: 21 # Read a single record 22 sql = "SELECT `id`, `password` FROM `test` WHERE `email`=%s" 23 cursor.execute(sql, ('webmaster@python.org',)) 24 result = cursor.fetchone() 25 print(result) 26finally: 27 connection.close()
これをGoogle colaborarotoryから実行すると以下のエラーが起きました。
###エラーコード
timeout Traceback (most recent call last) /usr/local/lib/python3.6/dist-packages/pymysql/connections.py in connect(self, sock) 582 (self.host, self.port), self.connect_timeout, --> 583 **kwargs) 584 break 5 frames timeout: timed out During handling of the above exception, another exception occurred: OperationalError Traceback (most recent call last) /usr/local/lib/python3.6/dist-packages/pymysql/connections.py in connect(self, sock) 628 exc.traceback = traceback.format_exc() 629 if DEBUG: print(exc.traceback) --> 630 raise exc 631 632 # If e is neither DatabaseError or IOError, It's a bug. OperationalError: (2003, "Can't connect to MySQL server on '自分のIpアドレス' (timed out)")
###最後に
timed outということは接続先が間違っているわけではないのかと推測しています。ただ、これ以上どうしたらいいのか分からないです。
また、230万件程のデータなので1番の方法でデータをやりとりするより2番の方がスムーズなのでしょうか?
私の認識が間違っている、もしくは他の方法がありましたらそちらの方も教えて頂きたいです。
よろしくお願いいたします。
###環境
OS-windows 10
DB-MySQL 8.0
###------追記------
- ポート開放について
下記のサイトを参考にポート開放を行いました。
MySQLのポートを開放する (WindowsファイアーウォールでのMySQLのポート開放) (MySQL 操作方法 Tips)
うまくいくかなと思ったのですが、結果は同じ errorコード2003,timedoutでした。
- ポート番号等の確認
もしかして、ポード番号を変更してしまっているかなと思い、mysqlのstatusを調べましたが、3306番でした。
また一応mysqlの設定ファイルmy.iniも見ましたがport=3306 と記載されていました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/04 01:45