MySQL Docker-compose: 数据库未初始化

MySQL Docker-compose: 数据库未初始化

当我们使用Docker Compose启动MySQL容器时,可能会遇到错误提示“Database is uninitialized”,这是因为MySQL容器中的数据库尚未初始化,需要我们进行初始化操作。

阅读更多:MySQL 教程

原因

当MySQL容器启动时,会检查数据目录(/var/lib/mysql)是否有数据文件,如果没有,则会执行初始化脚本,但是如果数据目录中已经有数据文件,则不会再次执行初始化脚本。因此,当我们第一次启动MySQL容器时,会出现“Database is uninitialized”的错误。

解决方法

方法一:手动初始化数据库

手动初始化MySQL数据库,我们需要使用MySQL命令行工具执行一些SQL语句,来创建数据库、表和用户等。

下面以一个示例来说明具体步骤:

“`docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: test
ports:
– "3306:3306"
volumes:
– ./mysql_data:/var/lib/mysql
command: –init-file /docker-entrypoint-initdb.d/init.sql

<pre><code class="line-numbers">这里我们使用MySQL 5.7镜像,指定root用户的密码为“password”,创建一个名为“test”的数据库。我们挂载了本地的mysql_data目录到容器的/var/lib/mysql目录下,这样数据就可以保存在本地,方便管理。

在docker-compose.yml文件所在目录下,新建一个init.sql文件,写入以下内容:

“`init.sql
CREATE DATABASE IF NOT EXISTS test;
USE test;
CREATE TABLE IF NOT EXISTS user (
id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
nickname VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO user (username, password, nickname) VALUES
(‘admin’, ‘admin123’, ‘管理员’),
(‘user’, ‘user123’, ‘普通用户’);

这里我们创建了一个名为“user”的表,包含了id、username、password和nickname四个字段,还插入了两条测试数据。

现在我们重新启动MySQL容器,执行如下命令:

docker-compose up -d

容器启动后,我们可以使用以下命令进入MySQL容器的命令行界面,并查看是否已经成功初始化数据库。

docker exec -it 容器ID mysql -uroot -p

方法二:使用Dockerfile

我们也可以在Dockerfile文件中编写初始化脚本,并将其复制到容器中。假设我们有如下的Dockerfile文件:

FROM mysql:5.7

ENV MYSQL_ROOT_PASSWORD password
ENV MYSQL_DATABASE test

COPY init.sql /docker-entrypoint-initdb.d/

其中,我们使用mysql:5.7镜像作为基础镜像,设置root用户的密码和要创建的数据库名称。我们将之前编写的init.sql文件复制到容器的/docker-entrypoint-initdb.d/目录下,这样在容器启动时,MySQL就会自动执行该脚本进行初始化。

现在,我们可以使用以下命令构建镜像,并启动容器。

docker build -t mysql-init .
docker run -d -p 3306:3306 --name mysql-init mysql-init

容器启动后,我们可以使用以下命令进入MySQL容器的命令行界面,并查看是否已经成功初始化数据库。

docker exec -it 容器ID mysql -uroot -p

总结

通过手动初始化或使用Dockerfile编写初始化脚本,我们可以成功初始化MySQL容器中的数据库,避免了“Database is uninitialized”的错误。在实际应用中,我们需要根据需求来选择合适的方法进行初始化操作,确保数据库的正常运行。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程