Linux系統環境基於Docker搭建Mysql資料庫服務實戰

来源:https://www.cnblogs.com/mazhilin/archive/2020/07/01/13219807.html
-Advertisement-
Play Games

開放埠規劃: mysql-develop:3407 mysql-test: 3408 mysql-release: 3409 ps: 1.不推薦使用預設埠-3306,建議自定義埠 2.如果採用阿裡雲伺服器,在安全組開放埠 3.自建伺服器依據實際情況打開防火牆開放埠[各個系統防火牆不一樣,操 ...


開放埠規劃:

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

ps:
1.不推薦使用預設埠-3306,建議自定義埠
2.如果採用阿裡雲伺服器,在安全組開放埠
3.自建伺服器依據實際情況打開防火牆開放埠[各個系統防火牆不一樣,操作有所不同],譬如:
Centos7 環境-防火牆[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)設置開機啟用防火牆:systemctl enable firewalld.service
(2)設置開機禁用防火牆:systemctl disable firewalld.service
(3)啟動防火牆:systemctl start firewalld
(4)關閉防火牆:systemctl stop firewalld
(5)檢查防火牆狀態:systemctl status firewalld
二、使用firewall-cmd配置埠
(1)查看防火牆狀態: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 #添加埠,格式為:埠/通訊協議
  –permanent #永久生效,沒有此參數重啟後失效
  註意:添加埠後,必須用命令firewall-cmd --reload重新載入一遍才會生效
    firewall-cmd --zone=public --add-port=9200/tcp --permanent
(5)關閉防火牆埠: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服務:
1.簡單命令實例:[主要使用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 部署實例:使用docker-compose搭建
docker-compose.yml文件進行部署可從,github和碼雲等雲倉庫git clone 然後修改執行[docker-compose up -d]部署:
docker-compose.yml 配置實例:

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[預設3306]'

3.使用Docker Portainer可視化界面自建進行部署
NTqPts.jpg

Mysql8.0 資料庫配置

基於Docker安裝的資料庫安裝完成之後,只能在本地登錄,需要進行授權遠程訪問連接操作。

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

# 對自定義用戶進行授權操作
grant all privileges on *.* to 'username'@'%' with grant option;
>ps:grant all privileges on *.* to 'developer'@'%' with grant option;

# 刷新操作許可權[切記此點]
flush privileges;

進入[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數據操作授權之前得先自定義創建用戶,否則無法授權遠程登錄訪問
2.mysql8.0授權無法使用mysql5.7方式:
grant all privileges on . to 'developer'@'%' identified by '123456Abc@2019';
請使用: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.一定而且必須進行刷新許可權操作,否則無法生效,甚至無法授權遠程訪問

2.mysql8.0遠程訪問鏈接[root 和developer]

在 mysql 資料庫的 user 表中查看當前用戶的相關信息:

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>

修改加密規則:

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>

設置完成需要再次驗證用戶許可權信息:

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測試連接msql:
NTXbb8.png

ps[註意事項]:
1.mysql8.0版本加密規則插件的plugin 已經換為caching_sha2_password,而之前的版本的加密規則是mysql_native_password,經過實測已經不適用於Navicat 12以下版本,可依據自身情況升級客戶端到Navicat 12+,否則會報2059 或者1251 錯誤。

[Question-01].Navicat 2059錯誤:
NTqLE4.jpg

[Question-02].Navicat 1251錯誤:
NTL9KK.jpg

2.鑒於第一條的情況,可以將caching_sha2_password修改為mysql_native_password做一個相容,低版本也可適用。
3.修改加密規則,使得密碼長期有效。

完整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環境:
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

數據文件遷移操作

1.基於mysqldump+docker cp 命令進行操作

  • 方式1:直接在宿主機器進行數據備份
docker exec -it docker-id[容器實際部署id] mysqldump -u root -p passowrd --databases dbA dbB > /root/all-databases-backup.sql
  • 方式2:先進入到docker在執行mysqldump,然後再將導出的sql拷貝到宿主
#進入docker
docker exec -it docker-id[容器實際部署id] /bin/bash
#可選的
source /etc/profile
#執行導出命令
mysqldump -u username -p password --databases dbA dbB > /root/all-databases-backup.sql
#拷貝到宿主機器
#退出Docker,執行exit命令
exit
#此時,已經在宿主的環境,執行拷貝命令,將sql文件從docker紅拷貝出來
docker cp docker-id[容器實際部署id]: /root/all-databases-backup.sql  /root/all-databases-backup.sql

2.導入數據文件到容器

#拷貝備份的文件到docker中
docker cp /root/all-databases-backup.sql docker-id[容器實際部署id]:/root/all-databases-backup.sql
#先進入docker環境,然後導入到資料庫
docker exec -it xxx /bin/bash
mysql -u username -p password < /root/all-databases-backup.sql

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前端開發如何看待“別更新了,學不動了”?Deno、TypeScript 等新輪子層出不窮,未來前端重點方向在哪?前端開發在大前端浪潮下如何持續學習、成長? SpriteJS 3.0 的特性和規劃 SpriteJS 是由 360 奇舞團開源的跨平臺高性能圖形系統,它能夠支持 web、node、桌面應用 ...
  • 當下流行的前後端分離項目,常遇跨域問題,現從兩點,解決跨域問題 1.跨域本質:由於瀏覽器的同源策略 同源策略本是瀏覽器最基本的安全功能,是為了防止從一個域上載入另一個域上的信息,舉個例子:A有一個百寶箱,B有一個百寶箱,各自的百寶箱隨便取,但A要是取B的,或者B要是取A的,就會被拒絕 當協議,功能變數名稱, ...
  • 安裝了react-redux後,npm start報下麵錯誤 Failed to compile. ./node_modules/[email protected]@react-redux/es/connect/mapDispatchToProps.js Module not found: Can ...
  • 據統計,國外的前端開發人員和後端開發人員比例約為1:1,但是國內比例卻在1:3以下,web前端開發職位的人才缺口巨大。 根據網上統計數據,上海Web前端開發工程師這一職位的月平均收入為1.5萬元,工作經驗達到3年的web前端工程師甚至達到3萬元。 而且Web前端工程師一般工作1年左右,年薪一般就都能 ...
  • 作者:凹凸曼 - yuche 從 Taro 第一個版本發佈到現在,Taro 已經接受了來自於開源社區兩年多的考驗。今天我們很高興地在黨的生日發佈 Taro 3(Taro Next)正式版,希望 Taro 未來的更多兩年能像一名共產主義戰士一樣經受住更多的考驗。以下是 Taro 3 的一些新增特性: ...
  • css三大特性 層疊性: 如果一個屬性通過兩個相同選擇器設置到同一個元素上,相同的屬性就會出現衝突,那麼這個時候一個屬性就會將另一個屬性層疊掉,採用的是就近原則 繼承性: 子標簽會繼承父標簽的某些樣式 一般以font­,line­,color,text­,list­,都能繼承 備註 : a標簽不能繼 ...
  • 預覽地址 http://106.12.212.110:8077/#/ 上期我們說瞭如何創建項目並把各個項目的文件結構創建好後這期我們來說如何畫出圖中代寫線段 首先我們在src/components/Render.vue中添加一下引用 import zrender from 'zrender' imp ...
  • html簡述: HTML 指的是超文本標記語言 (Hyper Text Markup Language)是用來描述網頁的一種語言。 HTML 不是一種編程語言,而是一種標記語言 (markup language)。 標記語言是一套標記標簽 (markup tag)。 作用:網頁是由網頁元素組成的 , ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...