1. 程式人生 > 實用技巧 >【docker容器入門(六)】: Docker 安裝mysql

【docker容器入門(六)】: Docker 安裝mysql

本文主要說一下,如何在docker環境中安裝和使用mysql。

1.建立mysql容器

使用如下命令建立mysql容器

docker run -d -e MYSQL_ROOT_PASSWORD=root123 -p 3306:3306 --name mysql --restart always -v /home/mysql/data:/var/lib/mysql mysql

引數說明:

  -e 這裡用來設定mysql資料庫root使用者密碼

  -p 對映容器埠3306到宿主機埠3306

  -v 對映容器資料儲存路徑到宿主機路徑/home/mysql/data

# 建立mysql容器
[root@guoxiaobo ~]# docker run -d -e MYSQL_ROOT_PASSWORD=root123 -p 3306:3306 --name mysql --restart always -v /home/mysql/data:/var/lib/mysql mysql
Unable to find image 'mysql:latest' locally
latest: Pulling from library/mysql
Digest: sha256:78800e6d3f1b230e35275145e657b82c3fb02a27b2d8e76aac2f5e90c1c30873
Status: Downloaded newer image for mysql:latest
e05eb579c3cd4e4a6fcda2f32700e1d0c14aa93643eb3bced6a08814039c3294

# 確認mysql容器
[root@guoxiaobo ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
e05eb579c3cd   mysql     "docker-entrypoint.s…"   19 seconds ago   Up 17 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

2. 連線mysql

# 進入mysql容器
[root@guoxiaobo ~]# docker exec -it mysql bash

# 連線mysql
root@e05eb579c3cd:/# mysql -hlocalhost -uroot -p"root123"
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22 MySQL Community Server - GPL

Copyright (c) 2000, 2020, 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.

# 檢視database
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

新增資料

# 建立database
mysql> create database gxbdb;
Query OK, 1 row affected (0.00 sec)

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

mysql> use gxbdb;
Database changed

# 新增表
mysql> create table user(id int primary key, name text, age text);
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+-----------------+
| Tables_in_gxbdb |
+-----------------+
| user            |
+-----------------+
1 row in set (0.00 sec)

# 新增資料
mysql> insert into user values(1, 'dds', 18);
Query OK, 1 row affected (0.02 sec)

mysql> select * from user;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | dds  | 18   |
+----+------+------+
1 row in set (0.00 sec)
# 斷開mysql
mysql> exit
Bye
root@e05eb579c3cd:/# exit
exit

3. 資料庫備份

備份資料口

[root@guoxiaobo ~]# docker exec mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /home/mysql/all-databases.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@guoxiaobo ~]# ll /home/mysql/all-databases.sql 
-rw-r--r-- 1 root root 3807310 Dec 24 10:17 /home/mysql/all-databases.sql

刪除資料

# 刪除gxbdb
...
mysql> drop database gxbdb;
Query OK, 1 row affected (0.00 sec)

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

4. 資料庫恢復

[root@guoxiaobo ~]# docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /home/mysql/all-databases.sql
mysql: [Warning] Using a password on the command line interface can be insecure.

  

確認資料恢復結果

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

mysql> use gxbdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------+
| Tables_in_gxbdb |
+-----------------+
| user            |
+-----------------+
1 row in set (0.01 sec)

mysql> select * from user;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | dds  | 18   |
+----+------+------+
1 row in set (0.00 sec)