ランダムおすすめ記事

ホームページ作りました

djangoのデータベースをsqlite3からmysqlに切り替えるまで3

前回server erro500というエラーが出てしまった。

いろいろ調べてもわけがわからず質問することに。

・・・その結果。

DEBUGをTrueにしてみましょう。と言われた。そうかDEBUGがTrueにして本番環境(サーバー環境)でエラーを特定するのだな。

聞いて聞いて聞きまくってついにmysqlに変更

まずエラーメッセージ、

cryptography is required for sha_256_password or caching_sha2_password

エラーが出た。

pipでcryptographyを導入する。 which pip3.6でパスを調べて

/usr/local/bin/pip3.6 install cryptography --user

と打ったがだめ。

ちゃんと最初にsudoを付けて最後に--userはとること。userだとローカルにインストールされてしまう。

sudo /usr/local/bin/pip3.6 install cryptography 

その後mysqlの状態を調べたのだがどうも芳しくないらしく一度サーバー環境のみmysqlをすべてアンインストールすることにした。

【MySQL】完全にアンインストールする方法: なんちゃってプログラマのぼやき

sudo yum -y remove mysql-server

mysqlと名前が付くものは

rpm -qa | grep -i mysql

でチェック全部アンインストールした。 余談だがこのときデータベースまで一緒に消してしまったらしくあとでサーバー環境で作り直したのだが・・・。

 

そしてmysql再インストール。サーバー環境の方ね!

grep 'temporary password' /var/log/mysqld.log
 ```

とコマンドをうつ最初に自動的に作られるrootユーザーのパスワードが書き込まれる。
[Note] A temporary password is generated for root@localhost: XXXXXXXXXX


まずはroot権限でデフォルトパスワードで本番環境を起動させる。localhostという名前では権限が無いかと思ったが本番環境では自身がlocalhostなので問題なし。

settings.pyのパスワードを書き換える。ただし

'HOST': '', # 空欄でOK
'PORT': '', # 空欄でOK
で良い。



####mysql8.0ではデフォルトのrootユーザーではmysqlに接続できない

teraterm上で再度デプロイをかけて、起動したためサイトを見に行ったところ、

(2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")

とエラーが出現した、どうもmysql8.0ではデフォルトのrootユーザーのパスワードではではmysqlに接続できない,らしい。
まずパスワード無しでmysqlに接続するために


 ```
sudo systemctl stop mysqld.service

sudo vim /etc/my.cnf  
↓
[mysqld]の一番下に追記
skip-grant-tables  
 
sudo systemctl start mysqld.service

vimは操作が難しいのでこのサイトを参考にした。

viの使い方/基本操作

TEMPEST: Fedoreの技 viでwなしで上書きするには

エラーが出るので:wq!で保存するというのが大変曲者だった。

mysql> FLUSH PRIVILEGES;  
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新パスワード';  

でパスワードを変更する必要(別にデフォルトのものを再利用しても大丈夫そうだが)があるようだ。rootユーザーの名前は変更する必要が無い。 でこのままデプロイしたところエラー

(2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")

が発生。

sudo vim /etc/my.cnf

で記載した

skip-grant-tables

をvimで削除する必要があったらしい。

その後sudo systemctl restart mysqld.service として再度デプロイしたが

(1049, "Unknown database 'sample'")

これはデータベースを依然消してしまったことが原因で先ほど設定した新パスワードでmysqlに接続し、

CREATE DATABASE db_name;

(db_nameに好きなデータベース名を入れる)でデータベースを作成した。

ついにサーバー環境でmysqlが作動

デプロイするとまたエラーが発生

(1146, "Table 'sample.polls_question' doesn't exist")

これはマイグレーションの問題とさすがにわかった。

sudo python3.6 manage.py migrate

で解決。すでにmigrationsのファイルはあるのでmake migrationsは不要だった。

これでとりあえずサーバー環境ではmysqlに接続できるようになった。ローカル環境では試してないのでやってみようと思う。

djangoのデータベースをsqlite3からmysqlに切り替えるまで2 - ニートがベルマーレ好きすぎて会社起こしたけど今後は未定

djangoのデータベースをsqlite3からmysqlに切り替えるまで2 - ニートがベルマーレ好きすぎて会社起こしたけど今後は未定

djangoのデータベースをsqlite3からmysqlに切り替えるまで3 - ニートがベルマーレ好きすぎて会社起こしたけど今後は未定