hfuob
@hfuob (慎也)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Flaskでpymysqlを使用してDBにWEBサイトを開く時にエラーが表示されます。→MySQL、pymysqlが起動していない?

解決したいこと

Flask起動した後、WEBサイトを開く時に下記のURLにアクセスしたときにエラーが表示されました。DBにはpymysqlを使用して接続します。解決方法を教えて下さい。
下記に記載していますがもしかしたらMySQL、pymysqlが起動していないのでしょうか?

Flask起動

$ FLASK_APP=flask_app.py FLASK_ENV=development flask run

URL

http://localhost:5000/

発生している問題・エラー

pymysql.err.OperationalError: (1698, "Access denied for user 'root'@'localhost'")

該当するソースコード

from flask import Flask, render_template
import pymysql
app = Flask(__name__)

def getConnection():
    return pymysql.connect(
        host='localhost',
        db='mydb',
        user='root',
        password='',
        charset='utf8',
        cursorclass=pymysql.cursors.DictCursor
    )

@app.route('/')
def select_sql():
    connection = getConnection()
    message = "Hello world"

    sql = "SELECT * FROM players"
    cursor = connection.cursor()
    cursor.execute(sql)
    players = cursor.fetchall()

    cursor.close()
    connection.close()

    return render_template('view.html', message = message, players = players)

自分で試したこと

こちらのURLを参考にしました。https://teratail.com/questions/103137

・可能性1
host='127.0.0.1'としているのに自分のPCでMySQLが起動していない。
→URLを変更しましたが変わりませんでした。⇒http://127.0.0.1:5000/

・可能性2
port = 3306としているのに3306ではないポートでMySQLが動いている。

MySQL起動確認

$ sudo service mysql status
 * /usr/bin/mysqladmin  Ver 8.0.33-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version          8.0.33-0ubuntu0.20.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 1 hour 35 min 23 sec

Threads: 3  Questions: 34  Slow queries: 0  Opens: 471  Flush tables: 3  Open tables: 53  Queries per second avg: 0.005

mysql ポート番号確認→起動していない?

$ lsof -i
COMMAND PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
flask   474 hfuob    3u  IPv4   1387      0t0  TCP localhost:5000 (LISTEN)
python3 476 hfuob    3u  IPv4   1387      0t0  TCP localhost:5000 (LISTEN)
python3 476 hfuob    4u  IPv4   1387      0t0  TCP localhost:5000 (LISTEN)
0

1Answer

質問に補足しますが、「$ sudo service mysql start」で起動しているはずなのにもしMySQLが起動していないのであれば、原因もしくは調査方法を教えていただけますでしょうか。
あと、LinuxコマンドはWSLで実行しています。よろしくお願いします。

0Like

Comments

  1. ps -ef
    service mysqld status  
    mysql -h localhost -u root -P 3306 -p -D mydb
    

    で稼働しているか?確認してはどうでしょうか?
    p.s. 私は mysql でなく mysqld を起動しているので私のはmariaDBの例です。

    flask_app.py
    @app.route('/')
    def select_sql():
        message = "Hello world"
        players = "Dummy"
        return render_template('view.html', message = message, players = players)
    

    で切り分けしては?

    FLASK_APP=flask_app.py FLASK_ENV=development flask run -h 127.0.0.1 -p 5000
    

    で実行することを推奨します。

  2. @hfuob

    Questioner

    お返事ありがとうございます。
    コマンドにsudoを付けたら起動しますが、sudo無しでは起動しませんでした。(画像①)DBに権限が無いということでしょうか?あと、DB接続無しでは正常に実行されました。(画像②)

    (画像①)
    スクリーンショット 2023-05-14 220944.png

    (画像②)
    image.png

  3. プロンプトが mydb> になれば正常です。

    "Access denied for user 'root'@'localhost'")が原因です。

    sudo mysqlの方 unix socket経由でログインしてます。mysql -u root mysqlと同じ状態

    ALTER USER で 'root'@'localhost' パスワード再設定で対処可能とおもいますが

    adminのユーザーを作成しては?

    $ mysql -u root mysql
    mysql > CREATE USER 'admin'@'localhost' IDENTIFIED BY 'pw';
    mysql > CREATE USER 'admin'@'%' IDENTIFIED BY 'pw';
    mysql > GRANT ALL ON mydb.* TO 'admin'@'localhost' IDENTIFIED BY 'pw';
    mysql > GRANT ALL ON mydb.* TO 'admin'@'%' IDENTIFIED BY 'pw';
    flush privileges;
    \q
    
    $ mysql -h 127.0.0.1 -u admin -P 3306 -ppw -D mydb
    

    ALTER USER で パスワード再設定してください。
    GRANT ALL ON mydb.* を 私は*.*にしてます。

  4. @hfuob

    Questioner

    返信が遅くなり申し訳ありません。解決しました。ありがとうございます。

Your answer might help someone💌