Dockerを用いて、mysqlを構築しました。
そこに、ローカルでPythonを動かしてjsonデータを挿入しようとしたのですがうまく動きません。
Pythonは次のプログラムを書きました。
python
1import uuid 2import mysql.connector 3import json 4 5db_config = { 6 'host': 'localhost', 7 'db': 'hogeDB', 8 'user': 'hogeUser', 9 'passwd': 'hogehoge', 10 'charset': 'utf8', 11} 12 13with open('hoge.json', 'r') as jsonFile: 14 preJsonFile = json.load(jsonFile) 15 16 connection = mysql.connector.connect(**db_config) 17 cursor = connection.cursor() 18 19 〜以下略〜
すると次のようなエラーが表示されてしまいました。
Traceback (most recent call last): File "..../lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 176, in _open_connection self._cmysql.connect(**cnx_kwargs) _mysql_connector.MySQLInterfaceError: SSL connection error: SSL_CTX_set_tmp_dh failed During handling of the above exception, another exception occurred: Traceback (most recent call last): File "..../Documents/PycharmProjects/jsonToMySQL/jsonToMySQL.py", line 18, in <module> connection = mysql.connector.connect(**db_config) File "..../lib/python3.6/site-packages/mysql/connector/__init__.py", line 172, in connect return CMySQLConnection(*args, **kwargs) File "..../lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 78, in __init__ self.connect(**kwargs) File "..../lib/python3.6/site-packages/mysql/connector/abstracts.py", line 731, in connect self._open_connection() File "..../lib/python3.6/site-packages/mysql/connector/connection_cext.py", line 179, in _open_connection sqlstate=exc.sqlstate) mysql.connector.errors.InterfaceError: 2026 (HY000): SSL connection error: SSL_CTX_set_tmp_dh failed
立ち上がったDockerのmysqlに入って
# mysql
と打つと
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
とエラーが出てしまいます。
解決法が分かりません。アドバイスよろしくお願いします。
調べてみると、
「/var/run/mysqld/mysqld.sockがないからそれを置けばいい」
というような記事も見かけたのですが、できればdockerを立ち上げた最初の状態でうまく動作させたいです。
ローカルでターミナルから次のように打つと、mysqlを操作することはできるので、立ち上がってはいると思うのですが、、
$ mysql -h localhost --port 3306 --protocol tcp -u hogeUser -p
Dockerの構築は次のようにしています。
. ├── docker-compose.yml └── mysql ├── Dockerfile ├── my.cnf └──init └──init.sql
docker-compose.yml
docker
1version: "3" 2 3volumes: 4 hoge.db.volume: 5 6services: 7 db: 8 build: ./mysql 9 volumes: 10 - ./mysql/init:/docker-entrypoint-initdb.d/:ro 11 - hoge.db.volume:/var/lib/mysql 12 ports: 13 - 3306:3306 14 environment: 15 MYSQL_ROOT_PASSWORD: hoge 16 TZ: "Asia/Tokyo"
Dockerfile
FROM mysql # 設定ファイルの読み込み COPY ./my.cnf /etc/mysql/conf.d/my.cnf CMD ["mysqld"]
my.cnf
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES character-set-server = utf8 default_authentication_plugin= mysql_native_password [client] default-character-set = utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
init.sql
create user hogeUser identified by 'hogehoge'; CREATE DATABASE hogeDB; grant all privileges on hogeDB.* to hogeUser@'%'; use hogeDB; CREATE TABLE hoge_table ( name VARCHAR(20), hoge VARCHAR(10) );
長くなってしまうので、必要ないと考える部分は省略しましたが、足りない情報があればご指摘ください。
サーバー周りについての知識がまだ全然乏しいので見当違いのことを聞いているかもしれませんが、よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/27 22:15
2018/11/27 23:56
2018/11/28 14:43