操作步驟
一、準(zhǔn)備工作
- 在 Linux 中建立對應(yīng)文件夾,用于存放MySql數(shù)據(jù)庫相關(guān),文件夾路徑:
/usr/local/software/mysql
。 - 在mysql文件下創(chuàng)建如下目錄結(jié)構(gòu)的文件:(3306為主數(shù)據(jù)庫文件夾,筆者這里以對端口號來命名;3310為從數(shù)據(jù)庫文件夾,3311同理,可依次往下)
- 上傳 my.cnf 文件到 conf 文件夾下
以下是 my.cnf 文件的內(nèi)容:
# Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# The MySQL Server configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
default_authentication_plugin=mysql_native_password
# Custom config should go here
!includedir /etc/mysql/conf.d/
server_id=200
-
將my.cnf文件拷貝到
3310/conf
,3311/conf
目錄下,目錄結(jié)構(gòu)如下: -
查詢 mysql 鏡像
對應(yīng)的docker指令:docker search mysql
-
拉取 mysql 鏡像到本地
對應(yīng)的docker指令:docker pull mysql
-
檢查是否下載成功
對應(yīng)的docker指令:docker image ls
- 在 docker 中創(chuàng)建運(yùn)行 mysql 的容器
docker run
-i:以交互模式運(yùn)行容器
-t:為容器重新分配一個偽輸入終端
—name :容器名稱
—privileged: 設(shè)置容器公開權(quán)限(默認(rèn)為true)
-p :映射端口 linux端口: 容器內(nèi)置端口(mysql默認(rèn)端口為3306)
-v : linux掛載文件夾/文件和容器內(nèi)路徑的映射
-e: 容器的環(huán)境變量(設(shè)置mysql默認(rèn)用戶名&密碼)
-d: 后臺運(yùn)行容器,并返回容器ID
docker run -it \
--name mysql_3306 \ #數(shù)據(jù)庫名稱
--privileged \
-p 3306:3306 \ #對應(yīng)端口號
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
以下是代碼運(yùn)行后的界面,出現(xiàn)一串無序字符代表創(chuàng)建成功。
- 進(jìn)入 mysql 容器
進(jìn)入我們上一步創(chuàng)建好的 mysql 容器 ,對應(yīng)指令:docker exec -it mysql_3306 bash
docker exec
-it:以交互模式運(yùn)行容器 ,為容器重新分配一個偽輸入終端。
bash: bash(GNU Bourne-Again Shell)是最常用的一種shell(運(yùn)行在終端的互動程序)。
成功進(jìn)入容器后,前綴會變化,如圖所示:
-
在容器中運(yùn)行mysql客戶端
完成上述步驟后,我們已經(jīng)成功在 docker 中創(chuàng)建了能夠運(yùn)行 mysql 的容器,接下來可以在 docker 中運(yùn)行 mysql 客戶端了。
輸入對應(yīng)指令,登錄 mysql 客戶端:mysql -u用戶名 -p密碼
退出 mysql 客戶端的指令:quit
退出容器的指令:exit
-
防火墻開放端口
這里如果不開放端口,會導(dǎo)致外部無法訪問。
開放指定端口:
對應(yīng)指令:firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd —zone=public —add-port=端口號/tcp —permanent
—zone: public 公開端口
—add-port: 端口號/協(xié)議名稱
—permanent: 永久開放
修改防火墻配置后,要重新加載防火墻:firewall-cmd --reload
查看開放的端口號的指令:firewall-cmd --zone=public --list-ports
- Navicat 測試連接
第一步:打開 Navicat,新建連接。
第二步:輸入對應(yīng)信息,點擊測試連接。彈出連接成功后即可!
注意這里的主機(jī)為運(yùn)行 docker 的虛擬機(jī)的 IP。
二、搭建 MySql 主數(shù)據(jù)庫(master)
- 配置 my.cnf 文件,配置完畢后重啟 docker。
通過
vim my.cnf
修改 my.cnf 文件,在文件末尾加入以下程序:
server_id=200 #服務(wù)器id
log_bin=mysql-bin #binlog名稱
binlog_format=row #binlog的格式
- 創(chuàng)建與從數(shù)據(jù)庫(slave)進(jìn)行服務(wù)通信的用戶
第一步:在 Navicat 中,新建查詢。
第二步:輸入以下mysql語句,并運(yùn)行。
-- 創(chuàng)建用戶 slave --
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password by '123';
-- 給用戶授權(quán) --
GRANT replication SLAVE,replication client ON *.* TO 'slave'@'%';
-- 應(yīng)用權(quán)限 --
FLUSH PRIVILEGES;
-
查詢 master 狀態(tài)
在查詢中輸入show master status
。 -
獲取 master IP地址
輸入指令:docker inspect mysql_3306 |grep IPA
三、搭建 MySql 從數(shù)據(jù)庫(slave)
- 配置
mysql/3310
路徑下的 my.cnf 文件,配置完畢后重啟 docker。
通過
vim my.cnf
修改 my.cnf 文件,在文件末尾加入以下程序:
server_id=201 #每個服務(wù)器的id都是唯一的,必須進(jìn)行修改!
log_bin=mysql-slave01-bin
relay_log=wnhz-relay-bin
read_only=1 #從數(shù)據(jù)庫不需要進(jìn)行增刪改等寫入操作,所以設(shè)為只讀
- 創(chuàng)建運(yùn)行從數(shù)據(jù)庫(slave)的容器
docker run -it \
--name mysql_3310 \
--privileged \
-p 3310:3306 \
-v /usr/local/software/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3310/data:/var/lib/mysql \
-v /usr/local/software/mysql/3310/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
這里要注意從數(shù)據(jù)庫的路徑與名稱都需要進(jìn)行修改!
以下是代碼運(yùn)行后的界面,出現(xiàn)一串無序字符代表創(chuàng)建成功。
-
開放防火墻端口
這一步在上面已經(jīng)執(zhí)行過相似的操作,這里同上。
打開對應(yīng)端口:firewall-cmd --zone=public --add-port=3310/tcp --permanent
重新加載防火墻:firewall-cmd --reload
-
Navicat 測試連接
這一步操作也與之前相同,這里也不再過多贅述,直接上圖。 -
關(guān)聯(lián)從數(shù)據(jù)庫(slave)與主數(shù)據(jù)庫(master)
進(jìn)入從數(shù)據(jù)庫(slave)容器中,輸入對應(yīng)指令 。
change master to
master_host='172.17.0.3',
master_user='slave',
master_password='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=855;
這里的 master_host 對應(yīng)之前查詢的 master 的 IP 地址。
-
開啟從數(shù)據(jù)庫(slave)
start slave;
-
查詢 slave 狀態(tài)
show slave status \G;
文章來源:http://www.zghlxwxcb.cn/news/detail-708148.html
-
功能測試
在主數(shù)據(jù)庫中建表,查看從數(shù)據(jù)庫中是否會自動生成相同的表 。文章來源地址http://www.zghlxwxcb.cn/news/detail-708148.html
到了這里,關(guān)于基于docker搭建MySql主從數(shù)據(jù)庫(詳細(xì)步驟)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!