Docker搭建MySQL的實(shí)現(xiàn)示例
準(zhǔn)備工作
- 先準(zhǔn)備配置目錄和持久化目錄,舉個(gè)栗子:
mkdir -p /opt/module/mysql/{conf,data,log}
- 準(zhǔn)備配置文件
*.cnf
,放到/opt/module/mysql/conf
目錄下。 - 當(dāng)然不準(zhǔn)備也沒事,容器中有個(gè)默認(rèn)配置:
/etc/mysql/conf.d/my.cnf
拉取官方MySQL鏡像
# 拉取 mysql8.0.33 docker pull mysql:8.0.33 docker pull mysql:5.7 # 拉取最新版mysql鏡像 docker pull mysql
運(yùn)行鏡像【安裝MySQL8.0】
docker run -d -p 3306:3306 --name mysql \ -v /opt/module/mysql/conf:/etc/mysql/conf.d \ -v /opt/module/mysql/data:/var/lib/mysql \ -v /opt/module/mysql/log:/var/log/mysql \ -e MYSQL_ROOT_PASSWORD=root mysql:8.0.33
-d 表示后臺(tái)啟動(dòng);
-p 3306:3306 表示端口映射,前面是主機(jī)端口,后面是代表容器端口;
--name mysql 表示容器名稱;
-v /opt/module/mysql/conf:/etc/mysql/conf.d 掛載配置文件,前面是主機(jī)目錄,后面是容器內(nèi)目錄。
特別說明:
- MySQL默認(rèn)配置文件為/etc/mysql/my.cnf,該文件里面最后有一行!includedir /etc/mysql/conf.d/,表示包含該文件夾下面的*.cnf配置,故自定義配置放到該目錄下即可;
- 比較常用的方式是-v /opt/module/mysql/conf/my.cnf:/etc/mysql/my.cnf,直接掛載/opt/module/mysql/conf/my.cnf替換掉/etc/mysql/my.cnf文件;
- 兩種方式都行,個(gè)人更喜歡前一種;
-v /opt/module/mysql/data:/var/lib/mysql 掛載數(shù)據(jù)文件,前面是主機(jī)目錄,后面是容器內(nèi)目錄;
-v /opt/module/mysql/log:/var/log/mysql 掛載數(shù)據(jù)文件,前面是主機(jī)目錄,后面是容器內(nèi)目錄;
-e MYSQL_ROOT_PASSWORD=root 表示增加環(huán)境變量,等號(hào)前面是變量名稱,這里是設(shè)置密碼為root;
mysql:8.0.31 表示鏡像名稱和tag;
設(shè)置mysql開機(jī)自啟
#查看是否運(yùn)行 docker ps -a #設(shè)置mysql開機(jī)自啟 sudo docker update mysql --restart=always
查看啟動(dòng)日志
#docker logs [服務(wù)id/服務(wù)名] docker logs mysql docker logs -f -t --tail 20 mysql
進(jìn)入MySQL容器內(nèi)部
docker ps -a # 查看正在運(yùn)行的容器,并得到 容器id # 進(jìn)入mysql容器內(nèi)部 docker exec -it [容器id] /bin/bash # 中間那個(gè)是容器id 就是 CONTAINER_ID # -it 表示進(jìn)入
docker exec -it mysql bash docker exec -it mysql /bin/bash
# 使用 命令別名 開啟 ll命令 cat <<EOF >> /etc/profile alias ll='ls -l --color=tty' alias grep='grep --color=auto' EOF
檢查
# 執(zhí)行如下命令可以登錄MySQL docker exec -it mysql mysql -uroot -p #回車后輸入密碼進(jìn)入MySQL # 執(zhí)行相關(guān)MySQL語句查詢 show databases; #回車
配置my.cnf
cat <<EOF >> /opt/module/mysql/conf/my.cnf [client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8 EOF
查看docker下的ip地址
docker inspect [container_id 容器id] 或 docker inspect [container_id 容器id] | grep ip address docker inspect --format='{{.NetworkSettings.IPAddress}}' [container_id 容器id]
查看防火墻【開放端口】
# 查詢端口是否開放 firewall-cmd --query-port=3306/tcp # 開放3306端口 firewall-cmd --permanent --add-port=3306/tcp # 移除端口 firewall-cmd --permanent --remove-port=3306/tcp # 重啟防火墻(修改配置后要重啟防火墻) firewall-cmd --reload # 查看已經(jīng)開發(fā)那些端口 firewall-cmd --list-ports firewall-cmd --zone=public --list-ports
卸載
#停止mysql服務(wù)(也可以停止其他) #docker stop [容器id/容器名] docker stop mysql #刪除mysql服務(wù)(也可以刪除其他) #docker rm [服務(wù)id/服務(wù)名] docker rm mysql #刪除mysql鏡像 #docker rmi [鏡像id/鏡像名] docker rmi mysql
常見錯(cuò)誤
mysql Tablespace exists解決 1813 - Tablespace ‘xx.xx`’ exists.
執(zhí)行如下命令:
mysql> show global variables like "%datadir%"; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.03 sec)
去這個(gè)目錄(/var/lib/mysql/ )下面找 表名.idb 文件,刪除該.ibd文件文件后,再重新創(chuàng)建表就沒有問題了
補(bǔ)充MySQL權(quán)限操作
MySQL中:
創(chuàng)建hadoop用戶,密碼為:root
給hadoop用戶,分配可以操作AAA、BBB數(shù)據(jù)庫權(quán)限
開啟hadoop用戶的遠(yuǎn)程訪問權(quán)限
在MySQL中,你可以通過以下步驟來完成上述任務(wù):
創(chuàng)建用戶并設(shè)置密碼:
CREATE USER 'hadoop'@'localhost' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;
這將在本地創(chuàng)建一個(gè)名為’hadoop’的用戶,并設(shè)置密碼為’root’。如果要允許從任何主機(jī)遠(yuǎn)程訪問,可以使用以下命令:
CREATE USER 'hadoop'@'%' IDENTIFIED BY 'root'; FLUSH PRIVILEGES;
給用戶分配數(shù)據(jù)庫權(quán)限【指定數(shù)據(jù)庫】:
GRANT ALL PRIVILEGES ON AAA.* TO 'hadoop'@'localhost'; GRANT ALL PRIVILEGES ON BBB.* TO 'hadoop'@'localhost'; FLUSH PRIVILEGES;
這將授予用戶’hadoop’在本地對(duì)數(shù)據(jù)庫’AAA’和’BBB’的全部權(quán)限。如果要允許從任何主機(jī)遠(yuǎn)程訪問,可以使用以下命令:
GRANT ALL PRIVILEGES ON AAA.* TO 'hadoop'@'%'; GRANT ALL PRIVILEGES ON BBB.* TO 'hadoop'@'%'; FLUSH PRIVILEGES;
給用戶分配數(shù)據(jù)庫權(quán)限【全部數(shù)據(jù)庫】:
如果你想給hadoop
用戶分配可以操作所有數(shù)據(jù)庫的權(quán)限,你可以使用通配符*
。以下是在MySQL中授予用戶對(duì)所有數(shù)據(jù)庫的全部權(quán)限的方法:
-- 在localhost上授予權(quán)限 GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'localhost' WITH GRANT OPTION; -- 允許遠(yuǎn)程訪問時(shí),使用以下語句 GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'%' WITH GRANT OPTION;
上述語句中,*.*
表示所有數(shù)據(jù)庫的所有表。WITH GRANT OPTION
表示hadoop
用戶將擁有授予權(quán)限給其他用戶的權(quán)限。
請(qǐng)注意,給予用戶對(duì)所有數(shù)據(jù)庫的全部權(quán)限可能存在安全風(fēng)險(xiǎn),因此在生產(chǎn)環(huán)境中應(yīng)該仔細(xì)考慮授權(quán)策略,只授予用戶實(shí)際需要的最小權(quán)限。
開啟遠(yuǎn)程訪問權(quán)限:
默認(rèn)情況下,MySQL用戶只能從本地連接。為了允許遠(yuǎn)程連接,你需要修改MySQL配置文件,并重新啟動(dòng)MySQL服務(wù)。
打開MySQL配置文件,一般在/etc/mysql/my.cnf
或/etc/my.cnf
。找到并注釋掉或修改如下行:
#bind-address = 127.0.0.1
將上述行注釋掉或者將127.0.0.1
改成服務(wù)器的IP地址。然后保存文件。
重啟MySQL服務(wù):
sudo service mysql restart
請(qǐng)注意,為了安全考慮,最好只允許特定IP地址范圍訪問MySQL。如果是在生產(chǎn)環(huán)境中使用,還應(yīng)該考慮使用SSH隧道或SSL來加密連接。
補(bǔ)充內(nèi)容Docker安裝MySQL5.7
準(zhǔn)備工作
- 先準(zhǔn)備配置目錄和持久化目錄,舉個(gè)栗子:
mkdir -p /opt/module/mysql/{conf,data,log}
- 準(zhǔn)備配置文件
*.cnf
,放到/opt/module/mysql/conf
目錄下。 - 當(dāng)然不準(zhǔn)備也沒事,容器中有個(gè)默認(rèn)配置:
/etc/mysql/conf.d/my.cnf
精簡(jiǎn)版
安裝MySQL 5.7 可以通過 Docker 進(jìn)行,以下是通過 Docker 安裝 MySQL 5.7 的基本步驟:
安裝 Docker:如果你還沒有安裝 Docker,請(qǐng)先安裝 Docker。你可以在 Docker 官網(wǎng) 上找到適合你操作系統(tǒng)的安裝說明。
拉取 MySQL 5.7 鏡像:打開終端(命令行界面)并運(yùn)行以下命令拉取 MySQL 5.7 鏡像:
docker pull mysql:5.7
運(yùn)行 MySQL 容器:運(yùn)行以下命令創(chuàng)建并啟動(dòng)一個(gè) MySQL 容器:
docker run -d --name=mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password mysql:5.7
這里,將
your_password
替換為你想要設(shè)置的 MySQL root 用戶的密碼。-d
表示在后臺(tái)運(yùn)行容器。--name=mysql-5.7
給容器起一個(gè)名字,這里是mysql-5.7
,你可以根據(jù)需要更改。-p 3306:3306
將容器的 MySQL 服務(wù)端口映射到主機(jī)的 3306 端口。-e MYSQL_ROOT_PASSWORD=your_password
設(shè)置 MySQL root 用戶的密碼。
進(jìn)入 MySQL 容器:如果你想在容器內(nèi)執(zhí)行一些 MySQL 命令,可以使用以下命令進(jìn)入容器:
docker exec -it mysql-5.7 mysql -uroot -p
輸入你在第 3 步中設(shè)置的密碼,然后你就可以在容器內(nèi)使用 MySQL 了。
現(xiàn)在,你已經(jīng)成功在 Docker 中安裝并運(yùn)行了 MySQL 5.7。請(qǐng)注意,這是一個(gè)簡(jiǎn)單的配置,生產(chǎn)環(huán)境中可能需要更多的配置選項(xiàng),如數(shù)據(jù)卷、持久化存儲(chǔ)等。
??進(jìn)階版
docker run -d -p 3306:3306 --name mysql-5.7 \ -v /opt/module/mysql/conf:/etc/mysql/conf.d \ -v /opt/module/mysql/data:/var/lib/mysql \ -v /opt/module/mysql/log:/var/log/mysql \ --restart=always --privileged=true \ -e MYSQL_ROOT_PASSWORD=root mysql:5.7
-d
: 表示以后臺(tái)模式運(yùn)行容器。-p 3306:3306
: 將主機(jī)的 3306 端口映射到容器的 3306 端口。--name mysql-5.7
: 為容器指定一個(gè)名字(mysql-5.7)。-v /opt/module/mysql/conf:/etc/mysql/conf.d
:將主機(jī)上的 MySQL 配置文件目錄/opt/module/mysql/conf
映射到容器內(nèi)的/etc/mysql/conf.d
目錄,以便你可以自定義 MySQL 的配置。【容器中MySQL配置文件:/etc/mysql/conf.d/my.cnf
】-v /opt/module/mysql/data:/var/lib/mysql
: 將主機(jī)上的 MySQL 數(shù)據(jù)目錄映射到容器內(nèi)的相應(yīng)位置。-v /opt/module/mysql/log:/var/log/mysql
: 將主機(jī)上的 MySQL 日志目錄映射到容器內(nèi)的相應(yīng)位置。--restart=always
: 表示容器在退出時(shí)總是重新啟動(dòng)。--privileged=true
: 這個(gè)選項(xiàng)賦予容器所有的 Linux 的 capabilities,并打開所有的 Linux Security Modules。在一般情況下,最好僅提供容器所需的最小權(quán)限。如果沒有特殊需求,建議不使用這個(gè)選項(xiàng)。
到此這篇關(guān)于Docker搭建MySQL的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Docker搭建MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL主從同步設(shè)置中主服務(wù)器二進(jìn)制日志無法開啟的問題
這篇文章主要介紹了MySQL主從同步設(shè)置中主服務(wù)器二進(jìn)制日志無法開啟的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12數(shù)據(jù)庫連接池以及sequelize實(shí)現(xiàn)增刪改查等操作指南
Sequelize的連接需要傳入?yún)?shù),并且可以配置開啟線程池、讀寫分庫等操作,下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)庫連接池以及sequelize實(shí)現(xiàn)增刪改查等操作的相關(guān)資料,需要的朋友可以參考下2022-08-08Mysql分組查詢每組最新一條數(shù)據(jù)的三種實(shí)現(xiàn)方法
我們?cè)陂_發(fā)中經(jīng)常會(huì)遇到分組查詢最新數(shù)據(jù)的問題,下面這篇文章主要給大家介紹了關(guān)于Mysql分組查詢每組最新一條數(shù)據(jù)的三種實(shí)現(xiàn)方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01關(guān)于clickhouse幾種create table的情況
這篇文章主要介紹了關(guān)于clickhouse幾種create table的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理詳解
在日常的數(shù)據(jù)庫維護(hù)中,在給客戶制定維護(hù)方案時(shí),都會(huì)有降低高水位此類的建議 建議每年年終定期做數(shù)據(jù)整理,下面這篇文章主要給大家介紹了關(guān)于MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理的相關(guān)資料,需要的朋友可以參考下2022-04-04Windows Server 2003 下配置 MySQL 集群(Cluster)教程
這篇文章主要介紹了Windows Server 2003 下配置 MySQL 集群(Cluster)教程,本文先是講解了原理知識(shí),然后給出詳細(xì)配置步驟和操作方法,需要的朋友可以參考下2015-06-06