Linux系統(tǒng)環(huán)境基于Docker搭建Mysql數(shù)據(jù)庫服務(wù)實(shí)戰(zhàn)

開放端口規(guī)劃:

  • mysql-develop:3407
  • mysql-test: 3408
  • mysql-release: 3409

ps:
1.不推薦使用默認(rèn)端口-3306疹吃,建議自定義端口
2.如果采用阿里云服務(wù)器,在安全組開放端口
3.自建服務(wù)器依據(jù)實(shí)際情況打開防火墻開放端口[各個(gè)系統(tǒng)防火墻不一樣,操作有所不同]甜橱,譬如:
Centos7 環(huán)境-防火墻[firewall-cmd]:

firewall-cmd --zone=public --add-port=3407/tcp --permanent
firewall-cmd --zone=public --add-port=3408/tcp --permanent
firewall-cmd --zone=public --add-port=3409/tcp --permanent

4.防火墻[firewall-cmd]常用操作

(1)設(shè)置開機(jī)啟用防火墻:systemctl enable firewalld.service
(2)設(shè)置開機(jī)禁用防火墻:systemctl disable firewalld.service
(3)啟動(dòng)防火墻:systemctl start firewalld
(4)關(guān)閉防火墻:systemctl stop firewalld
(5)檢查防火墻狀態(tài):systemctl status firewalld
二桐早、使用firewall-cmd配置端口
(1)查看防火墻狀態(tài):firewall-cmd --state
(2)重新加載配置:firewall-cmd --reload
(3)查看開放的端口:firewall-cmd --list-ports
(4)開啟防火墻端口:firewall-cmd --zone=public --add-port=9200/tcp --permanent
  命令含義:
  –zone #作用域
  –add-port=9200/tcp #添加端口锈遥,格式為:端口/通訊協(xié)議
  –permanent #永久生效纫事,沒有此參數(shù)重啟后失效
  注意:添加端口后,必須用命令firewall-cmd --reload重新加載一遍才會(huì)生效
    firewall-cmd --zone=public --add-port=9200/tcp --permanent
(5)關(guān)閉防火墻端口:firewall-cmd --zone=public --remove-port=9200/tcp --permanent

查找鏡像:docker search mysql

docker search mysql

拉取鏡像:docker pull mysql

docker pull mysql

ps:如果不是自建倉庫鏡像,一般從https://hub.docker.com/拉取官方鏡像:
docker pull mysql:5.7 # 拉取mysql 5.7
docker pull mysql # 拉取最新版mysql鏡像

部署mysql服務(wù):
1.簡單命令實(shí)例:[主要使用Docker原生命令部署]

docker run -itd -p 3306:3306 --restart always --name mysql-server   -e MYSQL_ROOT_PASSWORD=db-password -e MYSQL_USER=db-username  mysql:tag

2.使用docker-compose 部署實(shí)例:使用docker-compose搭建
docker-compose.yml文件進(jìn)行部署可從,github和碼云等云倉庫git clone 然后修改執(zhí)行[docker-compose up -d]部署:
docker-compose.yml 配置實(shí)例:

version: '2'
services:
  db:
    image: 'mysql/mysql-server:tag'
    restart: always
    container_name: mysql-server
    environment:
      MYSQL_USER: username
      MYSQL_PASSWORD: password
      MYSQL_DATABASE: database
      MYSQL_ROOT_PASSWORD: password
    ports:
      - 'server-port[自定義端口]: container-port[默認(rèn)3306]'

3.使用Docker Portainer可視化界面自建進(jìn)行部署


NTqPts.jpg

Mysql8.0 數(shù)據(jù)庫配置

基于Docker安裝的數(shù)據(jù)庫安裝完成之后所灸,只能在本地登錄,需要進(jìn)行授權(quán)遠(yuǎn)程訪問連接操作。

  • 1.創(chuàng)建用戶和授權(quán)
# 創(chuàng)建自定義myql用戶-username 和密碼-pssword
create user 'username'@'%' identified by 'pssword';
>ps:create user 'developer'@'%' identified by '123456Abc@2019';

# 對(duì)自定義用戶進(jìn)行授權(quán)操作
grant all privileges on *.* to 'username'@'%' with grant option;
>ps:grant all privileges on *.* to 'developer'@'%' with grant option;

# 刷新操作權(quán)限[切記此點(diǎn)]
flush privileges;

進(jìn)入[root@mysql-develop]容器:

root@mysql-develop:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.18 MySQL Community Server - GPL

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

mysql> use mysql;
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> create user 'developer'@'%' identified by '123456Abc@2019';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all privileges on *.* to 'developer'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

如圖:


NTqenU.jpg

ps:
1.mysql8.0數(shù)據(jù)操作授權(quán)之前得先自定義創(chuàng)建用戶炫七,否則無法授權(quán)遠(yuǎn)程登錄訪問
2.mysql8.0授權(quán)無法使用mysql5.7方式:
grant all privileges on . to 'developer'@'%' identified by '123456Abc@2019';
請(qǐng)使用:grant all privileges on . to 'developer'@'%' with grant option;

第一種:grant all privileges on . to 'developer'@'%' identified by '123456Abc@2019' with grant option;

mysql> use mysql
Database changed
mysql> grant all privileges on *.* to 'developer'@'%'  identified by '123456Abc@2019' with grant option;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123456Abc@2019' with grant option' at line 1

第二種:grant all privileges on . to 'developer'@'%' identified by 123456Abc@2019'爬立;

mysql> use mysql;
Database changed
mysql> grant all privileges on *.* to 'developer'@'%'  identified by '123456Abc@2019';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by '123456Abc@2019 at line 1
mysql>

3.一定而且必須進(jìn)行刷新權(quán)限操作,否則無法生效,甚至無法授權(quán)遠(yuǎn)程訪問

2.mysql8.0遠(yuǎn)程訪問鏈接[root 和developer]

在 mysql 數(shù)據(jù)庫的 user 表中查看當(dāng)前用戶的相關(guān)信息:

mysql> use mysql
Database changed
mysql> select host, user, authentication_string, plugin from user;
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| host      | user             | authentication_string                                                  | plugin                |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| %         | developer        | *F286F2787D69B007CFDE83C115325B2A6FF0B6D2                              | caching_sha2_password |
| %         | root             | *F286F2787D69B007CFDE83C115325B2A6FF0B6D2                              | caching_sha2_password |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
_Oo8xLxsqwEOxEkY1i7kToF8VbktysFDQuevvwYqsK61Qi7 | caching_sha2_password |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
6 rows in set (0.00 sec)
mysql>

root 用戶:

mysql> use mysql;
Database changed
mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456Abc@2019;
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

developer用戶:

mysql> use mysql;
Database changed
mysql> GRANT ALL ON *.* TO 'developer'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'developer'@'%' IDENTIFIED WITH mysql_native_password BY '123456Abc@2019';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>

修改加密規(guī)則:

mysql> use mysql
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> ALTER USER 'root'@'%' IDENTIFIED BY '123456Abc@2019' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER USER 'developer'@'%' IDENTIFIED BY '123456Abc@2019' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>

設(shè)置完成需要再次驗(yàn)證用戶權(quán)限信息:

mysql> use mysql
Database changed
mysql> select host, user, authentication_string, plugin from user;
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| host      | user             | authentication_string                                                  | plugin                |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| %         | developer        | *F286F2787D69B007CFDE83C115325B2A6FF0B6D2                              | mysql_native_password |
| %         | root             | *F286F2787D69B007CFDE83C115325B2A6FF0B6D2                              | mysql_native_password |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
_Oo8xLxsqwEOxEkY1i7kToF8VbktysFDQuevvwYqsK61Qi7 | caching_sha2_password |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
6 rows in set (0.00 sec)

mysql>

到此万哪,Navicat測(cè)試連接msql:


NTXbb8.png

ps[注意事項(xiàng)]:
1.mysql8.0版本加密規(guī)則插件的plugin 已經(jīng)換為caching_sha2_password侠驯,而之前的版本的加密規(guī)則是mysql_native_password,經(jīng)過實(shí)測(cè)已經(jīng)不適用于Navicat 12以下版本,可依據(jù)自身情況升級(jí)客戶端到Navicat 12+奕巍,否則會(huì)報(bào)2059 或者1251 錯(cuò)誤吟策。

[Question-01].Navicat 2059錯(cuò)誤:


NTqLE4.jpg

[Question-02].Navicat 1251錯(cuò)誤:


NTL9KK.jpg

2.鑒于第一條的情況,可以將caching_sha2_password修改為mysql_native_password做一個(gè)兼容,低版本也可適用的止。
3.修改加密規(guī)則檩坚,使得密碼長期有效。

完整sql記錄:

mysql> use mysql
mysql> create user 'developer'@'%' identified by '123456Abc@2019';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all privileges on *.* to 'developer'@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456Abc@2019';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL ON *.* TO 'developer'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER 'developer'@'%' IDENTIFIED WITH mysql_native_password BY '123456Abc@2019';
Query OK, 0 rows affected (0.01 sec)

mysql>  ALTER USER 'root'@'%' IDENTIFIED BY 'GuangDian@2019' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER USER 'developer'@'%' IDENTIFIED BY 'GuangDian@2019' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql>

3套mysql環(huán)境:
mysql-develop:
IP:192.168.0.1
Port:3407
Username:root/developer
password:123456Abc@2019

mysql-test:
IP:192.168.0.2
Port:3408
Username:root/developer
password:123456Abc@2019

mysql-release:
IP:192.168.0.3
Port:3409
Username:root/developer
password:123456Abc@2019

數(shù)據(jù)文件遷移操作

1.基于mysqldump+docker cp 命令進(jìn)行操作

  • 方式1:直接在宿主機(jī)器進(jìn)行數(shù)據(jù)備份
docker exec -it docker-id[容器實(shí)際部署id] mysqldump -u root -p passowrd --databases dbA dbB > /root/all-databases-backup.sql
  • 方式2:先進(jìn)入到docker在執(zhí)行mysqldump诅福,然后再將導(dǎo)出的sql拷貝到宿主
#進(jìn)入docker
docker exec -it docker-id[容器實(shí)際部署id] /bin/bash
#可選的
source /etc/profile
#執(zhí)行導(dǎo)出命令
mysqldump -u username -p password --databases dbA dbB > /root/all-databases-backup.sql
#拷貝到宿主機(jī)器
#退出Docker匾委,執(zhí)行exit命令
exit
#此時(shí),已經(jīng)在宿主的環(huán)境氓润,執(zhí)行拷貝命令赂乐,將sql文件從docker紅拷貝出來
docker cp docker-id[容器實(shí)際部署id]: /root/all-databases-backup.sql  /root/all-databases-backup.sql

2.導(dǎo)入數(shù)據(jù)文件到容器

#拷貝備份的文件到docker中
docker cp /root/all-databases-backup.sql docker-id[容器實(shí)際部署id]:/root/all-databases-backup.sql
#先進(jìn)入docker環(huán)境,然后導(dǎo)入到數(shù)據(jù)庫
docker exec -it xxx /bin/bash
mysql -u username -p password < /root/all-databases-backup.sql
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末咖气,一起剝皮案震驚了整個(gè)濱河市挨措,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崩溪,老刑警劉巖浅役,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悯舟,居然都是意外死亡担租,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門抵怎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奋救,“玉大人,你說我怎么就攤上這事反惕〕⑺遥” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵姿染,是天一觀的道長背亥。 經(jīng)常有香客問我秒际,道長,這世上最難降的妖魔是什么狡汉? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任娄徊,我火速辦了婚禮,結(jié)果婚禮上盾戴,老公的妹妹穿的比我還像新娘寄锐。我一直安慰自己,他們只是感情好尖啡,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布橄仆。 她就那樣靜靜地躺著,像睡著了一般衅斩。 火紅的嫁衣襯著肌膚如雪盆顾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天畏梆,我揣著相機(jī)與錄音您宪,去河邊找鬼。 笑死具温,一個(gè)胖子當(dāng)著我的面吹牛蚕涤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铣猩,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼揖铜,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了达皿?” 一聲冷哼從身側(cè)響起天吓,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峦椰,沒想到半個(gè)月后龄寞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汤功,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年物邑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滔金。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡色解,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出餐茵,到底是詐尸還是另有隱情科阎,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布忿族,位于F島的核電站锣笨,受9級(jí)特大地震影響蝌矛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜错英,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一入撒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧走趋,春花似錦衅金、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鉴吹。三九已至姨伟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豆励,已是汗流浹背夺荒。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留良蒸,地道東北人技扼。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像嫩痰,于是被迫代替她去往敵國和親剿吻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361