Docker配置MySql環(huán)境的實(shí)現(xiàn)步驟
一、簡單安裝
1. 首先從Docker Hub中拉取鏡像
這里我要安裝的是mysql8版本。
docker pull mysql:8.0.27
2. 啟動嘗試創(chuàng)建MySQL容器,并設(shè)置掛載卷。
docker run -p 3306:3306 \ --name mysql8 \ --privileged=true \ -v /app/mysql8/log:/var/log/mysql \ -v /app/mysql8/data:/var/lib/mysql \ -v /app/mysql8/conf:/etc/mysql/conf.d \ -v /app/mysql8/files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.27
--name mysql8
: 為容器指定一個名稱,這里是mysql8
--privileged=true
: 賦予容器更多的權(quán)限。在一般情況下,盡量避免使用--privileged
,因?yàn)樗鼤x予容器更多的權(quán)限,可能會帶來一些安全風(fēng)險(xiǎn)。-v /app/mysql8/log:/var/log/mysql
: 將主機(jī)上的/app/mysql8/log
目錄映射到容器內(nèi)的/var/log/mysql
,用于存儲MySQL的日志文件。-v /app/mysql8/data:/var/lib/mysql
: 將主機(jī)上的/app/mysql8/data
目錄映射到容器內(nèi)的/var/lib/mysql
,用于持久化存儲MySQL的數(shù)據(jù)。-v /app/mysql8/conf:/etc/mysql/conf.d
: 將主機(jī)上的/app/mysql8/conf
目錄映射到容器內(nèi)的/etc/mysql/conf.d
,用于提供自定義的MySQL配置文件。-v /app/mysql8/files:/var/lib/mysql-files
: 將主機(jī)上的/app/mysql8/files
目錄映射到容器內(nèi)的/var/lib/mysql-files
,用于存儲MySQL的文件。-e MYSQL_ROOT_PASSWORD=123456
: 設(shè)置MySQL root用戶的密碼為123456
。-d
: 后臺運(yùn)行容器。
3. 查看mysql8這個容器是否啟動成功
docker ps
4. 如果已經(jīng)成功啟動,進(jìn)入容器中簡單測試
4.1 進(jìn)入容器
docker exec -it mysql8 /bin/bash
4.2 登錄mysql中
mysql -uroot -p123456
4.3 進(jìn)行簡單添加查找測試
CREATE DATABASE mydatabase; USE mydatabase; CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL ); INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com'), ('jane_smith', 'jane@example.com'), ('bob_jones', 'bob@example.com'); SELECT * FROM users;
二、主從復(fù)制安裝
2.1 主服務(wù)創(chuàng)建配置
1. 主從服務(wù)容器創(chuàng)建,并且配置
ps:這里也默認(rèn)使用mysql8版本進(jìn)行安裝。
docker run -p 3307:3306 \ --name mysql-master \ --privileged=true \ -v /app/mysql-master/log:/var/log/mysql \ -v /app/mysql-master/data:/var/lib/mysql \ -v /app/mysql-master/conf:/etc/mysql/conf.d \ -v /app/mysql-master/files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.27
docker run
: 啟動一個新的Docker容器。-p 3307:3306
: 將主機(jī)的3307端口映射到容器的3306端口,這樣可以通過主機(jī)的3307端口訪問MySQL服務(wù)。--name mysql-master
: 為容器指定一個名稱,這里是mysql-master
。--privileged=true
: 賦予容器更高的權(quán)限。注意,一般情況下最好避免使用--privileged
,因?yàn)樗赡軙胍恍撛诘陌踩L(fēng)險(xiǎn)。-v /app/mysql-master/log:/var/log/mysql
: 將主機(jī)上的/app/mysql-master/log
目錄映射到容器內(nèi)的/var/log/mysql
,用于存儲MySQL的日志文件。-v /app/mysql-master/data:/var/lib/mysql
: 將主機(jī)上的/app/mysql-master/data
目錄映射到容器內(nèi)的/var/lib/mysql
,用于持久化存儲MySQL的數(shù)據(jù)。-v /app/mysql-master/conf:/etc/mysql/conf.d
: 將主機(jī)上的/app/mysql-master/conf
目錄映射到容器內(nèi)的/etc/mysql/conf.d
,用于提供自定義的MySQL配置文件。-v /app/mysql-master/files:/var/lib/mysql-files
: 將主機(jī)上的/app/mysql-master/files
目錄映射到容器內(nèi)的/var/lib/mysql-files
,用于存儲MySQL的文件。-e MYSQL_ROOT_PASSWORD=123456
: 設(shè)置MySQL root用戶的密碼為123456
。-d
: 以后臺模式運(yùn)行容器。mysql:8.0.27
: 使用的MySQL鏡像的標(biāo)簽,這里是MySQL 8.0.27版本
2. 創(chuàng)建配置文件并設(shè)置參數(shù)
vim /app/mysql-master/conf/my.cnf
[mysqld] ## 設(shè)置server_id, 同一個局域網(wǎng)中需要唯一 server_id=1001 ## 指定不需要同步的數(shù)據(jù)庫名稱 binlog-ignore-db=mysql ## 開啟二進(jìn)制日志功能 log-bin=mall-mysql-bin ## 設(shè)置二進(jìn)制日志使用內(nèi)存大?。ㄊ聞?wù)) binlog_cache_size=1M ## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row) binlog_format=mixed ## 二進(jìn)制日志過期清理時間。默認(rèn)值為0,表示不自動清理 expire_logs_days=7 ## 跳過主從復(fù)制中遇到的所有錯誤或指定類型的錯誤,避免slave端復(fù)制中斷 ## 如:1062錯誤是指一些主鍵重復(fù),1032錯誤是因?yàn)橹鲝臄?shù)據(jù)庫數(shù)據(jù)不一致 slave_skip_errors=1062
ps:在編寫配置的時候,參數(shù)后不要留有空格,避免不必要的錯誤?。?!
3. 重啟容器使得配置生效
docker restart mysql-master
4. 進(jìn)入容器內(nèi),進(jìn)行主服務(wù)中進(jìn)行設(shè)置
4.1 進(jìn)入容器
docker exec -it mysql-master /bin/bash
mysql -uroot -p123456
4.2 創(chuàng)建數(shù)據(jù)同步用戶,并給同步用戶授權(quán)
create user 'slave'@'%' identified by '123456'; grant replication slave, replication client on *.* to 'slave'@'%'; flush privileges;
4.3 查看所有用戶的權(quán)限
SELECT user, host, authentication_string, Grant_priv, Super_priv, Create_priv, Insert_priv, Update_priv, Delete_priv, Select_priv FROM mysql.user;
得到這樣得結(jié)果
4.4 查看MySQL主服務(wù)器的當(dāng)前狀態(tài),包括二進(jìn)制日志文件和位置
show master status;
參數(shù)說明:
File(文件) | 表示當(dāng)前正在寫入的二進(jìn)制日志文件的名稱 |
Position(位置) | 表示在二進(jìn)制日志文件中的當(dāng)前寫入位置 |
Binlog_Do_DB | 一個逗號分隔的數(shù)據(jù)庫列表,表示正在復(fù)制的二進(jìn)制日志事件應(yīng)用于哪些數(shù)據(jù)庫 |
Binlog_Ignore_DB | 一個逗號分隔的數(shù)據(jù)庫列表,表示正在復(fù)制的二進(jìn)制日志事件不應(yīng)用于哪些數(shù)據(jù)庫 |
Executed_Gtid_Set | 表示已經(jīng)執(zhí)行的 GTID(全局事務(wù)標(biāo)識符)集合。在MySQL的 GTID 復(fù)制中 |
2.2 從服務(wù)創(chuàng)建配置
1. 從服務(wù)容器創(chuàng)建,并且配置
docker run -p 3308:3306 \ --name mysql-slave \ --privileged=true \ -v /app/mysql-slave/log:/var/log/mysql \ -v /app/mysql-slave/data:/var/lib/mysql \ -v /app/mysql-slave/conf:/etc/mysql/conf.d \ -v /app/mysql-master/files:/var/lib/mysql-files \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:8.0.27
2. 創(chuàng)建配置文件并設(shè)置參數(shù)
vim /app/mysql-slave/conf/my.cnf
[mysqld] ## 設(shè)置server_id, 同一個局域網(wǎng)內(nèi)需要唯一 server_id=1002 ## 指定不需要同步的數(shù)據(jù)庫名稱 binlog-ignore-db=mysql ## 開啟二進(jìn)制日志功能,以備slave作為其它數(shù)據(jù)庫實(shí)例的Master時使用 log-bin=mall-mysql-slave1-bin ## 設(shè)置二進(jìn)制日志使用內(nèi)存大小(事務(wù)) binlog_cache_size=1M ## 設(shè)置使用的二進(jìn)制日志格式(mixed,statement,row) binlog_format=mixed ## 二進(jìn)制日志過期清理時間。默認(rèn)值為0,表示不自動清理 expire_logs_days=7 ## 跳過主從復(fù)制中遇到的所有錯誤或指定類型的錯誤,避免slave端復(fù)制中斷 ## 如:1062錯誤是指一些主鍵重復(fù),1032是因?yàn)橹鲝臄?shù)據(jù)庫數(shù)據(jù)不一致 slave_skip_errors=1062 ## relay_log配置中繼日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave將復(fù)制事件寫進(jìn)自己的二進(jìn)制日志 log_slave_updates=1 ## slave設(shè)置只讀(具有super權(quán)限的用戶除外) read_only=1
ps:在編寫配置的時候,參數(shù)后不要留有空格,避免不必要的錯誤?。?!
3. 重啟容器使得配置生效
docker restart mysql-slave
4. 進(jìn)入容器內(nèi),進(jìn)行從服務(wù)中進(jìn)行設(shè)置
4.1 進(jìn)入容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
4.2 配置從服務(wù)器,指定主服務(wù)器
我這里使用的是 CentOS7,查看服務(wù)器地址
ifconfig
CHANGE MASTER TO MASTER_HOST = '192.168.153.133', -- 主服務(wù)器的 IP 地址 MASTER_USER = 'slave', -- 用于連接主服務(wù)器的用戶名 MASTER_PASSWORD = '123456', -- 用于連接主服務(wù)器的密碼 MASTER_PORT = 3307, -- 主服務(wù)器的端口號 MASTER_LOG_FILE = 'binlog.000011', -- 主服務(wù)器的二進(jìn)制日志文件 MASTER_LOG_POS = 1193, -- 主服務(wù)器的二進(jìn)制日志位置 MASTER_CONNECT_RETRY = 30, -- 如果連接失敗,重試的時間間隔(秒) GET_MASTER_PUBLIC_KEY = 1; -- 啟用 SSL 模式,1 表示啟用
4.3 啟動 MySQL 主從復(fù)制
start slave;
4.4 查看 MySQL 主從復(fù)制狀態(tài)
# \G 可以將橫向的結(jié)果集表格轉(zhuǎn)換成縱向展示。 # slave status的字段比較多,縱向展示比友好 show slave status \G;
主要查看 Slave_IO_Running 和 Slave_SQL_Running是否為 Yes 狀態(tài)。
ps:如果在安裝中遇到問題可以查看下面這篇文章 ↓↓↓ ↓↓↓
2.3 安裝中的遇到的問題
如果在安裝過程中遇到問題,可以查看這篇文章,這是我遇到的一些問題和解決方案。
2.4 配置完成,進(jìn)行簡單測試
1. 在主服務(wù)器中創(chuàng)建并添加數(shù)據(jù)
CREATE DATABASE IF NOT EXISTS mydatabase; USE mydatabase; CREATE TABLE IF NOT EXISTS users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL ); INSERT INTO users (username, email) VALUES ('alice_white', 'alice@example.com'), ('charlie_brown', 'charlie@example.com'), ('emma_jones', 'emma@example.com'); select * from users;
2. 在從服務(wù)器中查詢數(shù)據(jù),是否同步
show databases; use mydatabase; select * from users;
3. 測試結(jié)果
主從服務(wù)器數(shù)據(jù)同步
到此這篇關(guān)于Docker配置MySql環(huán)境的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)Docker配置MySql環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在vscode中使用ssh運(yùn)行docker:從下載到運(yùn)行全流程
首先在本機(jī)或者服務(wù)器上下載docker并運(yùn)行,本文目的旨在本機(jī)下載docker并打包,然后在服務(wù)器上進(jìn)行加載,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-08-08使用Dockerfile部署nodejs服務(wù)的方法步驟
這篇文章主要介紹了使用Dockerfile部署nodejs服務(wù)的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01Docker 容器生命周期 架構(gòu) 以及和VM之間的差異詳解
這篇文章主要介紹了Docker 容器生命周期 架構(gòu) 以及和VM之間的差異詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11解讀Dockerfile中CMD和ENTRYPOINT是否可以混著用
在Dockerfile中,CMD和ENTRYPOINT可以混著用,CMD指定默認(rèn)命令,ENTRYPOINT指定啟動命令,CMD可以被docker run命令的參數(shù)覆蓋2025-03-03使用Docker部署MySQL 5.7&8.0主從集群的方法步驟
這篇文章主要介紹了使用Docker部署MySQL 5.7&8.0主從集群的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Docker容器通過獨(dú)立IP暴露給局域網(wǎng)的方法
這篇文章主要介紹了Docker容器通過獨(dú)立IP暴露給局域網(wǎng)的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-04-04docker?gitea?drone實(shí)現(xiàn)超輕量級CI?CD實(shí)戰(zhàn)詳解
這篇文章主要為大家介紹了docker?gitea?drone實(shí)現(xiàn)超輕量級CI?CD實(shí)戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10