如果您是 MySQL 的新手或希望快速輕松地安裝 MySQL 數(shù)據(jù)庫(kù)的人,那么本文適合您,在本文中,我們將學(xué)習(xí)如何在 Linux 中使用 Docker 和 Docker compose 設(shè)置 MySQL。
讓我們首先設(shè)置 docker 環(huán)境來啟動(dòng) MySQL 容器。
1. 安裝 Docker
在啟動(dòng) MySQL docker 容器之前,您需要在您的機(jī)器上安裝 docker 和 docker-compose。
您還可以參考下面給出的官方 Docker 文檔鏈接,了解如何設(shè)置 Docker 和 Docker compose。
https://docs.docker.com/engine/install/
https://docs.docker.com/compose/install/
您可以運(yùn)行以下命令來檢查您正在運(yùn)行的 docker 和 docker-compose 版本。
$ docker --version
Docker version 20.10.11, build dea9396
$ docker-compose --version
docker-compose version 1.29.2, build unknown
2. 下載 MySQL Docker 鏡像
前往Docker Hub獲取MySQL docker 鏡像。重要的是您必須決定要運(yùn)行的 MySQL 版本。
運(yùn)行以下命令將 MySQL 映像從 docker hub 拉到您的機(jī)器上。
$ docker pull mysql:latest
注意:沒有必要使用標(biāo)簽“ latest”,默認(rèn)情況下它會(huì)拉取最新的圖像。
要檢查圖像是否在本地可用,您可以運(yùn)行以下命令:
$ docker images mysql
示例輸出:
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest b05128b000dd 12 days ago 516MB
現(xiàn)在圖像已準(zhǔn)備好啟動(dòng)容器。您也可以跳過此步驟并運(yùn)行“ docker run”命令,如下一節(jié)所示,如果本地不可用,它將拉取映像。
3. 啟動(dòng) MySQL 容器
運(yùn)行以下命令來啟動(dòng) MySQL docker 容器:
$ docker run --name mysql -p 3306:3306 -v mysql_volume:/var/lib/mysql/ -d -e "MYSQL_ROOT_PASSWORD=temp123" mysql
讓我們分解上面的命令,看看每個(gè)標(biāo)志的作用。
- --name→ 為您的容器命名。如果您未指定此標(biāo)志,docker 將分配一些隨機(jī)生成的名稱。
- -p→ 端口映射。MySQL 將偵聽端口,3306因此我們將端口 ( 3306→ 3306) 從您的主機(jī)映射到 docker 容器。主機(jī)端口不必是3306,它可以是任何可用的。
netstat在您的本地機(jī)器上運(yùn)行以下命令以檢查容器啟動(dòng)后映射的端口是否正在偵聽。
$ netstat -tlnup | grep -i 3306
示例輸出:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 168870/docker-proxy
tcp6 0 0 :::3306 :::* LISTEN 168878/docker-proxy
- -v→ 將卷附加到容器。docker 的默認(rèn)行為是一旦容器被移除就不會(huì)持久化數(shù)據(jù),因此您將丟失所有數(shù)據(jù)。
為了創(chuàng)建持久存儲(chǔ),我創(chuàng)建了名為“ mysql_volume”的卷。MySQL 將數(shù)據(jù)存儲(chǔ)在/var/lib/mysql/容器內(nèi),并在此處映射到 localhost 目錄/var/lib/docker/volumes/mysql_volume1/_data
,因此您的數(shù)據(jù)將是持久的。
- -d→ 將以分離模式啟動(dòng)和運(yùn)行容器。如果省略該-d標(biāo)志,那么您將在終端中看到容器啟動(dòng)日志,您必須打開一個(gè)新的終端會(huì)話才能連接到容器。
- -e→ 環(huán)境變量。您必須使用以下任一參數(shù)設(shè)置 mysql root 用戶密碼。
- MYSQL_ROOT_PASSWORD → 使用此環(huán)境變量設(shè)置您自己的密碼。
- MYSQL_ALLOW_EMPTY_PASSWORD→ 將設(shè)置空白或空密碼。你必須設(shè)置MYSQL_ALLOW_EMPTY_PASSWORD=1.
- MYSQL_RANDOM_ROOT_PASSWORD→ 容器啟動(dòng)時(shí)會(huì)生成隨機(jī)密碼。您必須設(shè)置MYSQL_RANDOM_ROOT_PASSWORD=1生成隨機(jī)密碼。
如果跳過此步驟,則會(huì)引發(fā)如下所示的錯(cuò)誤。
4. 檢查 MySQL 容器狀態(tài)
您可以使用以下命令檢查啟動(dòng)的容器狀態(tài):
$ docker ps
示例輸出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e1fb895f6f0f mysql "docker-entrypoint.s..." 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
5.連接到MySQL數(shù)據(jù)庫(kù)
運(yùn)行以下命令連接到 MySQL 容器。
$ docker exec -it mysql bash
root通過運(yùn)行以下命令以用戶身份連接到 MySQL 數(shù)據(jù)庫(kù)。就我而言,我已經(jīng)通過MYSQL_ROOT_PASSWORD.
$ mysql -u root -p
如果您MYSQL_RANDOM_ROOT_PASSWORD=1在啟動(dòng)容器時(shí)使用過,那么您可以從日志中獲取自動(dòng)生成的密碼。
$ docker logs
$ docker logs mysql
自動(dòng)生成的root密碼會(huì)很長(zhǎng),不需要記住。您可以通過運(yùn)行以下查詢來重置 root 密碼。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysqlpassword';
將密碼“mysqlpassword”替換為您自己的密碼。您還可以創(chuàng)建自己的用戶并根據(jù)需要授予他權(quán)限。
6. 加載樣本數(shù)據(jù)
設(shè)置 mysql 的主要目的是加載一些數(shù)據(jù)并對(duì)其運(yùn)行查詢。有幾種方法可以加載數(shù)據(jù)。我有一個(gè)名為“ load_data.sql”的示例文件,其中包含以下查詢。
如果不存在足球,則創(chuàng)建數(shù)據(jù)庫(kù);
CREATE DATABASE IF NOT EXISTS football;
USE football;
CREATE TABLE IF NOT EXISTS players (
player_name VARCHAR(16) NOT NULL,
player_age INT NOT NULL,
player_club VARCHAR(16) NOT NULL,
player_country VARCHAR(16) NOT NULL
);
INSERT INTO players VALUES ("Messi",34,"PSG","Argentina");
INSERT INTO players VALUES ("Ronaldo",36,"MANU","Portugal");
INSERT INTO players VALUES ("Neymar",29,"PSG","Brazil");
INSERT INTO players VALUES ("Kane",28,"SPURS","England");
INSERT INTO players VALUES ("E Hazard",30,"MADRID","Belgium");
第一種方法是使用“ docker cp”命令將數(shù)據(jù)從本地機(jī)器復(fù)制到 docker 容器。
$ docker cp load_data.sql mysql:/tmp
$ docker exec -it mysql bash
$ ls -l /tmp/
現(xiàn)在您可以連接到 mysql 客戶端并運(yùn)行 source 命令或?qū)⑽募囟ㄏ虻?mysql 客戶端。
$ mysql -u root -p
mysql> source /tmp/load_data.sql
或者
$ mysql -u root -p < /tmp/load_data.sql
連接到數(shù)據(jù)庫(kù)并查詢您的表。
$ mysql -u root -p
mysql> show databases;
mysql> use football;
mysql> show tables;
mysql> select * from players;
第二種方法是.sql在運(yùn)行docker exec命令時(shí)重定向文件。
$ docker exec -i mysql mysql -u root -p < load_data.sql
7. 使用 Docker-Compose 設(shè)置 MySQL 容器
docker run您可以使用docker-compose快速啟動(dòng)容器,而不是拉取鏡像并運(yùn)行命令。當(dāng)您要?jiǎng)?chuàng)建多個(gè)容器時(shí),Docker-compose 最適合。
創(chuàng)建一個(gè)名為docker-compose.yml或docker-compose.yaml文件的文件。復(fù)制并粘貼以下 yaml 代碼。
version: '3.8'
services:
database:
image: mysql:latest
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: temp1234
ports:
- "3306:3306"
volumes:
- mysql_volume:/var/lib/mysql
volumes:
mysql_compose_volume:
現(xiàn)在運(yùn)行以下命令,這將啟動(dòng) MySQL docker 容器。
$ docker-compose up
運(yùn)行以下命令以使用 docker-compose 檢查已啟動(dòng)容器的狀態(tài):
$ docker-compose ps
示例輸出:
Name Command State Ports
-------------------------------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp,:::3306->3306/tcp, 33060/tcp
8. 使用 MySQL Workbench 連接到 MySQL 數(shù)據(jù)庫(kù)
到目前為止,我們已經(jīng)看到了如何從容器內(nèi)部使用 mysql 客戶端連接到數(shù)據(jù)庫(kù)。您還可以使用任何 GUI 客戶端(如 mysql workbench、dbeaver、Heidi SQL 等)連接到數(shù)據(jù)庫(kù)。
無論您使用什么 GUI 客戶端,都要注意的重要一點(diǎn)是,啟動(dòng)容器時(shí)映射的端口是什么。
就我而言,我已經(jīng)映射了localhost ( 3306) ->容器( 3306)。所以如果我必須建立到數(shù)據(jù)庫(kù)的連接,我必須連接到localhost:3306或127.0.01:3306。
我使用 MySQL Workbench 作為我的 GUI 客戶端,如果您還沒有在您的機(jī)器上安裝 MySQL Workbench,那么您可以使用以下說明進(jìn)行安裝。
8.1. 在 Linux 中安裝 MySQL Workbench
導(dǎo)航到官方站點(diǎn)下載包文件,您必須選擇您的操作系統(tǒng)才能下載.deb或.rpm文件。
在下一步中,它會(huì)要求您登錄或注冊(cè),您可以通過單擊“不,謝謝,只需開始我的下載”選項(xiàng)跳過登錄或注冊(cè)。
在基于 Debian 的系統(tǒng)上,安裝 MySQL Workbench,如下所示:
$ cd
$ sudo apt install ./mysql-workbench-community_8.0.27-1ubuntu21.04_amd64.deb
在基于 RHEL 的系統(tǒng)上,安裝 MySQL Workbench,如下所示:
$ cd
$ sudo dnf localinstall ./mysql-workbench-community-8.0.27-1.el8.x86_64.rpm
安裝完成后,您可以從菜單或破折號(hào)啟動(dòng) mysql 工作臺(tái)。
8.2. 連接到 MySQL 數(shù)據(jù)庫(kù)
連接到在 docker 容器內(nèi)運(yùn)行的數(shù)據(jù)庫(kù),您應(yīng)該嘗試連接到localhost:3306或localhost:取決于您的容器的設(shè)置方式。
在連接到數(shù)據(jù)庫(kù)之前,您可以按“測(cè)試連接”來檢查 MySQL Workbench 是否能夠成功連接到數(shù)據(jù)庫(kù)實(shí)例。
現(xiàn)在您可以開始針對(duì)您創(chuàng)建的表運(yùn)行查詢。
9. 結(jié)論
在本文中,我們簡(jiǎn)要了解了如何在 docker 中啟動(dòng) MySQL 容器的使用docker run和docker-compose方法,如果你想設(shè)置 MySQL 用于測(cè)試或?qū)W習(xí)目的,Docker 就足夠了。
-
Linux
+關(guān)注
關(guān)注
87文章
11345瀏覽量
210397 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3846瀏覽量
64685 -
容器
+關(guān)注
關(guān)注
0文章
499瀏覽量
22120 -
MySQL
+關(guān)注
關(guān)注
1文章
829瀏覽量
26743
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論