文章主人公:帥哥BUG???
文章路人: 路人???? 路人???
目錄
一.安裝mysql并配置文件
1.下載相關(guān)鏡像
2.在宿主機(jī)中創(chuàng)建相關(guān)目錄,用于掛載容器的相關(guān)數(shù)據(jù)
3.conf目錄
4.data目錄(創(chuàng)建mysql5.7容器)
二.使用Navicat遠(yuǎn)程連接mysql容器
1.ip addr 獲取ip
2.點(diǎn)擊連接選擇MySql
3.輸入ip,密碼123456
4.點(diǎn)擊測試一下連接
三.mysql容器的持久化測試
1.新建一個(gè)數(shù)據(jù)庫
?2.刪除移除mysql容器
3.再次創(chuàng)建mysql容器
一.安裝mysql并配置文件
1.下載相關(guān)鏡像
docker pull mysql/mysql-server:5.7
注:指令解釋
mysql/mysql-serve:鏡像的倉庫名稱和鏡像名稱
?后面的mysql標(biāo)簽是版本號,可選擇,有:5.5/5.6/5.7/8.0
常見的mysql的版本是5.幾和 8.幾的
2.在宿主機(jī)中創(chuàng)建相關(guān)目錄,用于掛載容器的相關(guān)數(shù)據(jù)
??:為什么要掛載容器的相關(guān)數(shù)據(jù)???
??:容器里面是不能存放重要文件的,如果容器被刪除,容器里的數(shù)據(jù)將不復(fù)存在,
假設(shè)1:容器掛載了一個(gè)宿主機(jī)目錄,容器和宿主機(jī)的目錄是同步的,那么數(shù)據(jù)也是同步的,就算我們不小心刪除了容器,沒事!,創(chuàng)建一個(gè)容器再次掛載之前的宿主機(jī)目錄,容器好是有之前的數(shù)據(jù)
假設(shè)2:容器是基于鏡像創(chuàng)建的,那么好,下方圖中是兩種基礎(chǔ)鏡像,
容器a是基于apline創(chuàng)建的
容器b是基于centos創(chuàng)建的
要執(zhí)行 vi 或 vim 編輯文件的時(shí)候
容器b有較完整的系統(tǒng)可以編輯文件,
但是容器a不能編輯文件,
因?yàn)楦鶕?jù)alpine鏡像創(chuàng)建的容器系統(tǒng)是不完整的,還要自己去下載,
但是我們可以讓容器a掛載宿主機(jī)目錄,我們在宿主機(jī)目錄或者文件夾當(dāng)放上配置文件或指令
在容器創(chuàng)建的時(shí)候掛載宿主機(jī)目錄,就算在容器基于鏡像alpine創(chuàng)建之后里面的指令不完善,但是由于容器掛載了宿主機(jī)目錄,還是可以正常執(zhí)行指令的,
??:我不能直接配置文件或著指令下載到容器里面嗎?
??:可以,但是如果你再次創(chuàng)建容器的時(shí)候,這些配置文件和和指令還要重新下載,但是我們在宿主機(jī)目錄或者文件夾當(dāng)放上配置文件或指令,容器再次創(chuàng)建的時(shí)候去掛載宿主機(jī)目錄就可以了,不用去重復(fù)的操作,
?創(chuàng)建目錄專門用來放mysql的數(shù)據(jù),給容器掛載
mkdir -p /data/mysql/{conf,data}
注:指令解釋
mkdir:新建文件夾的意思
-p 多級創(chuàng)建? 就算沒有data文件夾或者mysql,也會(huì)幫你自動(dòng)創(chuàng)建
{conf,data}:在mysql目錄下創(chuàng)建兩個(gè)文件
cd 進(jìn)入? ? ll 查看?
3.conf目錄
必須提前上傳my.cnf文件到/data/conf目錄 并且它與window中的配置文件my.ini后綴名是不一樣
?my.cnf是配置文件里面內(nèi)容如下:
[client]
default-character-set=utf8
?
[mysql]
default-character-set=utf8
?
[mysqld]
##官方的配置
skip-host-cache
skip-name-resolve#datadir=/var/lib/mysql?。。。。。。。。∵@是容器當(dāng)中mysql的存儲位置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
symbolic-links=0log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
# default: sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# modeified:?
sql_mode= STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_allowed_packet=10M
default-time_zone='+8:00'
default_authentication_plugin=mysql_native_password
我用的是連接工具 可以直接復(fù)制進(jìn)去 , 你們可以用rz上傳,顯示沒有rz命令可以去網(wǎng)上找選擇方法
4.data目錄(創(chuàng)建mysql5.7容器)
數(shù)據(jù)保存到宿主機(jī)中,下次需要的時(shí)候重啟容器,原有數(shù)據(jù)都能被加載,不會(huì)丟失數(shù)據(jù)?
? 創(chuàng)建mysql5.7容器
docker run -p 3306:3306\
?--name mysql \
?-v /data/mysql/conf/my.cnf:/etc/my.cnf \
?-v /data/mysql/data:/var/lib/mysql \
?--privileged=true \
?--restart=always \
?-e MYSQL_ROOT_PASSWORD=123456 \
?-d mysql/mysql-server:5.7指令解釋:
\ :是換行的意思
run:創(chuàng)建并運(yùn)行
ip:用宿主機(jī)的3306映射容器的3306
--name:給容器取名字
-v:是進(jìn)行目錄掛載??
-v /data/mysql/conf/my.cnf:/etc/my.cnf? ??意思是把宿主機(jī)的my.cnf掛載到容器的myc.nf,容器沒有這個(gè)文件會(huì)自動(dòng)創(chuàng)建
-v /data/mysql/data:/var/lib/mysql? ?把宿主機(jī)的data文件夾和容器的數(shù)據(jù)存儲位置掛載到一起,/var/lib/mysql 這個(gè)目錄要和my.cnf配置的路徑一樣哦
--privileged=true:讓里面的用戶有權(quán)限。使用該參數(shù),container內(nèi)的root擁有真正的root權(quán)限,?否則,container內(nèi)的root只是外部的一個(gè)普通用戶權(quán)限
--restart=always:可以不用這個(gè)指令
表示當(dāng)前是否進(jìn)行重啟,一直重啟或者總是重啟
容器自動(dòng)啟動(dòng)參數(shù),其值可以為[no,on-failure,always]
? ? ? ? ? ? ? ? ? ? ? no為默認(rèn)值,表示容器退出時(shí),docker不自動(dòng)重啟容器
? ? ? ? ? ? ? ? ? ? ? on-failure表示,若容器的退出狀態(tài)非0,則docker自動(dòng)重啟容器,
? ? ? ? ? ? ? ? ? ? ? 還可以指定重啟次數(shù),若超過指定次數(shù)未能啟動(dòng)容器則放棄
? ? ? ? ? ? ? ? ? ? ? always表示,只要容器退出,則docker將自動(dòng)重啟容器?-e MYSQL_ROOT_PASSWORD=123456:設(shè)置root的密碼
-d mysql/mysql-server:5.7:后臺啟動(dòng)模式及使用的鏡像 ?
?我們在創(chuàng)建完容器之后 cd 進(jìn)入data ll 查看 ,可以看到生成了很多文件,這是msql自動(dòng)給你放進(jìn)來的
5.進(jìn)入容器mysql
docker exec -it mysql bash
6.登錄mysql
mysql -uroot -p? ?密碼:123456
?7.修改mysql允許Navicat遠(yuǎn)程連接
(1).查看四個(gè)庫
show databases;
msql這個(gè)庫是比較重要的 是跟用戶相關(guān)的數(shù)據(jù)
(2).使用mysql庫
use mysql;
(3).查看用戶表所有信息
select * from user;
?(4).查看用戶表user中的字段user和host所有信息
select user,host from user;
?可以看到有一個(gè)root用戶,其他三個(gè)是不能用的,可以自己去新建一個(gè),我們主要看root后面的host,host表示當(dāng)前能夠登錄的主機(jī),localhost表是本地進(jìn)行登錄,如果你希望root在任何地方都能進(jìn)行遠(yuǎn)程登錄可以改成%,如果希望太某個(gè)ip登錄可以,那你可以把這個(gè)IP給它寫死
??(5).給用戶授權(quán)
?grant all privileges on *.* to root@'%' identified by '123456';?
我們把root主機(jī)改成%好號之后就意味著,這個(gè)用戶可以遠(yuǎn)程登錄了
在使用select user,host from user;?查看字段信息 root 的主機(jī)變成%了
??(5).把權(quán)限重新更新
?flush privileges;
?更新權(quán)限后,外部就可以使用native進(jìn)行連接了
二.使用Navicat遠(yuǎn)程連接mysql容器
連接軟件有很多,我用的是Navicat
1.ip addr 獲取ip
2.點(diǎn)擊連接選擇MySql
3.輸入ip,密碼123456
4.點(diǎn)擊測試一下連接
歐克 ,連接到了?,我們現(xiàn)在持久化測試一下看看
三.mysql容器的持久化測試
1.新建一個(gè)數(shù)據(jù)庫
在數(shù)據(jù)庫里面創(chuàng)建一個(gè)表aa編寫兩個(gè)字段id和name?
?錄入一點(diǎn)數(shù)據(jù)
?2.刪除移除mysql容器(測試一下數(shù)據(jù)是否會(huì)消失)
直接刪除移除mysql容器,在重新創(chuàng)建
docker rm -f mysql?
刪除之后我們在去Navicat刷新一下,發(fā)現(xiàn)出bug了,如果按照以前的方式去使用容器,容器一刪除,數(shù)據(jù)就會(huì)消失不見了,
3.再次創(chuàng)建mysql容器
docker run -p 3306:3306 --name mysql -v /data/mysql/conf/my.cnf:/etc/my.cnf -v /data/mysql/data:/var/lib/mysql --privileged=true --restart=always -e MYSQL_ROOT_PASSWORD=123456 -d mysql/mysql-server:5.7
?創(chuàng)建之后我們在去Navicat刷新一下,又有數(shù)據(jù)了,就意味著我們就算把容器給刪除了,數(shù)據(jù)也不會(huì)丟失,再次創(chuàng)建的時(shí)候還有數(shù)據(jù)
數(shù)據(jù)還在的原理是,我們所有的MySQL數(shù)據(jù)都沒有放在人里面,而是放在了temp文件里?
我們cd 進(jìn)入?/data/mysql/data 使用 ll 查看可以發(fā)現(xiàn) temp 文件 數(shù)據(jù)都在temp里面
容器因?yàn)閽燧d了宿主機(jī)目錄!只要宿主機(jī)的數(shù)據(jù)還在,那不管容器在怎么刪除,也不會(huì)丟失數(shù)據(jù),
?我們可以備份一下temp文件
mysqldump -uroot -p123456 temp > a.sql
mysqldump:備份
-uroot -p123456:登錄mysql 密碼是123456?
temp:要備份的文件
a.sql:備份到a.sql里面
ls 查看一下 ,可以看到有這個(gè)備份文件了,但是不行,因?yàn)楝F(xiàn)在的備份文件在容器里,容器一刪除,備份文件就沒了
我們可以在宿主機(jī)專門創(chuàng)建一個(gè)文件夾放備份文件
這個(gè)操作和在Navicat
是一樣的道理
好啦 文章內(nèi)容到這里就結(jié)束了? 你學(xué)到了嗎??
覺得有用的記得關(guān)注點(diǎn)贊加收藏哦? 我的Docker專欄還有其他關(guān)于Dokcer的技術(shù)點(diǎn)哦~
我敲BUG的Docker專欄:http://t.csdn.cn/ypXDz文章來源:http://www.zghlxwxcb.cn/news/detail-773733.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-773733.html
到了這里,關(guān)于Docker安裝mysql&&使用Navicat遠(yuǎn)程連接mysql容器&&mysql容器的持久化測試的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!