Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用Docker运行Mysql #14

Open
JayFate opened this issue Sep 3, 2023 · 1 comment
Open

使用Docker运行Mysql #14

JayFate opened this issue Sep 3, 2023 · 1 comment

Comments

@JayFate
Copy link
Owner

JayFate commented Sep 3, 2023

要运行 MySQL 容器,首先需要拉取 docker 镜像

# docker pull mysql:latest
docker pull mysql:5.7

启动MySQL容器

docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
  • MYSQL_ROOT_PASSWORD: 设置root 用户密码
  • -d : 以后台方式运行
  • mysql_server: 容器名称

可以使用 docker exec 进入 mysql_server 容器

docker exec -it mysql_server bash
  • -it: 以交互终端方式执行

要从主机获得与 mysql 控制台的直接交互式会话,请键入:

docker exec -it mysql_server mysql -uroot -p

Docker MySQL 环境变量

当我们启动一个新实例时,我们可以通过 docker run 命令传递一个或多个环境变量来调整 MySQL 实例的配置。

  • MYSQL_ROOT_PASSWORD - 设置 MySQL root 用户的密码。必选变量
  • MYSQL_USER、MYSQL_PASSWORD - 创建新的 MySQL 用户并设置用户密码。可选变量
  • MYSQL_DATABASE - 启动时创建一个新数据库。如果创建了用户,该用户将被授予对数据库的超级用户访问权限。可选变量
  • MYSQL_ALLOW_EMPTY_PASSWORD - 如果设置为“yes”,新容器可以使用空 root 密码启动
  • MYSQL_RANDOM_ROOT_PASSWORD - 如果设置为“yes”,将为 root 用户创建一个随机初始密码

启动 mysql_server 容器并创建 test_db 数据库

docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=  mysql:5.7

创建 myuser 用户并设置密码

docker run -d --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=test_db -e MYSQL_USER=myuser -e MYSQL_PASSWORD=mypass  mysql:5.7

使用空 root 密码启动 mysql_server 容器

docker run -d --name mysql_server -e MYSQL_ALLOW_EMPTY_PASSWORD="yes" -e MYSQL_ROOT_PASSWORD="" mysql:5.7

与另一个 docker 容器链接

通常,您需要将 mysql 实例与其他容器链接。例如,以下命令将启动一个新的 Apache HTTPD 容器,其中包含指向名为“mysql_server”的 mysql 实例的链接。

docker run -d --name apache-web --link mysql_server:mysql httpd:latest

apache 容器现在可以访问 mysql 容器内的 mysql 服务器。连接mysql服务器时,mysql主机应该是MySQL容器的名称或ID。

mysql -p -h mysql_server

启动具有远程访问功能的 MySQL 容器

为了允许远程访问MySQL容器,我们需要在创建新实例时将主机端口3306与容器端口3306映射。

docker run -d -p 3306:3306 --name mysql_server -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

从主机上,您可以使用127.0.0.1 作为 MySQL 主机来访问 MySQL 控制台。

mysql -p -h 127.0.0.1

请注意,端口映射应在创建容器时完成。

使用自定义 MySQL 配置文件

启动配置文件是/etc/mysql/my.cnf文件,该文件又包含在/etc/mysql/conf.d或/etc/mysql/mysql.conf.d目录中找到的以 . .cnf 扩展名

当我们启动一个新的容器时,我们可以将配置目录替换为主机上的目录。例如,在主机上创建一个名为 /var/config 的目录。

mkdir /var/config

然后在 /var/config 目录中创建 mysqld.cnf 文件,并将任何 mysql 配置添加到 mysqld.cnf 文件中。

touch /var/config/mysqld.cnf

现在我们可以将 /var/config 目录挂载为 mysql 容器内的 /etc/mysql/mysql.conf.d 。

docker run -d --name mysql_server -v /var/config:/etc/mysql/mysql.conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

根据上面的示例,我们使用-v标志将 /etc/mysql/mysql.conf.d 目录替换为本地 /var/config 目录。

使用自定义数据目录

同样,我们也可以从主机挂载 MySQL 数据目录。docker mysql 上的默认数据目录是“/var/lib/mysql”。

首先在主机上创建数据目录:

mkdir -p /mysql/data

然后使用本地数据目录启动服务器实例:

docker run -d --name mysql_server -v /mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

从主机备份数据库

使用 docker exec 命令,我们可以从主机创建数据库转储。

以下命令将从“mysql_server”实例转储“example_db”数据库。

docker exec mysql_server sh -c 'exec mysqldump -u root -p"$MYSQL_ROOT_PASSWORD" example_db' > example_db.sql

以下命令将从 mysql 容器转储所有数据库。

docker exec mysql_server sh -c 'exec mysqldump --all-databases -u root -p"$MYSQL_ROOT_PASSWORD"' > all_databases.sql
@JayFate
Copy link
Owner Author

JayFate commented Sep 3, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant