【Django2.0学习笔记】36.部署准备(二):MySQL

36、部署准备(二):MySQL

1、什么是MySQL

MySQL是一款跨平台的开源的关系型数据库
在这里插入图片描述

2、为什么使用MySQL

-MySQLSQLite
特点为服务器端而设计轻量级、可嵌入
高并发访问不能
占用内存比SQLite大
适用性服务器适合桌面应用和手机应用

在这里插入图片描述

3、如何使用MySQL

  • 1、安装MySQL
    • 1)下载MySQL
    • 2)路径加入系统环境
    • 3)配置MySQL
    • 4)启动服务
    • 5)设置root密码
    • alter user 'root'@'localhost' identified by 'test123456';
  • 2、创建数据库(注意字符编码)
  • 3、创建表(应用数据库迁移文件)
  • 4、若有缓存表,也需创建
    在这里插入图片描述

1、安装MySQL

1)下载MySQL

2)路径加入系统环境
加入系统环境是为了方便我们从任何位置进入到数据库,即在任何位置都能直接使用mysql这个命令。
路径加入系统环境:复制路径C:\Program Files\MySQL\MySQL Server 8.0\bin,右击“计算机”——点开“属性”——点开“高级系统设置”——“环境变量”——“系统环境变量” Path——写一个分号,再把我们复制的路径粘贴进来——点击“确定”“确定”“确定”

3)配置MySQL
下载完成之后,我们还要做一个步骤:配置MySQL。
配置MySQL的话,需要新建一个配置文件,my.ini,填写内容如下:
在这里插入图片描述
my.ini:

[mysqld]
# 设置mysql的安装目录
basedir="C:/Program Files/MySQL/MySQL Server 8.0"
# 设置没有啥情况数据库的数据的存放目录
datadir="C:/Program Files/MySQL/MySQL Server 8.0/data"
# 设置默认使用的端口
port=3306
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人试图攻击数据库
max_connect_errors=10
# 服务端使用的字符集
character-set-server=utf8mb4
# 数据库字符集对应一些排序等规则使用的字符集
collation-server = utf8mb4_general_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件作为认证加密方式
# MySQL8.0默认认证加密方式为caching_sha2_password
default_authentication_plugin=caching_sha2_password

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4

[client]

4)启动服务
配置完成之后,我们还需要对MySQL做初始化操作,需要用到bin/mysqld
进入bin目录下的cmd(注意,这里要以管理员身份打开cmd),输入mysqld --initialize-insecure --user=mysql --console-insecure --user=mysql --console是创建用户,用一种不用密码的方式,方便我们进行操作处理
在这里插入图片描述
初始化完毕以后,我们就可以进入到数据库里面,进入之前我们还需要安装启动下mysql这个服务
安装:mysqld --install
启动:net start mysql
在这里插入图片描述

5)设置root密码
启动成功之后,我们就可以进入数据库,输入mysql -u root -p,-u 指定用户(这里用的是root用户),回车后需要输入密码,这里刚刚我们是没有设置密码,是空密码,我们不输入 直接回车就可以进入了。

既然是空密码,我们就需要改一下密码,输入alter user 'root'@'localhost' identified by 'test123456';,给root用户改密码为test123456。改完之后,输入exit退出,然后重新进入数据库mysql -u root -p,回车,然后输入密码test123456

接下来我们要配置一下django,让django可以使用访问MySQL数据库。需要设置mysite/settings.py如下:
在这里插入图片描述

2、创建数据库(注意字符编码)

(要加上utf8或utf8mb4编码)
这里,我们需要先在mysql下创建一个数据库mysite_db,输入create database mysite_db default charset=utf8mb4 default collate utf8mb4_unicode_ci;创建,可以输入show databases;查看
在这里插入图片描述
另外,如果在settings.py中设置用户名和密码为root和test123456,会有一个安全性的问题,root是权限最大的用户,意味着mysql数据库里面所有的数据库它都能看到,一旦别人知道用户名和密码的时候,就能够获取其他数据库、更改数据库数据、甚至删掉数据库。所以我们最好是给这个项目创建一个专门的用户。
在mysql下输入命令create user 'zzzf'@'localhost' identified by 'abc123456';创建用户和密码,然后输入grant all privileges on mysite_db.* to 'zzzf'@'localhost';给这个数据库设置权限,数据库权限给到zzzf这个用户,输入命令flush privileges;刷新权限。这样,zzzf这个用户就拥有这个数据库的全部权限了。
在这里插入图片描述

我们可以输入exit退出来,然后用zzzf这个用户登录mysql -u zzzf -p,输入密码,然后show databases;查看数据库,就可以看到有了mysite_db这个数据库
在这里插入图片描述
然后对应的修改settings.py如下:
在这里插入图片描述

3、创建表(应用数据库迁移文件)

接下来我们就要看能否正常使用。
进入mysite虚拟环境,迁移数据库,这里会提示“是否安装了mysqlclient库”,这是python访问mysql的一个库,我们输入pip install mysqlclient安装一下就可以。
在这里插入图片描述
在这里插入图片描述
这里如果提示安装不了,那么我们可以用whl这个包,可以访问mysqlclient(https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient),找到python对应版本的mysqlclient进行下载,这里我的python版本是3.7,64位,所以下载对应的whl,下载好之后放到mysite目录下,然后在cmd下输入pip install mysqlclient-1.4.6-cp37-cp37m-win-amd64.whl,安装成功之后输入pip list看到mysqlclient客户端这个库可已经安装完毕了。
在这里插入图片描述

4、若有缓存表,也需创建

接着继续之前的应用迁移数据库,输入python manage.py migrate,再打开本地服务python manage.py runserver,在浏览器访问localhost:8000,可以看到有一个错误提示,缓存表不存在。这里我们只需要执行一条命令就可以,输入python manage.py createcachetable,然后再启动本地服务,访问页面
在这里插入图片描述
创建缓存表时出错:
在这里插入图片描述
试着将创建数据库字符集修改为utf8:
在这里插入图片描述
在这里插入图片描述
然后再重新创建缓存表,迁移应用启动数据库:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看到数据库里面是没有数据的,这时候我们就需要把数据从SQLite数据库迁移到MySQL数据库了。

4、迁移数据

  • SQLite ——> MySQL
  • 使用Django导出导入数据的命令完成迁移
  • python manage.py dumpdata > data.json
  • python manage.py loaddata data.json

在这里插入图片描述
我们先把settings.py里面DATABASES配置改回之前的SQLite。然后我们用上面说的命令来迁移数据
输入命令python manage.py dumpdata > data.json
在这里插入图片描述
在这里插入图片描述

接着我们把settings.py里面DATABASES配置改成MySQL的,
输入命令python manage.py loaddata data.json这时会提示有个错误,“在ContentType表里面重复输入了一些数据,导致数据导入不进去”。
在这里插入图片描述
在这里插入图片描述

我们打开mysql数据库,
输入use mysite_db;使用mysite_db这个数据库,
输入show tables;查看这个数据库有哪些表,可以看到有django_content_type这个表,
输入select * from django_content_type;查看一下这个表里面有什么数据。
刚刚提示错误里面就是现实pk=7这条数据重复了,那我们就可以把这个表的全部数据给删掉,
输入delete * from django_content_type;,这时提示错误,这个表跟另外一个表auth_permission有外键关联,那么我们把这个表的数据也给删了,
输入delete * from auth_permission;,成功后再输入delete from django_content_type;,删除完毕。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

删除完毕之后,我们重新回到虚拟环境,输入python manage.py loaddata data.json重新载入数据。
然后开启服务,刷新页面,可以看到博客的数据都有了。接着我们就可以用之前我们开发所用到的用户名和密码登录
在这里插入图片描述
在这里插入图片描述

5、时区问题

  • 日期归档文章的数量显示不正确
  • 原因:MySQL没有加载时区相关的表
    在这里插入图片描述

这里我们可以发现一个问题,右侧栏的日期归档统计都归零了,这跟MySQL没有启动时区有关系,查看django官方文档(https://docs.djangoproject.com/en/2.0/ref/databases/)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在下载的这个文件目录下, 进入cmd,输入mysql -u root -p mysql < timezone_posix.sql,完成之后我们刷新博客页面,可以看到 日期归档那一栏数量出来了,不再是0了,点进去也能进行正常的筛选
在这里插入图片描述

至此,MySQL相关的操作已经完成了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值