Djangoのマイグレーションでエラーが発生するときの対処法

Pocket

DjangoでMySQLを使ってマイグレーション時にエラーが発生し、結構はまったので、備忘録として残しておきます。

【環境】

・Windows10(VMWare Workstation15 player)
・Ubuntu20.04
・Python 3.8.2

【エラー対処方法】

「Did you install mysqlclient?」エラーが出た場合の対処方法

以下のようなエラーが発生した時

test@ubuntu:~/デスクトップ/python/myapp$ python manage.py makemigrations helloworld
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/django/db/backends/mysql/base.py", line 16, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
・
・
・
    raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
test@ubuntu:~/デスクトップ/python/myapp$

「pip install mysqlclient」をインストールする。

もし、「pip install mysqlclient」で次のようなエラーが出たら「sudo apt install libpython3.8-dev」を実行する

test@ubuntu:~/デスクトップ/python/myapp$ pip install mysqlclient
Defaulting to user installation because normal site-packages is not writeable
Collecting mysqlclient
  Using cached mysqlclient-2.0.1.tar.gz (87 kB)
Using legacy setup.py install for mysqlclient, since package 'wheel' is not installed.
Installing collected packages: mysqlclient
    Running setup.py install for mysqlclient ... error
    ERROR: Command errored out with exit status 1:
     command: /usr/bin/python3.8 -u -c 'import sys, setuptools, tokenize; sys.argv[0]
・
・ 
(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-yff8str7/install-record.txt --single-version-externally-managed --user --prefix= --compile --install-headers /home/test/.local/include/python3.8/mysqlclient Check the logs for full command output.
test@ubuntu:~/デスクトップ/python/myapp$ 
sudo apt install libpython3.8-dev

この後にもう一度「pip install mysqlclient」を実行する。

問題なければこれでマイグレーションが実行できます。

以上です。ありがとうございました。

Pocket

Ubuntu20.04にapache2とPHP7.4、phpmyadminをインストールする

Pocket

今回はMySQLのインストールに続きapache2とphp、phpmyadminのインストールです。

Ubuntu20.04にmysqlをインストールする

まずは、「apache2」をインストールします。

apache2インストール

$ sudo apt install apache2       

インストールが完了したらブラウザを開いて以下URLを入力します。

http://localhost

Apache2のブラウザが表示されていれば問題なくインストールできています。

バージョンを確認します。

$ apache2 --version
[Sat Jul 04 19:15:21.110494 2020] [core:warn] [pid 4301] AH00111: Config variable ${APACHE_RUN_DIR} is not defined apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot

続いて、php7.4をインストールします。

php7.4インストール

sudo apt install php7.4

バージョンを確認します。

php --version
PHP 7.4.3 (cli) (built: May 26 2020 12:24:22) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

続いて、phpmyadminをインストールします。

phpmyadminインストール

sudo apt install phpmyadmin

webサーバを選択する画面が表示されるので、「apache2」を「スペース」キーで選択してEnter。

続いて、初期phpmyadminユーザの設定を聞かれるが、「いいえ」を選択する

インストールが完了したらブラウザで以下のURLでログインします。

http://localhost/phpmyadmin

もし、phpMyAdminにログイン時に「設定ファイルに定義されている管理ユーザ(controluser)での接続に失敗しました。」と表示される場合は以下のファイルを修正します。

sudo vi /etc/phpmyadmin/config-db.php

以下の変数をログインするユーザとパスワードに変更します。

$dbuser=’testuser’;
$dbpass=’パスワード’;

以上で、apache2とphpとphpmyadminのインストールは完了です。

Pocket

Ubuntu20.04にmysqlをインストールする

Pocket

今回は、勉強しているPythonのDjangoでphpmyadminを利用するための環境構築の一環として、Ubuntuにmysqlをインストールしたので、備忘録として書きます。

【環境】

・Windows10(VMWare Workstation15 player)
・Ubuntu20.04
・MySQL8.0.20

【事前確認】

まずはターミナルを開いて念のためアップデートしておきます。

sudo apt update
sudo apt upgrade

【MySQLインストール】

アップデート完了後、SQLサーバとクライアントをインストールします。

sudo apt install mysql-server mysql-client

インストールできたらバージョンの確認を行います。

mysql --version
mysql Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

サービスが起動できているかを確認します。

sudo service mysql status
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:> Active: active (running) since Mon 2020-06-29 19:52:29 PDT; 1min 30s ago Main PID: 10994 (mysqld) Status: "Server is operational" Tasks: 38 (limit: 4624) Memory: 326.4M CGroup: /system.slice/mysql.service └─10994 /usr/sbin/mysqld Jun 29 19:52:28 ubuntu systemd[1]: Starting MySQL Community Server... Jun 29 19:52:29 ubuntu systemd[1]: Started MySQL Community Server.

次のコマンドで、MySQLの初期設定を行います。

sudo mysql_secure_installation
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: y There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 Please set the password for root here. New password: *** Re-enter new password: *** Estimated strength of the password: 25 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!

以上でMySQLのインストールは完了しました。
念のためにMySQLサーバに接続してみます。

sudo mysql -u root -p
Enter password: *** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.20-0ubuntu0.20.04.1 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql>

mysqlとプロンプトが表示されていれば無事接続することができています。

元に戻る場合は「quit」で戻ります。

続いて、phpmyadmin用のユーザーを作成しておきます。

ユーザー名:testuser

CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'パスワード';

ユーザーの確認

SELECT user, host FROM mysql.user;

もし以下のようなエラーが出た場合は、パスワードポリシーに沿ってパスワードを設定してください。

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

パスワードポリシー確認コマンド

SHOW VARIABLES LIKE 'validate_password%';

もし変更したいと思ったら次のコマンドを入力します。

set global validate_password.length=6;
set global validate_password.policy=LOW;

ユーザーに権限をつけます
以下のコマンドは「testuser」にすべての権限を、すべてのデータベースに適用しています。

GRANT ALL ON *.* TO 'testuser'@'localhost';
FLUSH PRIVILEGES;

権限を確認

show grants for testuser@localhost;

以上です。

Pocket