文档章节

flask项目从sqlite3升级的mysql数据库

janl
 janl
发布于 2016/11/19 21:28
字数 921
阅读 65
收藏 1

flask项目因为需求变更,需要迁移到mysql数据库。

项目计划采用docker来管理,采用mysql官网的docker来管理。

  1. 删除数据库目录。
sudo rm -rf data/
  1. 删除原日志目录。
$ rm -rf log/
  1. 修改docker-compose.yml 文件。 从原来一个项目中复制过来的docker-compose.yml文件,内容如下:
estimate:
  # restart: always
  build: ./app
  ports:
    - "8000:8000"
  links:
    - mysql:mysql
  volumes:
    - ./app:/usr/src/app
  env_file: .env

mysql:
  # restart: always
  image: mysql:latest
  env_file: .env
  ports:
    - "3306:3306"
  volumes:
    - ./data:/var/lib/mysql
    - ./data/my.cnf:/etc/mysql/my.cnf  
  environment:
    - MYSQL_ROOT_PASSWORD=estimate

配置文件改好了,准备构建镜像:

docker-compose build

看起来一切顺利。

ERROR: for mysql  oci runtime error: rootfs_linux.go:53: mounting "/var/lib/docker/aufs/mnt/258ac98827bf738a0196693883820ebb3e4801320a2a3542a39076edf9ef1649/etc/mysql/my.cnf" to rootfs "/var/lib/docker/aufs/mnt/258ac98827bf738a0196693883820ebb3e4801320a2a3542a39076edf9ef1649" caused "not a directory"
Traceback (most recent call last):
  File "/usr/local/bin/docker-compose", line 9, in <module>
    load_entry_point('docker-compose==1.7.1', 'console_scripts', 'docker-compose')()
  File "/usr/local/lib/python2.7/dist-packages/compose/cli/main.py", line 63, in main
    log.error(e.msg)
AttributeError: 'ProjectError' object has no attribute 'msg'

看起来情况不太妙,原因来配置不能正常拉起来,貌似my.cnf不是一个目录的原因,改为映射/etc/mysql试了一下,mysql是初始化成功了,但是容器与映射目录中均没有my.cnf文件,暂不知道原因,先去掉对my.cnf的映射,再次尝试:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
6112bf03d615        estimate_estimate   "/usr/local/bin/super"   29 seconds ago      Up 28 seconds       5000/tcp, 0.0.0.0:8000->8000/tcp   estimate_estimate_1
5bed08089c16        mysql:latest        "docker-entrypoint.sh"   30 seconds ago      Up 29 seconds       0.0.0.0:3306->3306/tcp             estimate_mysql_1

现在看起来正常多了。 4. 修改mysql的默认字符集为utf8,修改配置文件,mysql要注意不后字符集不对,后面很麻烦。

$ docker exec -it 5bed08089c16 /bin/bash
root@5bed08089c16:/# cd /etc/                                                                                                                                                                                          
root@5bed08089c16:/etc# ll
bash: ll: command not found
root@5bed08089c16:/etc# cd mysql
root@5bed08089c16:/etc/mysql# ll
bash: ll: command not found
root@5bed08089c16:/etc/mysql# ls
conf.d	my.cnf
root@5bed08089c16:/etc/mysql# vim my.cnf 
bash: vim: command not found
root@5bed08089c16:/etc/mysql# vi my.cnf 
bash: vi: command not found
root@5bed08089c16:/etc/mysql# 

郁闷了,容器中没有vim,连vi也没有,还好有apt安装吧。。。。

root@5bed08089c16:/etc/mysql# apt-get install vim
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package vim
root@5bed08089c16:/etc/mysql# 

什么情况,貌似,源也不正常。。。

apt-get update
apt-get install vim

不是国内源,比较慢,等的时间有点长。。。终于好了。 连接mysql查看字符集设置情况。

root@5bed08089c16:/etc/mysql# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.13 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, 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> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

准备修改字符集配置

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock
default-character-set=utf8   //added by janl

[mysqld_safe]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
nice            = 0

[mysqld]
skip-host-cache
skip-name-resolve
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
character_set_server=utf8     // added by janl
init_connect='SET NAMES utf8' //added by janl
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp

好了,让容器重启一下,让配置生效。 再次查看mysql 的字符集配置

mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

看来字符集都改过来了,一切顺利,创建数据库。

  1. 创建数据库
mysql> CREATE DATABASE IF NOT EXISTS estimate DEFAULT CHARSET utf8 COLLATE utf8_general_ci;  
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| estimate           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use estimate;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> 

数据库建立起来了,然后就可以和数据库一起愉快的玩耍了。。。。。。。。

© 著作权归作者所有

共有 人打赏支持
janl
粉丝 4
博文 55
码字总数 27349
作品 0
石家庄
程序员
私信 提问
(旧)3- Flask构建弹幕微电影网站- 课程介绍

Flask 构建微电影视频网站 已上线演示地址: http://movie.mtianyan.cn 项目源码地址:https://github.com/mtianyan/movieproject 持续更新教程与代码commit。欢迎大家一起学习,star。 介绍微...

天涯明月笙
2018/02/11
0
0
Flask连接数据库打怪升级之旅

前言 在初学 Flask 的时候,在数据库连接这部分也跟每个初学者一样。但是随着工作中项目接手的多了,代码写的多了,历练的多了也就有了自己的经验和技巧。在对这块儿代码不断的进行升级改造后...

xjtuhit
2017/08/30
0
0
Python进阶(五十二)-Flask使用pymysql连接MySQL数据库

Python进阶(五十二)-Flask使用pymysql连接MySQL数据库 IDE说明 Python:3.5 Flask:0.12.1 Pymysql:0.7.10 MySQL:5.5 前言   之前在做Python Web开发时,选择的是Django框架,后台的自动化实...

sunhuaqiang1
2017/05/31
0
0
解决sqlalchemy线程安全问题

sqlalchemy是一个非常强大的python orm库,功能完善,BUG少,版本发布频繁,缺点就是代码的可读性略差,我估计过不了pep8、pylint的检查 ORM的好处 帮忙解决sql注入的问题 将操作SQL语句变成...

Jun_Wong
2017/10/24
0
0
EasyDSS流媒体服务器软件对数据库Sqlite3和MySQL的同时支持说明

EasyDSS流媒体音视频直播与点播服务器软件,是一套提供一站式的转码、点播、直播、检索、回放、录像下载服务的高性能RTMP/HLS/HTTP-FLV流媒体服务,极大地简化了流媒体相关业务的开发和集成的...

xiejiashu
2018/12/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot引入第三方jar包或本地jar包的处理方式

在开发过程中有时会用到maven仓库里没有的jar包或者本地的jar包,这时没办法通过pom直接引入,那么该怎么解决呢 一般有两种方法 - 第一种是将本地jar包安装在本地maven库 - 第二种是将本地j...

独钓渔
46分钟前
2
0
五、MyBatis缓存

一、MyBatis缓存介绍 缓存的使用可以明显的加快访问数据速度,提升程序处理性能,生活和工作中,使用缓存的地方很多。在开发过程中,从前端-->后端-->数据库等都涉及到缓存。MyBatis作为数据...

yangjianzhou
今天
2
0
最近研究如何加速UI界面开发,有点感觉了

最近在开发JFinal学院的JBolt开发平台,后端没啥说的,做各种极简使用的封装,开发者上手直接使用。 JBolt开发平台包含常用的用户、角色、权限、字典、全局配置、缓存、增删改查完整模块、电...

山东-小木
今天
3
0
《月亮与六便士》的读后感作文3000字

《月亮与六便士》的读后感作文3000字: 看完英国作家威廉.萨默塞特.毛姆所著《月亮与六便士》(李继宏译),第一疑问就是全书即没提到“月亮”,也没提到“六便士”。那这书名又与内容有什么...

原创小博客
昨天
2
0
微信网页授权获取用户信息(ThinkPHP5)+ 微信发送客服消息(一)

以thinkphp5为实例,创建控制器 class Kf extends Controller { /** * [protected description]微信公众号appid * @var [type] */ protected $appid = "xxxxxxxxxxxxxxx"; /** * [protected......

半缘修道半缘君丶
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部