Skip to content
Go back

MySQL Docker 常用命令

Updated:
Edit page

加载sql 文件

在 Docker 环境部署 MySQL 时,加载 .sql 文件主要有两种方式:

  1. 容器首次启动时自动初始化
  2. 容器已经运行后手动导入 SQL

首次启动自动加载 SQL:

.sql 文件挂载到目录 /docker-entrypoint-initdh.d/ 下,MySQL 首次初始化数据目录时会自动执行。

init.sql 示例:

CREATE DATABASE IF NOT EXISTS test_db;

USE test_db;

CREATE TABLE user (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT
);

INSERT INTO user(name, age) VALUES ('Tom', 18);

使用 Docker Compose 启动容器, docker-compose.yml:

services:
  mysql:
    image: mysql:8.0
    container_name: mysql-demo
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: test_db
      MYSQL_USER: test
      MYSQL_PASSWORD: test123
    ports:
      - "3306:3306"
    volumes:
      - ./mysql-data:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

验证步骤:

docker compose up -d
docker exec -it mysql-demo mysql -uroot -proot123

查看数据库

SHOW DATABASES;
USE test_db;
SHOW TABLES;
SELECT * FROM user;

注意:自动初始化只会执行一次。如果容器已经启动,且映射到 /var/lib/mysql 的宿主备份 mysql-data 也存在,那么后面修改 init.sql,再重启容器也不会被执行。

容器运行后手动导入 SQL

  1. 宿主机直接导入
docker exec -i mysql-demo mysql -uroot -proot123 < ./init.sql

如果 SQL 里没有写 USE database_name;,可以指定数据库:

docker exec -i mysql-demo mysql -uroot -proot123  test_db< ./init.sql
  1. 先复制 SQL 到容器,再执行
docker cp ./init.sql mysql-demo:/tmp/init.sql

docker exec -it mysql-demo bash

mysql -uroot -proot123 test_db < /tmp/init.sql

备份

备份数据库使用命令 mysqldump

docker exec mysql-demo mysqldump -uroot -proot123 test_db > test_db_backup.sql

# 备份整个数据库
docker exec mysql-demo mysqldump -uroot -proot123 --all-databases > all_backup.sql

# 备份多个数据库
docker exec mysql-demo mysqldump -uroot -proot123 --databases db1 db2 > multi_db_backup.sql

其他选项:

恢复数据

docker exec -i mysql-demo mysql -uroot -proot123 test_db < test_db_backup.sql

如果恢复文件中没有 CREATE DATABASEUSE,需要指定数据库

docker exec -i mysql-demo mysql -uroot -proot123 test_db < test_db_backup.sql

压缩备份

docker exec mysql-demo mysqldump -uroot -proot123 --databases test_db | gzip > test_db_backup.sql.gz

恢复压缩备份

gunzip < test_db_backup.sql.gz | docker exec -i mysql-demo mysql -uroot -proot123

其他命令

宿主环境执行单条 SQL

docker exec -i mysql-demo mysql -uroot -proot123 -e "SHOW DATABASES;"

Edit page
Share this post on:

Previous Post
Powershell101
Next Post
使用 C 语言构建你自己的 Redis