如何使用Docker compose修复“表'performance_schema.session_variables'不存在”?

时间:2017-07-21 22:31:28

标签: mysql flask docker-compose

我目前正在开始使用docker-compse进行实验。我创建了一个最小的Flask + MySQL web服务,在没有Docker的情况下工作得很好。现在我想看看如何使用Docker轻松部署。

我的docker-compose.yml看起来像这样:

version: '3'
services:
  web:
    build: .
    command: app.py
    ports:
     - "8082:8082"
    volumes:
     - .:/code
    links:
     - db
    hostname: myappserver
    environment:
    - MYSQL_ROOT_PASSWORD=p@ssw0rd123
    - MYSQL_DATABASE=flask_db
    - MYSQL_HOST=db
    - MYSQL_PORT=3306
  db:
    image: mysql
    ports:
    - "3307:3306"
    environment:
    - MYSQL_ROOT_PASSWORD=p@ssw0rd123
    - MYSQL_DATABASE=flask_db
    - MYSQL_HOST=mysqlserver

当我运行sudo docker-compose up --build时,我得到了

web_1  | sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1146 (42S02): Table 'performance_schema.session_variables' doesn't exist [SQL: "SHOW VARIABLES LIKE 'sql_mode'"]
db_1   | 2017-07-21T22:27:26.553761Z 3 [Note] Aborted connection 3 to db: 'flask_db' user: 'root' host: '172.18.0.3' (Got an error reading communication packets)

问题是什么,我该如何解决?

(完整的项目在这里:https://github.com/MartinThoma/flask_mysql_dockerized - 它真的很小)

没有

的重复
  • 1:我知道这是否在我的计算机上,我可以使用mysql_upgrade -u root -p --force/etc/init.d/mysql start进行修复。但是使用docker compose的目的是让启动Web服务变得非常简单。一个命令。如果我必须告诉用户登录容器,运行这些命令,重新启动另一个容器..然后我可以简单地让他手动将它安装在主系统/运行docker容器上。

所以这就是我所做的解决方法,我希望可以手动完成这项工作:

Start the containers:
  # docker-comopse up

Find the container ID of the mysql image:
  # docker container ls

Enter the container
  # sudo docker exec -it 4f7d3f0763ad bash

Upgrade
  # mysql_upgrade -u root -p --force

Exit the container, then restart
  # docker-compose up

Initialize the database:
  # cd /docker-entrypoint-initdb.d/
  # mysql -h localhost -u root -p
  mysql> source flask_db.sql;

1 个答案:

答案 0 :(得分:1)

您需要将数据库添加到您的mysql服务中:

volumes:
  - ./flask_db.sql:/docker-entrypoint-initdb.d/flask_db.sql

提示:建议使用较小的图像,以便您的图像只需要基本组件,并且不需要额外的非必要内容。